21 int sgemm_ (
const char *transa,
const char *transb, FINTEGER *m, FINTEGER *
22 n, FINTEGER *k,
const float *alpha,
const float *a,
23 FINTEGER *lda,
const float *b, FINTEGER *
24 ldb,
float *beta,
float *c, FINTEGER *ldc);
28 int sgeqrf_ (FINTEGER *m, FINTEGER *n,
float *a, FINTEGER *lda,
29 float *tau,
float *work, FINTEGER *lwork, FINTEGER *info);
33 float *new_random_vec(
int size)
35 float *x =
new float[size];
36 for (
int i = 0; i < size; i++)
44 FINTEGER m = 10, n = 20, k = 30;
45 float *a = new_random_vec(m * k), *b = new_random_vec(n * k), *c =
new float[n * m];
46 float one = 1.0, zero = 0.0;
48 printf(
"BLAS test\n");
50 sgemm_(
"Not transposed",
"Not transposed",
51 &m, &n, &k, &one, a, &m, b, &k, &zero, c, &m);
55 for (
int i = 0; i < m; i++) {
56 for (
int j = 0; j < n; j++) {
58 for (
int l = 0; l < k; l++)
59 accu += a[i + l * m] * b[l + j * k];
60 printf (
"%6.3f ", accu - c[i + j * m]);
65 long info = 0x64bL << 32;
66 long mi = 0x64bL << 32 | m;
67 float *tau =
new float[m];
72 printf(
"Intentional Lapack error (appears only for 64-bit INTEGER):\n");
73 sgeqrf_ (&mi, &n, c, &m, tau, &work1, &lwork, (FINTEGER*)&info);
76 printf(
"info=%016lx\n", info);
78 if(info >> 32 == 0x64b) {
79 printf(
"Lapack uses 32-bit integers\n");
81 printf(
"Lapack uses 64-bit integers\n");