我用 C++、Python 和 Java 编写了用于矩阵乘法的程序,并测试了它们乘以两个 2000 x 2000 矩阵的速度(见帖子)。标准的 ikj 实施 - 在- 采用:
现在,我已经在 Python 和 C++ 中实现了用于矩阵乘法的 Strassen 算法,就像在维基百科上一样。这些是我的时间:
为什么 Strassen 矩阵乘法比标准矩阵乘法慢得多?
想法:
- 一些缓存效果
- 执行:
- 错误(生成的 2000 x 2000 矩阵是正确的)
- 空乘(对于 2000 x 2000 -> 2048 x 2048 应该不那么重要)
这尤其令人惊讶,因为它似乎与其他人的经历相矛盾:
- 为什么我的 Strassen 矩阵乘法器这么快?
- 矩阵乘法:Strassen vs. Standard - Strassen 对他来说也较慢,但至少处于同一数量级。
编辑:在我的情况下,Strassen 矩阵乘法较慢的原因是:
- 我让它完全递归(见 tam)
- 我有两个函数
strassen
和strassenRecursive
. 如果需要,第一个将矩阵的大小调整为 2 的幂,并调用第二个。但是strassenRecursive
并没有递归调用自身,而是strassen
.