矩阵向量多重与dgemm

时间:2011-04-09 02:04:10

标签: c++ matrix-multiplication intel-mkl

我在我的代码中进行了大量的矩阵向量乘法运算。我发现我的天真实现在MKL10中胜过cblas_dgemm。我自己的猜测为什么会出现这种情况是dgemm做alpha * A * B + beta * C而我只做A * B.但天真的实施明显更好(~3倍加速)。有什么想法可能是这种情况吗?

这是matrix-vector-mult实现:

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++;
    }
}   

2 个答案:

答案 0 :(得分:0)

嗯,你已经对代码进行了基准测试。但为什么不尝试以与DGEMM相同的方式进行乘法?

你已经说过DGEMM会做alpha * A * B + beta * C,所以为什么不尝试写这个也看看它与DGEMM的比较。

你可能会发现它和DGEMM一样快(或慢)。你做的操作少得多,这很可能是它更快的原因。

答案 1 :(得分:0)

原始blas例程http://www.netlib.org/blas/dgemm.f包含许多测试beta值的if语句。我想这已经在性能上产生了一些开销。我想知道如果你采用原始的dgemm例程并将其专门用于你正在考虑的情况会发生什么。此外,根据矩阵大小进行比较会很高兴。

相关问题