c代码中的矩阵乘法

时间:2013-06-17 13:25:59

标签: c optimization matrix matrix-multiplication

我有一个代码需要做一些矩阵乘法,比如

    ML2=ML+uMc+c1+c2
    MC2=v*ML+(u*v+1)*Mc+c2

其中ML是

的MXM矩阵
    ML=[1 1 1 1....1;2 2 2 2...2......;M M M.....M]
    MC=[1 2 3 4 ...M;1 2 3 4...M......;1 2 3.....M]

u,v,c1和c2是8位的常数。

我希望使用任何快速库

在快速执行时间内找到ML2,MC2的值

3 个答案:

答案 0 :(得分:1)

您没有说明您想要的平台,但对于矩阵操作,没有什么比英特尔CPU的英特尔数学核心库更快

http://software.intel.com/en-us/intel-mkl

这与我所看到的CPU上的峰值触发器一样接近。然而,MKL是昂贵且封闭的来源。如果你想要一个好的开源和免费替代品,那么请查看Eigen。这使用C ++,但我不知道你是否真的只限于C代码。 Eigen也可以在其他硬件上运行良好,例如AMD(英特尔在AMD CPU上瘫痪它的库)和ARM。

http://eigen.tuxfamily.org/index.php?title=3.0

自己写一个的第三个选择。经过几周的努力,用AVX和OpenMP击败Eigen应该不会太难(Eigen只支持SSE),但你不可能击败MKL。

答案 1 :(得分:0)

对于矩阵A(AxB)和矩阵B(BxC)矩阵的乘法导致矩阵C(AxC)

for(int i=0;i<l;i++)
{
    for(int j=0;j<n;j++)
    {
        matrixC[i][j]=0;
        for(int k=0;k<m;k++)
        {
            matrixC[i][j]=matrixC[i][j]+(matrixA[i][k] * matrixB[k][j]);
        }
    }
}

答案 2 :(得分:0)

由于ML是一堆相同的向量1:M,而MC只是ML的转置,所以你不需要通用矩阵乘法。 你可以采用代数捷径。