学习笔记-MATLAB并行运算

        最好的解决for循环计算速度慢的问题是用矩阵运算代替循环。其次还可以用MATLAB与C混合编程,然后还有MATLAB自带的并行计算方法。

        学习MATLAB并行算法用于模型训练中的for循环:https://blog.csdn.net/awakeljw/article/details/72824674

            matlab在计算中比较耗时的运算主要是循环与矩阵分解等操作,for循环一般最为耗时,采用parfor代替for,parfor可以自动将循环任务分配到多个核中。打开并行运算的方法是parpool(4);或者是左下角的start parallel pool。

            parfor循环中不能使用迭代或者关联性的赋值语句,因为多个核计算时无法交换数据。

            因为parfor只支持一层循环,所以下面这种写法是非并行的,并且可能会出错。

parfor(for) i = 1:100
   parfor(for) j = 1:100
     y(i,j) = i+j;
   end
end
            正确的写法是
i = 1:0.8:100;
j = 1:0.8:100;
[I,J] = meshgrid(i,j);
parfor i = 1:numel(I)
    Y(i) = I(i)+J(i);
end
y = reshape(Y,length(i),length(j));

临时变量(temporary),作用域局限于parfor内,parfor结束后不存在。不影响parfor之前声明的同名变量。

切片变量

  • parfor中可能须要读取或写入parfor之外的矩阵,读取写入位置与循环变量相关。这样就须要向worker传输大量的数据。
  • 矩阵假设被Matlab识别为切片变量,则数据能够分段传输到各worker,提高传输效率。
  • 切片变量矩阵的大小是不可在parfor中改变的。且为了保证Matlab识别正确。每次循环中仅仅能读取由同一个索引值索引的切片。如a[i] a[i+1]同一时候出现则a不被识别为切片变量。





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值