学习笔记-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不被识别为切片变量。





你可能感兴趣的:(MATLAB)