3

就效率而言,施特拉森算法应该停止递归并应用乘法的最佳交叉点是什么?

我知道这与具体的实现和硬件密切相关,但是对于一般情况,应该有某种指导方针或某人的一些实验结果。

在网上搜索了一下,问一些他们倾向于认为的人

n = 64; 

或者

 n = 32;

任何人都可以验证/拒绝这些结果吗?

4

3 回答 3

1

这应该在每台机器的基础上进行调整(有点像 ATLAS 所做的)。这种优化对于相当大的矩阵是有回报的:如果你自己编写代码,并将其与例如。供应商 BLAS 实现,那么你会发现一个相当大的 n。

Strassen 算法的内存要求也是需要权衡的。

于 2011-03-25T17:50:30.887 回答
1

在我的双核 2.66 Mac Pro 上,使用 [我的实现][1],交叉点小到 n = 16。事实上,我的实现比大型矩阵传统算法快得多——我不知道为什么—— - 我认为它对缓存更友好,因为它专注于较小的本地化数据。事实上,我即将发布一个关于此的问题。

http://ezekiel.vancouver.wsu.edu/~cs330/lectures/linear_algebra/mm/mm.c

于 2011-10-19T19:55:46.377 回答
0

经过大量测试,我得出结论,至少对于我的处理器而言,施特拉森算法的最佳交叉点是n = 128.

我的处理器是:英特尔酷睿 i5-430M。此外,有趣的是,对于 4 线程 CPU,我的实现numberOfProcesses = 8numberOfProcesses = 4. 我不知道这是如何或为什么发生的。我猜想由于通过渠道进行更多的沟通,它会产生更大的开销,并且由于它们不能同时工作,所以肯定会慢一些。显然我错了。如果有人可以解释这个顺便说一句,请写一行,仅供记录。

谢谢。

于 2011-03-27T20:20:20.497 回答