在c ++代码eclipse的中间,我需要计算矩阵A和B的乘法,大小为2400 * 3600(所以尺寸不一样)。矩阵存储在浮点二维数组中。它们不稀疏,没有限制。
每次乘法都需要很长时间(几分钟),我真的需要减少它,因为我有一个重复5000万次的循环。每次新的A和B应该相乘。 欢迎任何类型的建议以减少时间复杂性。 (甚至改变存储数据的结构,如果你认为这可能有帮助)。例如,如果我将数据存储到一维数组中该怎么办?或者使用向量而不是数组?
在一个特定情况下,第一列始终为1,值为1,-1或0。对这种情况有什么看法吗?
在其他情况下,值可以是任何东西。
**这些乘法中的一个是X乘以其转置。对这个特定的建议有什么建议吗?
答案 0 :(得分:13)
我不会愚蠢地试图自己编写:Google for LAPACK或BLAS,两个经过时间考验的数值计算软件包,都优化到N度。两者都有可以使用的C API。
答案 1 :(得分:9)
它肯定有助于存储您的第二个矩阵转置,以便列与缓存行而不是行匹配。 L2缓存和主存储器之间的访问时间差异大约是10倍。
答案 2 :(得分:2)
您可以尝试Eigen。
答案 3 :(得分:1)
如果你正在讨论数百万次乘法,那么我要做的第一件事就是转向像CUDA或DirectCompute这样的工作来将工作卸载到GPU,这更适合这种东西。这就是MATLAB所做的,即使GPU加速是可选的。
有很多GPU加速矩阵乘法的例子,所以你的工作不应该太难。