0

我尝试使用英特尔 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);
4

1 回答 1

2

仔细检查 cblas_dgemm 的所有参数。如果您有错误,则该函数可能正在读取超出数组范围的内容。对于不会触发故障的小尺寸,因为坏地址仍将位于单个内存页面中。(但数学会出错,你应该检查一下。)但是一个 200x200 的矩阵是 2.5 兆字节的数据,传递错误的大小肯定会触发 segfault。

于 2011-09-17T08:48:12.600 回答