如何写出比 MATLAB 更快的矩阵运算程序?

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/05 12:01:48
如何写出比 MATLAB 更快的矩阵运算程序?
xTKOP+,5!qM,HD'0NJL3JR@*(:B gsJI7/;gZ3uq西6OᬞysӧKDe4a9bӖv7Ӌ.M ޱ`'QZ9 ~'H-#,e?B M ,{-*% rNpܮ}6>Np}Y@%K =dY=9Pm/PMrjhלewL݊q(s ^疁7C. zYU#S҆i؏VJdp1SÈXv)ś <~6 !T6kkҍ[Ғ@+dpI갨^&%bO:,} !r|:P}a_[!}G5# D,Dv:_O5l:wZ#8Ma=V! 7X&,oזu][DAZokfM~@6kVLՃ *~e݃Ꙟ^/xaF4!Jf  "3И;_^OT %28fO Siet k$IO)ݗd\{SAd@smmhTTZaXكBSWbxygZ

如何写出比 MATLAB 更快的矩阵运算程序?
如何写出比 MATLAB 更快的矩阵运算程序?

如何写出比 MATLAB 更快的矩阵运算程序?
矩阵乘法是一个相对成熟的问题,根据矩阵的稀疏程度有不同的优化算法.
不使用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,指令级并行等等.其中会牵扯到一些编译器和体系结构的知识,似乎对仅仅希望使用矩阵乘法函数的用户来讲没有什么太大必要去探究.