作为一个实验,我实现了 Strassen 矩阵乘法算法,看看是否真的可以为大 n 带来更快的代码。
https://github.com/wcochran/strassen_multiplier/blob/master/mm.c
令我惊讶的是,大 n的速度要快得多。例如,n=1024 的情况使用传统方法耗时 17.20 秒,而使用 Strassen 方法(2x2.66 GHz Xeon)仅需 1.13 秒。什么——15 倍加速!?它应该只是稍微快一点。事实上,即使是小的 32x32 矩阵,它似乎也一样好!?
我可以解释这么多加速的唯一方法是我的算法对缓存更友好——即,它专注于小块矩阵,因此数据更加本地化。也许我应该尽可能地做我所有的矩阵算术。
关于为什么这么快的任何其他理论?