我有一个代码需要做一些矩阵乘法,比如
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的值答案 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的转置,所以你不需要通用矩阵乘法。 你可以采用代数捷径。