我用 C++ 编写了两个矩阵乘法程序:Regular MM (source)和 Strassen's MM (source),它们都在大小为 2^kx 2^k 的方阵上运行(换句话说,是偶数大小的方阵)。
结果很糟糕。对于 1024 x 1024 矩阵,Regular MM 需要46.381 sec
,而 Strassen 的 MM 需要1484.303 sec
( 25 minutes
!!!!)。
我试图使代码尽可能简单。在网上找到的其他 Strassen 的 MM 示例与我的代码没有太大区别。Strassen 的代码的一个问题是显而易见的——我没有切换到常规 MM 的截止点。
我的 Strassen 的 MM 代码还有什么其他问题???
谢谢 !
直接链接到来源
http://pastebin.com/HqHtFpq9
http://pastebin.com/USRQ5tuy
编辑1。拳头,很多很好的建议。感谢您抽出宝贵时间分享知识。
我实施了更改(保留了我的所有代码),添加了截止点。MM 的 2048x2048 矩阵,截止 512 已经给出了很好的结果。常规 MM:191.49s Strassen 的 MM:112.179s 显着改善。结果是在配备 Intel Centrino 处理器的史前联想 X61 平板电脑上使用 Visual Studio 2012 获得的。我会做更多检查(以确保我得到正确的结果),并将公布结果。