我尝试使用英特尔MKL提供的cblas将两个矩阵A和B的乘积变成C语言。 是否有任何理由导致错误?
double * A, *B, *C;
A = (double *) calloc(20 * 200, sizeof (double));
B = (double *) calloc(200 * 200, sizeof (double));
C = (double *) calloc(20 * 200, sizeof (double));
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
20, 200, 200,
1.0, A, 20,
B, 200,
0.0, C, 20);
答案 0 :(得分:1)
仔细检查cblas_dgemm的所有参数。如果您有错误,该函数可能超出数组范围。对于不会触发故障的小尺寸,因为坏地址仍然落在单个存储页面内。 (但是数学会出错,你应该检查它。)但200x200矩阵是2.5兆字节的数据,传递错误的大小肯定会引发段错误。