【发布时间】:2011-04-09 02:04:09
【问题描述】:
我在我的代码中进行了大量的矩阵向量乘法运算。我发现我的幼稚实现在 MKL10 中击败了 cblas_dgemm。我自己猜测为什么会出现这种情况是 dgemm 执行 alpha*A *B + beta *C 而我只执行 A*B。但是幼稚的实现要好得多(约 3 倍加速)。有什么想法为什么会出现这种情况?
这是矩阵向量乘法的实现:
void mat_vec_mul(double *a, double *b, double *c, int m, int k)
{
for (int ii = 0; ii < m; ii++){
for (int kk = 0; kk < k; kk++){
*c += *(a+ii*k+kk) * *(b+ii);
}
c++;
}
}
【问题讨论】:
-
哇!警告:检测到可怕的缓冲区溢出和其他不安全因素!
-
矩阵的大小是多少?您能否也提供用于您的基准测试的确切代码,因为一个不恰当的换位可能意味着很多。
标签: c++ matrix-multiplication intel-mkl