交叉点:斯特拉森的算法

时间:2011-03-25 17:30:39

标签: algorithm recursion performance strassen

嘿伙计们,我已经搜索了很多,看起来似乎没有相关的问题。我想知道的是,在效率方面,Strassen算法应该停止递归并应用乘法的最佳交叉点是什么。

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

在线搜索并询问某些人,他们倾向于认为这是

n = 64; 

 n = 32;

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

3 个答案:

答案 0 :(得分:1)

这应该基于每台机器进行调整(有点像ATLAS)。这种优化可以为相当大的矩阵带来回报:如果您自己编写代码,并将其与例如。供应商BLAS实现,然后你会发现一个非常大的n。

Strassen算法的内存要求也值得考虑。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

经过大量测试后,我得出结论,至少对于我的处理器而言,Strassen算法为n = 128的最佳交叉点。

我的处理器是:Intel Core i5-430M。另外,有趣的是,对于4线程CPU,我的实现对于numberOfProcesses = 8numberOfProcesses = 4更好一些。我不知道这是怎么发生的。我猜想由于通过渠道进行更多的沟通,它会产生更大的开销,因为它们不能同时工作,所以肯定会慢一点。显然我错了。如果有人可以解释这个顺便说一句,请删除一行,只是为了记录。

感谢。

相关问题