Skip to content

Commit ca4e231

Browse files
Testing CBLAS_dgemm
1 parent e5e276e commit ca4e231

File tree

7 files changed

+70
-15
lines changed

7 files changed

+70
-15
lines changed

src/data/Matrix_A_1D.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
3
2+
[ 1, 2, 1 ]
3+
[ 3, 4, 1 ]
4+
[ 0, 0, 1 ]

src/data/Matrix_B_1D.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
3
2+
[ 0, 1, 3 ]
3+
[ 0, 0, 0 ]
4+
[ 3, 0, 3]

src/main_test.c

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ int main(int argc, char** argv){
2525
const int TEST1 = 0;
2626
const int TEST2 = 0;
2727
const int TEST3 = 0;
28-
const int TEST4 = 1;
28+
const int TEST4 = 0;
2929
const int TEST5 = 0;
30-
const int TEST6 = 1;
31-
// const int TEST7 = 1;
30+
const int TEST6 = 0;
31+
const int TEST7 = 1;
3232

3333

3434
if (TEST1){
@@ -215,8 +215,8 @@ int main(int argc, char** argv){
215215
int bitsize_p = 26;
216216
int n = 2;
217217

218-
int get = get_blocksize(bitsize_p, n);
219-
printf("get = %d \n", get);
218+
int blocksize = get_blocksize(bitsize_p, n);
219+
printf("blocksize = %d \n", blocksize);
220220
double** A = random_matrix_2D(n, p);
221221
double** B = random_matrix_2D(n, p);
222222

@@ -225,8 +225,7 @@ int main(int argc, char** argv){
225225
double* C = zero_matrix_1D(n*n);
226226
double** D = zero_matrix_2D(n);
227227

228-
229-
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,n,n,n, 1, A_1D,n, B_1D,n, 1, C,n);
228+
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,n,n,n, 1, A_1D, n-1, B_1D,n, 1, C,n);
230229
mp_ikj(A, B, D, n);
231230

232231
print_matrix_2D(A, n);
@@ -249,6 +248,39 @@ int main(int argc, char** argv){
249248

250249
}
251250

251+
if (TEST7){
252+
// Testing cblas_dgemm's lda ldb and ldc parameters.
253+
int n;
254+
255+
double** A = read_matrix("data/Matrix_A_1D.txt", &n);
256+
double** B = read_matrix("data/Matrix_B_1D.txt", &n);
257+
double* A_1D = convert_2D_to_1D(A, n);
258+
double* B_1D = convert_2D_to_1D(A, n);
259+
double* C = zero_matrix_1D(n*n);
260+
double* D = zero_matrix_1D(n*n);
261+
double** E = zero_matrix_2D(n);
262+
263+
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,n,n,n, 1, A_1D, 900, B_1D, 3, 1, C,3);
264+
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,n,n,n, 1, A_1D, 6, B_1D, 3, 1, D,3);
265+
mp_ijk(A, B, E, n);
266+
267+
print_matrix_1D(C, n);
268+
printf("\n");
269+
print_matrix_1D(D, n);
270+
printf("\n");
271+
print_matrix_2D(E, n);
272+
273+
274+
delete_matrix_2D(&A, n);
275+
delete_matrix_2D(&B, n);
276+
delete_matrix_2D(&E, n);
277+
278+
delete_matrix_1D(&A_1D, n);
279+
delete_matrix_1D(&B_1D, n);
280+
delete_matrix_1D(&C, n);
281+
delete_matrix_1D(&D, n);
282+
283+
}
252284

253285

254286

src/matrix.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,6 @@ double** read_matrix(char* filename, int* n){
255255
}
256256

