数学建模社区-数学中国
标题:
如何写出比 MATLAB 更快的矩阵运算程序?
[打印本页]
作者:
benLoveting
时间:
2015-4-9 20:48
标题:
如何写出比 MATLAB 更快的矩阵运算程序?
MATLAB 似乎将矩阵运算优化得非常之好,比手写的 C 程序运算 2D 数组还快。想知道它是怎么做到的,有没有办法能比它做得更好。
作者:
benLoveting1314
时间:
2015-4-9 20:52
我来水点体力
作者:
韶华易逝去
时间:
2015-4-9 21:03
矩阵乘法是一个相对成熟的问题,根据矩阵的稀疏程度有不同的优化算法。
不使用GPU加速的MATLAB版本采用的是BLAS中的General Matrix Multiplication[1]。学术界有各种矩阵乘法算法将其复杂度降低到O(n^2.x),例如Strassen和Winograd算法,在BLAS中应该已经使用了Strassen算法。
如果你的MATLAB是安装了Parallel Computing Toolbox的话,那么很可能它已经在使用GPU进行计算了。这种情况下采用的是MAGMA[2]。我没有使用过MAGMA,但我猜测它应该使用了cuBLAS来计算矩阵乘法。
宏观角度上对矩阵乘法的优化包括对局部内存使用的优化(Blocked/Tiled)以及对中间运算步骤的优化(Strassen/Winograd),实现细节上的优化就非常繁多了。比如loop unrolling,多级的tiling,指令级并行等等。其中会牵扯到一些编译器和体系结构的知识,似乎对仅仅希望使用矩阵乘法函数的用户来讲没有什么太大必要去探究。所以我认为写出比MATLAB更快的矩阵乘法是可行但困难的。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5