0

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

    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 的值

4

3 回答 3

1

您没有说明您想要的平台,但对于矩阵运算,没有什么比 Intel CPU 的 Intel Math Kernel Library 更快

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。

于 2013-06-17T13:50:52.953 回答
0

对于 matrixA(AxB) 和 matrixB(BxC) 矩阵相乘得到 matrixC(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]);
        }
    }
}
于 2013-06-17T13:37:19.643 回答
0

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

于 2013-06-18T12:49:55.553 回答