是否可以在这些代码中使用 `parfor` 在 Matlab 中进行并行计算?

Is it possible to use use `parfor` for parallel computing in Matlab in these codes?

我正在使用 parfor 在 Matlab 中进行并行计算。我不熟悉这个命令。如果可能的话,请看下面我的代码并告诉我是否可以用 parfor 编写它。 这些错误和警告出现在 Matlab 编辑器中:

不幸的是,答案是否定的。在行:

Dat.normXpj = normXpj(pj,:);

你给Dat.normXpj赋值,但是你要知道在一个parfor循环中是可以同时执行多个迭代的。那么 Dat.normXpj 应该使用什么值呢? Matlab 无法决定,因此你的错误。

更一般地说,您的代码看起来很乱。我想您想使用 parfor 来提高执行速度。可能更有效的选择是使用探查器(请参阅 profile)来检测代码中的瓶颈,并在可能的情况下进行更正。

最佳,

这里的问题是,我们可以看到您没有以依赖于顺序的方式使用 Dat,但是 parfor 的静态分析机制无法推断出这一点,因为你分配给它的方式。我认为您可以通过为循环的每次迭代创建一个全新的 Dat 来解决这个问题,如下所示:

Dat = struct('normXpj', rand(10,1), 'InitialGuess', 3);
normXpj = rand(10);
parfor idx = 1:10
    tmpDat = struct('normXpj', normXpj(:,idx), 'InitialGuess', Dat.InitialGuess);
    % use 'tmpDat'
    disp(tmpDat);
end