MATLAB 并行计算效率很低,咋办?

因为这里矩阵乘法本身就是多线程的,目前版本 MATLAB 大部分的内建数值计算函数也都是多线程的。具体来说,MATLAB 的矩阵乘法在 intel CPU 上调用了 mkl 的多线程版本作为 BLAS想更快的话可以考虑下 GPU 运算
■网友
并行不一定更快,甚至会更慢,因为会有通讯成本。提速的方案有: 1 改进程序算法,尽量降低时间复杂度2 用profiler计时,找到那个性能瓶颈3 瓶颈用mex或Java改写或网上找到替代品。
■网友
本人是做FDTD优化的,对matlab的并行运算折磨了很久。 具体到你的问题:1. 只有两个3000*3000的矩阵,通信cost不是问题,非常小。2.matlab的矩阵乘法和所有点运算都是多线程优化的,所以你的spmd的耗时正好是4倍。3.对于一个3000*3000的矩阵运算,GPU运算比CPU快的不是一点半点的。以我的经验,矩阵运算尺寸100*100~1000*1000是CPU与GPU的运算能力的相交点(我的笔记本的cpu i7 6770,GPU NV960M)。尺寸100一下果断CPU+parfor,尺寸500以上,尝试GPU。4.对于你所需要的运算(随机,矩阵乘法)已经是最基本的运算,不要指望能找到能优化的mex。5.对于更普遍的问题,在运算中,我们经常需要其他的“常量”,如果这些常量比较大的话,是会严重影响parfor和GPU运算的。其中,parfor的comm cost 远高于GPU。总结起来:大尺寸用GPU,小尺寸的复杂运算用parfor,基础运算啥也不用最快。
■网友
【MATLAB 并行计算效率很低,咋办?】 大规模矩阵运算?
ArrayFire +GPU+c++效率应该没的说吧.


    推荐阅读