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