我在我的代码中做了大量的矩阵向量乘法。我发现我的幼稚实现在 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++;
}
}