PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/atlas/src/atlas-3.8.3/interfaces/blas/C/testing/c_sblas3.c

https://github.com/numpy/vendor
C | 330 lines | 305 code | 19 blank | 6 comment | 101 complexity | 6ea5b3b0b1248b27d0e6c0eca770a459 MD5 | raw file
  1. /*
  2. * Written by D.P. Manley, Digital Equipment Corporation.
  3. * Prefixed "C_" to BLAS routines and their declarations.
  4. *
  5. * Modified by T. H. Do, 2/19/98, SGI/CRAY Research.
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include "cblas.h"
  10. #include "cblas_test.h"
  11. void F77_sgemm(int *order, char *transpa, char *transpb, int *m, int *n,
  12. int *k, float *alpha, float *a, int *lda, float *b, int *ldb,
  13. float *beta, float *c, int *ldc ) {
  14. float *A, *B, *C;
  15. int i,j,LDA, LDB, LDC;
  16. enum CBLAS_TRANSPOSE transa, transb;
  17. get_transpose_type(transpa, &transa);
  18. get_transpose_type(transpb, &transb);
  19. if (*order == TEST_ROW_MJR) {
  20. if (transa == CblasNoTrans) {
  21. LDA = *k+1;
  22. A = (float *)malloc( (*m)*LDA*sizeof( float ) );
  23. for( i=0; i<*m; i++ )
  24. for( j=0; j<*k; j++ )
  25. A[i*LDA+j]=a[j*(*lda)+i];
  26. }
  27. else {
  28. LDA = *m+1;
  29. A = ( float* )malloc( LDA*(*k)*sizeof( float ) );
  30. for( i=0; i<*k; i++ )
  31. for( j=0; j<*m; j++ )
  32. A[i*LDA+j]=a[j*(*lda)+i];
  33. }
  34. if (transb == CblasNoTrans) {
  35. LDB = *n+1;
  36. B = ( float* )malloc( (*k)*LDB*sizeof( float ) );
  37. for( i=0; i<*k; i++ )
  38. for( j=0; j<*n; j++ )
  39. B[i*LDB+j]=b[j*(*ldb)+i];
  40. }
  41. else {
  42. LDB = *k+1;
  43. B = ( float* )malloc( LDB*(*n)*sizeof( float ) );
  44. for( i=0; i<*n; i++ )
  45. for( j=0; j<*k; j++ )
  46. B[i*LDB+j]=b[j*(*ldb)+i];
  47. }
  48. LDC = *n+1;
  49. C = ( float* )malloc( (*m)*LDC*sizeof( float ) );
  50. for( j=0; j<*n; j++ )
  51. for( i=0; i<*m; i++ )
  52. C[i*LDC+j]=c[j*(*ldc)+i];
  53. cblas_sgemm( CblasRowMajor, transa, transb, *m, *n, *k, *alpha, A, LDA,
  54. B, LDB, *beta, C, LDC );
  55. for( j=0; j<*n; j++ )
  56. for( i=0; i<*m; i++ )
  57. c[j*(*ldc)+i]=C[i*LDC+j];
  58. free(A);
  59. free(B);
  60. free(C);
  61. }
  62. else if (*order == TEST_COL_MJR)
  63. cblas_sgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda,
  64. b, *ldb, *beta, c, *ldc );
  65. else
  66. cblas_sgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda,
  67. b, *ldb, *beta, c, *ldc );
  68. }
  69. void F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n,
  70. float *alpha, float *a, int *lda, float *b, int *ldb,
  71. float *beta, float *c, int *ldc ) {
  72. float *A, *B, *C;
  73. int i,j,LDA, LDB, LDC;
  74. enum CBLAS_UPLO uplo;
  75. enum CBLAS_SIDE side;
  76. get_uplo_type(uplow,&uplo);
  77. get_side_type(rtlf,&side);
  78. if (*order == TEST_ROW_MJR) {
  79. if (side == CblasLeft) {
  80. LDA = *m+1;
  81. A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
  82. for( i=0; i<*m; i++ )
  83. for( j=0; j<*m; j++ )
  84. A[i*LDA+j]=a[j*(*lda)+i];
  85. }
  86. else{
  87. LDA = *n+1;
  88. A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
  89. for( i=0; i<*n; i++ )
  90. for( j=0; j<*n; j++ )
  91. A[i*LDA+j]=a[j*(*lda)+i];
  92. }
  93. LDB = *n+1;
  94. B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
  95. for( i=0; i<*m; i++ )
  96. for( j=0; j<*n; j++ )
  97. B[i*LDB+j]=b[j*(*ldb)+i];
  98. LDC = *n+1;
  99. C = ( float* )malloc( (*m)*LDC*sizeof( float ) );
  100. for( j=0; j<*n; j++ )
  101. for( i=0; i<*m; i++ )
  102. C[i*LDC+j]=c[j*(*ldc)+i];
  103. cblas_ssymm( CblasRowMajor, side, uplo, *m, *n, *alpha, A, LDA, B, LDB,
  104. *beta, C, LDC );
  105. for( j=0; j<*n; j++ )
  106. for( i=0; i<*m; i++ )
  107. c[j*(*ldc)+i]=C[i*LDC+j];
  108. free(A);
  109. free(B);
  110. free(C);
  111. }
  112. else if (*order == TEST_COL_MJR)
  113. cblas_ssymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
  114. *beta, c, *ldc );
  115. else
  116. cblas_ssymm( UNDEFINED, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
  117. *beta, c, *ldc );
  118. }
  119. void F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k,
  120. float *alpha, float *a, int *lda,
  121. float *beta, float *c, int *ldc ) {
  122. int i,j,LDA,LDC;
  123. float *A, *C;
  124. enum CBLAS_UPLO uplo;
  125. enum CBLAS_TRANSPOSE trans;
  126. get_uplo_type(uplow,&uplo);
  127. get_transpose_type(transp,&trans);
  128. if (*order == TEST_ROW_MJR) {
  129. if (trans == CblasNoTrans) {
  130. LDA = *k+1;
  131. A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
  132. for( i=0; i<*n; i++ )
  133. for( j=0; j<*k; j++ )
  134. A[i*LDA+j]=a[j*(*lda)+i];
  135. }
  136. else{
  137. LDA = *n+1;
  138. A = ( float* )malloc( (*k)*LDA*sizeof( float ) );
  139. for( i=0; i<*k; i++ )
  140. for( j=0; j<*n; j++ )
  141. A[i*LDA+j]=a[j*(*lda)+i];
  142. }
  143. LDC = *n+1;
  144. C = ( float* )malloc( (*n)*LDC*sizeof( float ) );
  145. for( i=0; i<*n; i++ )
  146. for( j=0; j<*n; j++ )
  147. C[i*LDC+j]=c[j*(*ldc)+i];
  148. cblas_ssyrk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta,
  149. C, LDC );
  150. for( j=0; j<*n; j++ )
  151. for( i=0; i<*n; i++ )
  152. c[j*(*ldc)+i]=C[i*LDC+j];
  153. free(A);
  154. free(C);
  155. }
  156. else if (*order == TEST_COL_MJR)
  157. cblas_ssyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
  158. c, *ldc );
  159. else
  160. cblas_ssyrk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
  161. c, *ldc );
  162. }
  163. void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
  164. float *alpha, float *a, int *lda, float *b, int *ldb,
  165. float *beta, float *c, int *ldc ) {
  166. int i,j,LDA,LDB,LDC;
  167. float *A, *B, *C;
  168. enum CBLAS_UPLO uplo;
  169. enum CBLAS_TRANSPOSE trans;
  170. get_uplo_type(uplow,&uplo);
  171. get_transpose_type(transp,&trans);
  172. if (*order == TEST_ROW_MJR) {
  173. if (trans == CblasNoTrans) {
  174. LDA = *k+1;
  175. LDB = *k+1;
  176. A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
  177. B = ( float* )malloc( (*n)*LDB*sizeof( float ) );
  178. for( i=0; i<*n; i++ )
  179. for( j=0; j<*k; j++ ) {
  180. A[i*LDA+j]=a[j*(*lda)+i];
  181. B[i*LDB+j]=b[j*(*ldb)+i];
  182. }
  183. }
  184. else {
  185. LDA = *n+1;
  186. LDB = *n+1;
  187. A = ( float* )malloc( LDA*(*k)*sizeof( float ) );
  188. B = ( float* )malloc( LDB*(*k)*sizeof( float ) );
  189. for( i=0; i<*k; i++ )
  190. for( j=0; j<*n; j++ ){
  191. A[i*LDA+j]=a[j*(*lda)+i];
  192. B[i*LDB+j]=b[j*(*ldb)+i];
  193. }
  194. }
  195. LDC = *n+1;
  196. C = ( float* )malloc( (*n)*LDC*sizeof( float ) );
  197. for( i=0; i<*n; i++ )
  198. for( j=0; j<*n; j++ )
  199. C[i*LDC+j]=c[j*(*ldc)+i];
  200. cblas_ssyr2k(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA,
  201. B, LDB, *beta, C, LDC );
  202. for( j=0; j<*n; j++ )
  203. for( i=0; i<*n; i++ )
  204. c[j*(*ldc)+i]=C[i*LDC+j];
  205. free(A);
  206. free(B);
  207. free(C);
  208. }
  209. else if (*order == TEST_COL_MJR)
  210. cblas_ssyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda,
  211. b, *ldb, *beta, c, *ldc );
  212. else
  213. cblas_ssyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda,
  214. b, *ldb, *beta, c, *ldc );
  215. }
  216. void F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
  217. int *m, int *n, float *alpha, float *a, int *lda, float *b,
  218. int *ldb) {
  219. int i,j,LDA,LDB;
  220. float *A, *B;
  221. enum CBLAS_SIDE side;
  222. enum CBLAS_DIAG diag;
  223. enum CBLAS_UPLO uplo;
  224. enum CBLAS_TRANSPOSE trans;
  225. get_uplo_type(uplow,&uplo);
  226. get_transpose_type(transp,&trans);
  227. get_diag_type(diagn,&diag);
  228. get_side_type(rtlf,&side);
  229. if (*order == TEST_ROW_MJR) {
  230. if (side == CblasLeft) {
  231. LDA = *m+1;
  232. A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
  233. for( i=0; i<*m; i++ )
  234. for( j=0; j<*m; j++ )
  235. A[i*LDA+j]=a[j*(*lda)+i];
  236. }
  237. else{
  238. LDA = *n+1;
  239. A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
  240. for( i=0; i<*n; i++ )
  241. for( j=0; j<*n; j++ )
  242. A[i*LDA+j]=a[j*(*lda)+i];
  243. }
  244. LDB = *n+1;
  245. B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
  246. for( i=0; i<*m; i++ )
  247. for( j=0; j<*n; j++ )
  248. B[i*LDB+j]=b[j*(*ldb)+i];
  249. cblas_strmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
  250. A, LDA, B, LDB );
  251. for( j=0; j<*n; j++ )
  252. for( i=0; i<*m; i++ )
  253. b[j*(*ldb)+i]=B[i*LDB+j];
  254. free(A);
  255. free(B);
  256. }
  257. else if (*order == TEST_COL_MJR)
  258. cblas_strmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
  259. a, *lda, b, *ldb);
  260. else
  261. cblas_strmm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
  262. a, *lda, b, *ldb);
  263. }
  264. void F77_strsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
  265. int *m, int *n, float *alpha, float *a, int *lda, float *b,
  266. int *ldb) {
  267. int i,j,LDA,LDB;
  268. float *A, *B;
  269. enum CBLAS_SIDE side;
  270. enum CBLAS_DIAG diag;
  271. enum CBLAS_UPLO uplo;
  272. enum CBLAS_TRANSPOSE trans;
  273. get_uplo_type(uplow,&uplo);
  274. get_transpose_type(transp,&trans);
  275. get_diag_type(diagn,&diag);
  276. get_side_type(rtlf,&side);
  277. if (*order == TEST_ROW_MJR) {
  278. if (side == CblasLeft) {
  279. LDA = *m+1;
  280. A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
  281. for( i=0; i<*m; i++ )
  282. for( j=0; j<*m; j++ )
  283. A[i*LDA+j]=a[j*(*lda)+i];
  284. }
  285. else{
  286. LDA = *n+1;
  287. A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
  288. for( i=0; i<*n; i++ )
  289. for( j=0; j<*n; j++ )
  290. A[i*LDA+j]=a[j*(*lda)+i];
  291. }
  292. LDB = *n+1;
  293. B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
  294. for( i=0; i<*m; i++ )
  295. for( j=0; j<*n; j++ )
  296. B[i*LDB+j]=b[j*(*ldb)+i];
  297. cblas_strsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
  298. A, LDA, B, LDB );
  299. for( j=0; j<*n; j++ )
  300. for( i=0; i<*m; i++ )
  301. b[j*(*ldb)+i]=B[i*LDB+j];
  302. free(A);
  303. free(B);
  304. }
  305. else if (*order == TEST_COL_MJR)
  306. cblas_strsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
  307. a, *lda, b, *ldb);
  308. else
  309. cblas_strsm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
  310. a, *lda, b, *ldb);
  311. }