嵌套有for的parfor:变量分类取决于循环endVal

时间:2018-10-25 10:34:50

标签: matlab parallel-processing parfor

我想在像素索引(ix,iy)的两个嵌套循环中计算分形图像。该示例代码只是为RGB值分配了一个随机数,而不是实际的计算。

x = 0:.2:4;
y = 0:.2:3;
nX = length(x);
nY = length(y);
RenderRed = zeros(nX,nY); RenderGreen = zeros(nX,nY); RenderBlue = zeros(nX,nY);

parfor ix = 1:nX
    % for iy = 1:length(y)  % error
    for iy = 1:nY
        % "compute" pixel (ix,iy)
        RenderRed(ix, iy) = rand; RenderGreen(ix, iy) = rand; RenderBlue(ix, iy) = rand;
    end
end

Pctr = [];
Pctr(:,:,1)=RenderRed; Pctr(:,:,2)=RenderGreen; Pctr(:,:,3)=RenderBlue;
handle = image(Pctr);
shg

代码如下所示工作,但是如果iy循环的结束值从nY更改为length(y)-请参见注释行-会发出错误:

Error: The variable RenderRed in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".

为什么?在我对切片变量的理解中,没有任何版本可以使用:必须使用一个辅助变量来收集内部循环的结果,并将其分配给矩阵的一个切片。 但是length(y)而不是nY对变量的分类完全没有影响,因为y从未在循环中分配。

mlint在两个版本中均未发现错误。与MATLAB版本2016b,2017b的行为相同。

1 个答案:

答案 0 :(得分:3)

根据Matlab documentation,这实际上可以工作!当您想在for循环中使用嵌套的parfor循环时:

  

要进行正确的变量分类,您必须通过常量或变量来定义嵌套在parfor循环中的for循环的范围

enter image description here