257257
int equals_matrix_2D_2D(double** A, double** B, int n){
258-
259258
/* Check if A equals B. The return values are:
260259
0: different
261260
1: equals
@@ -281,7 +280,6 @@ int equals_matrix_2D_2D(double** A, double** B, int n){
281280
}
282281

283282
int equals_matrix_2D_1D(double** A, double* B, int n){
284-
285283
/* Check if A equals B. The return values are:
286284
0: different
287285
1: equals
@@ -301,6 +299,14 @@ int equals_matrix_file(char* filename1, char* filename2){
301299
int n2;
302300
double** mat1 = read_matrix(filename1, &n1);
303301
double** mat2 = read_matrix(filename2, &n2);
302+
if (n1 != n2){
303+
delete_matrix_2D(&mat1, n1);
304+
delete_matrix_2D(&mat2, n2);
305+
return 0;
306+
}
307+
int res = equals_matrix_2D_2D(mat1, mat2, n1);
308+
delete_matrix_2D(&mat1, n1);
309+
delete_matrix_2D(&mat2, n2);
304310

305-
return equals_matrix_2D_2D(mat1, mat2, n1);
311+
return res;
306312
}

src/matrix.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,27 @@
99
// Basic operations
1010
double** zero_matrix_2D(int n);
1111
double* zero_matrix_1D(int n);
12+
1213
double** random_matrix_2D(int n, double p);
1314
double* random_matrix_1D(int n, double p);
15+
1416
double* convert_2D_to_1D(double** mat, int n);
1517
double** convert_1D_to_2D(double* mat, int n);
18+
1619
void delete_matrix_2D(double*** mat, int n);
1720
void delete_matrix_1D(double** mat, int n);
21+
1822
double** transpose_matrix(double** mat, int n);
23+
1924
void print_matrix_2D(double** mat, int n);
2025
void print_matrix_1D(double* mat, int n);
26+
2127
void write_matrix(double** mat, int n, char* filename);
2228
double** read_matrix(char* filename, int* n);
29+
2330
int equals_matrix_2D_2D(double** A, double** B, int n);
2431
int equals_matrix_2D_1D(double** A, double* B, int n);
32+
2533
int equals_matrix_file(char* filename1, char* filename2);
2634

2735

src/matrix_mul.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ double modulo_naive(double a, double p){
66
}
77

88
double modulo_SIMD1(double a, double p, double u){
9-
/* Function .1 from SIMD article for floats.
9+
/* Function 3.1 from SIMD article for floats.
1010
Hypothesis: Rounding mode = nearest and p < 2^26.
1111
*/
1212
double b = a * u;
@@ -71,7 +71,7 @@ u_int32_t modulo_Barrett(u_int64_t a, u_int32_t p, u_int32_t u){
7171
}
7272

7373
void mp_naive(double** A, double** B, double** C, int n, double p){
74-
// Assert C is a zero matrix
74+
// Assert C is a zero matrix.
7575
for (int i=0; i<n; i++){
7676
for (int k=0; k<n; k++){
7777
for (int j=0; j<n; j++){
@@ -166,9 +166,10 @@ void mp_Barrett(double** A, double** B, double** C, int n, double p, u_int32_t u
166166

167167
}
168168

169-
void mp_block(double** A, double** B, double** C, int n, double p, int bitsize_p){
169+
void mp_block(double* A, double* B, double* C, int n, double p, int bitsize_p){
170+
/* Compute the matrix product A*B using blocks and OpenBLAS.
171+
*/
170172

171-
172173
}
173174

174175

src/matrix_mul.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ void mp_SIMD1(double** A, double** B, double** C, int n, double p, double u);
1919
void mp_SIMD2(double** A, double** B, double** C, int n, double p, double u);
2020
void mp_SIMD3(double** A, double** B, double** C, int n, double p, double u);
2121
void mp_Barrett(double** A, double** B, double** C, int n, double p, u_int32_t u);
22-
void mp_block(double** A, double** B, double** C, int n, double p, int bitsize_p);
22+
void mp_block(double* A, double* B, double* C, int n, double p, int bitsize_p);
2323

2424
void mp_ijk(double** A, double** B, double** C, int n);
2525
void mp_kij(double** A, double** B, double** C, int n);

0 commit comments

Comments
 (0)