我尝试使用英特尔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);发布于 2011-09-17 16:48:13
仔细检查cblas_dgemm的所有参数。如果您有一个错误,该函数可能正在读取超出数组的界限。对于不会触发错误的小尺寸,因为坏地址仍将落在单个内存页面内。(但数学将会出错,您应该检查它。)但是200x200矩阵是2.5兆字节的数据,传递错误的大小肯定会触发段错误。
https://stackoverflow.com/questions/6213014
复制相似问题