MKL CBlas 错误

发布于 2024-11-11 16:26:26 字数 389 浏览 3 评论 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);

I try to get product of two matrix say A and B into C using cblas provided by intel MKL.
Is there any reason for this to be result in error?

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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒解孤独 2024-11-18 16:26:26

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

Double check all the parameters to cblas_dgemm. If you have a mistake, the function could be reading beyond the bounds of the array. For small sizes that won't trigger a fault, since the bad addresses will still fall inside a single memory page. (But the math will be wrong, you should check it.) But a 200x200 matrix is 2.5 megabytes of data, passing the wrong size will definitely trigger a segfault.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文