9 #include "cblas_test.h" 10 #define TEST_COL_MJR 0 11 #define TEST_ROW_MJR 1 14 void F77_dgemm(CBLAS_INT *layout,
char *transpa,
char *transpb, CBLAS_INT *m, CBLAS_INT *n,
15 CBLAS_INT *k,
double *alpha,
double *a, CBLAS_INT *lda,
double *b, CBLAS_INT *ldb,
16 double *beta,
double *c, CBLAS_INT *ldc ) {
19 CBLAS_INT i,j,LDA, LDB, LDC;
20 CBLAS_TRANSPOSE transa, transb;
22 get_transpose_type(transpa, &transa);
23 get_transpose_type(transpb, &transb);
25 if (*layout == TEST_ROW_MJR) {
26 if (transa == CblasNoTrans) {
28 A = (
double *)malloc( (*m)*LDA*
sizeof( double ) );
31 A[i*LDA+j]=a[j*(*lda)+i];
35 A = (
double* )malloc( LDA*(*k)*
sizeof( double ) );
38 A[i*LDA+j]=a[j*(*lda)+i];
40 if (transb == CblasNoTrans) {
42 B = (
double* )malloc( (*k)*LDB*
sizeof( double ) );
45 B[i*LDB+j]=b[j*(*ldb)+i];
49 B = (
double* )malloc( LDB*(*n)*
sizeof( double ) );
52 B[i*LDB+j]=b[j*(*ldb)+i];
55 C = (
double* )malloc( (*m)*LDC*
sizeof( double ) );
58 C[i*LDC+j]=c[j*(*ldc)+i];
60 cblas_dgemm( CblasRowMajor, transa, transb, *m, *n, *k, *alpha, A, LDA,
61 B, LDB, *beta, C, LDC );
64 c[j*(*ldc)+i]=C[i*LDC+j];
69 else if (*layout == TEST_COL_MJR)
70 cblas_dgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda,
71 b, *ldb, *beta, c, *ldc );
73 cblas_dgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda,
74 b, *ldb, *beta, c, *ldc );
76 void F77_dsymm(CBLAS_INT *layout,
char *rtlf,
char *uplow, CBLAS_INT *m, CBLAS_INT *n,
77 double *alpha,
double *a, CBLAS_INT *lda,
double *b, CBLAS_INT *ldb,
78 double *beta,
double *c, CBLAS_INT *ldc ) {
81 CBLAS_INT i,j,LDA, LDB, LDC;
85 get_uplo_type(uplow,&uplo);
86 get_side_type(rtlf,&side);
88 if (*layout == TEST_ROW_MJR) {
89 if (side == CblasLeft) {
91 A = (
double* )malloc( (*m)*LDA*
sizeof( double ) );
94 A[i*LDA+j]=a[j*(*lda)+i];
98 A = (
double* )malloc( (*n)*LDA*
sizeof( double ) );
100 for( j=0; j<*n; j++ )
101 A[i*LDA+j]=a[j*(*lda)+i];
104 B = (
double* )malloc( (*m)*LDB*
sizeof( double ) );
105 for( i=0; i<*m; i++ )
106 for( j=0; j<*n; j++ )
107 B[i*LDB+j]=b[j*(*ldb)+i];
109 C = (
double* )malloc( (*m)*LDC*
sizeof( double ) );
110 for( j=0; j<*n; j++ )
111 for( i=0; i<*m; i++ )
112 C[i*LDC+j]=c[j*(*ldc)+i];
113 cblas_dsymm( CblasRowMajor, side, uplo, *m, *n, *alpha, A, LDA, B, LDB,
115 for( j=0; j<*n; j++ )
116 for( i=0; i<*m; i++ )
117 c[j*(*ldc)+i]=C[i*LDC+j];
122 else if (*layout == TEST_COL_MJR)
123 cblas_dsymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
126 cblas_dsymm( UNDEFINED, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
130 void F77_dsyrk(CBLAS_INT *layout,
char *uplow,
char *transp, CBLAS_INT *n, CBLAS_INT *k,
131 double *alpha,
double *a, CBLAS_INT *lda,
132 double *beta,
double *c, CBLAS_INT *ldc ) {
134 CBLAS_INT i,j,LDA,LDC;
137 CBLAS_TRANSPOSE trans;
139 get_uplo_type(uplow,&uplo);
140 get_transpose_type(transp,&trans);
142 if (*layout == TEST_ROW_MJR) {
143 if (trans == CblasNoTrans) {
145 A = (
double* )malloc( (*n)*LDA*
sizeof( double ) );
146 for( i=0; i<*n; i++ )
147 for( j=0; j<*k; j++ )
148 A[i*LDA+j]=a[j*(*lda)+i];
152 A = (
double* )malloc( (*k)*LDA*
sizeof( double ) );
153 for( i=0; i<*k; i++ )
154 for( j=0; j<*n; j++ )
155 A[i*LDA+j]=a[j*(*lda)+i];
158 C = (
double* )malloc( (*n)*LDC*
sizeof( double ) );
159 for( i=0; i<*n; i++ )
160 for( j=0; j<*n; j++ )
161 C[i*LDC+j]=c[j*(*ldc)+i];
162 cblas_dsyrk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta,
164 for( j=0; j<*n; j++ )
165 for( i=0; i<*n; i++ )
166 c[j*(*ldc)+i]=C[i*LDC+j];
170 else if (*layout == TEST_COL_MJR)
171 cblas_dsyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
174 cblas_dsyrk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
178 void F77_dsyr2k(CBLAS_INT *layout,
char *uplow,
char *transp, CBLAS_INT *n, CBLAS_INT *k,
179 double *alpha,
double *a, CBLAS_INT *lda,
double *b, CBLAS_INT *ldb,
180 double *beta,
double *c, CBLAS_INT *ldc ) {
181 CBLAS_INT i,j,LDA,LDB,LDC;
184 CBLAS_TRANSPOSE trans;
186 get_uplo_type(uplow,&uplo);
187 get_transpose_type(transp,&trans);
189 if (*layout == TEST_ROW_MJR) {
190 if (trans == CblasNoTrans) {
193 A = (
double* )malloc( (*n)*LDA*
sizeof( double ) );
194 B = (
double* )malloc( (*n)*LDB*
sizeof( double ) );
195 for( i=0; i<*n; i++ )
196 for( j=0; j<*k; j++ ) {
197 A[i*LDA+j]=a[j*(*lda)+i];
198 B[i*LDB+j]=b[j*(*ldb)+i];
204 A = (
double* )malloc( LDA*(*k)*
sizeof( double ) );
205 B = (
double* )malloc( LDB*(*k)*
sizeof( double ) );
206 for( i=0; i<*k; i++ )
207 for( j=0; j<*n; j++ ){
208 A[i*LDA+j]=a[j*(*lda)+i];
209 B[i*LDB+j]=b[j*(*ldb)+i];
213 C = (
double* )malloc( (*n)*LDC*
sizeof( double ) );
214 for( i=0; i<*n; i++ )
215 for( j=0; j<*n; j++ )
216 C[i*LDC+j]=c[j*(*ldc)+i];
217 cblas_dsyr2k(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA,
218 B, LDB, *beta, C, LDC );
219 for( j=0; j<*n; j++ )
220 for( i=0; i<*n; i++ )
221 c[j*(*ldc)+i]=C[i*LDC+j];
226 else if (*layout == TEST_COL_MJR)
227 cblas_dsyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda,
228 b, *ldb, *beta, c, *ldc );
230 cblas_dsyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda,
231 b, *ldb, *beta, c, *ldc );
233 void F77_dtrmm(CBLAS_INT *layout,
char *rtlf,
char *uplow,
char *transp,
char *diagn,
234 CBLAS_INT *m, CBLAS_INT *n,
double *alpha,
double *a, CBLAS_INT *lda,
double *b,
236 CBLAS_INT i,j,LDA,LDB;
241 CBLAS_TRANSPOSE trans;
243 get_uplo_type(uplow,&uplo);
244 get_transpose_type(transp,&trans);
245 get_diag_type(diagn,&diag);
246 get_side_type(rtlf,&side);
248 if (*layout == TEST_ROW_MJR) {
249 if (side == CblasLeft) {
251 A = (
double* )malloc( (*m)*LDA*
sizeof( double ) );
252 for( i=0; i<*m; i++ )
253 for( j=0; j<*m; j++ )
254 A[i*LDA+j]=a[j*(*lda)+i];
258 A = (
double* )malloc( (*n)*LDA*
sizeof( double ) );
259 for( i=0; i<*n; i++ )
260 for( j=0; j<*n; j++ )
261 A[i*LDA+j]=a[j*(*lda)+i];
264 B = (
double* )malloc( (*m)*LDB*
sizeof( double ) );
265 for( i=0; i<*m; i++ )
266 for( j=0; j<*n; j++ )
267 B[i*LDB+j]=b[j*(*ldb)+i];
268 cblas_dtrmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
270 for( j=0; j<*n; j++ )
271 for( i=0; i<*m; i++ )
272 b[j*(*ldb)+i]=B[i*LDB+j];
276 else if (*layout == TEST_COL_MJR)
277 cblas_dtrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
280 cblas_dtrmm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
284 void F77_dtrsm(CBLAS_INT *layout,
char *rtlf,
char *uplow,
char *transp,
char *diagn,
285 CBLAS_INT *m, CBLAS_INT *n,
double *alpha,
double *a, CBLAS_INT *lda,
double *b,
287 CBLAS_INT i,j,LDA,LDB;
292 CBLAS_TRANSPOSE trans;
294 get_uplo_type(uplow,&uplo);
295 get_transpose_type(transp,&trans);
296 get_diag_type(diagn,&diag);
297 get_side_type(rtlf,&side);
299 if (*layout == TEST_ROW_MJR) {
300 if (side == CblasLeft) {
302 A = (
double* )malloc( (*m)*LDA*
sizeof( double ) );
303 for( i=0; i<*m; i++ )
304 for( j=0; j<*m; j++ )
305 A[i*LDA+j]=a[j*(*lda)+i];
309 A = (
double* )malloc( (*n)*LDA*
sizeof( double ) );
310 for( i=0; i<*n; i++ )
311 for( j=0; j<*n; j++ )
312 A[i*LDA+j]=a[j*(*lda)+i];
315 B = (
double* )malloc( (*m)*LDB*
sizeof( double ) );
316 for( i=0; i<*m; i++ )
317 for( j=0; j<*n; j++ )
318 B[i*LDB+j]=b[j*(*ldb)+i];
319 cblas_dtrsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
321 for( j=0; j<*n; j++ )
322 for( i=0; i<*m; i++ )
323 b[j*(*ldb)+i]=B[i*LDB+j];
327 else if (*layout == TEST_COL_MJR)
328 cblas_dtrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
331 cblas_dtrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,