没有足够的 RAM 用于 parfor

Not enough RAM for parfor

如果 parfor 认为计算机没有足够的 ram 来 运行 并行代码,它会自动序列化吗?看起来肯定是这样。

我有两个相同的 parfor 循环(除了其中矩阵的大小)。在第一个上它很容易达到 100% CPU 和我一半的 RAM,在第二个上它达到 12-20% CPU 和我所有的 RAM,并且代码完全相同(大小除外它们内部的矩阵)。

我在这个问题中解决了同样的问题

简而言之,作为 Matlab 池中的每个工人独立于其他工人,每个工人都需要自己的内存量。

不,如果内存不足,Matlab 不会自动序列化您的 for 循环。如果 Matlab 抛出一个正确的错误(据我所知,它确实发生在 Windows PC 上),您可以执行某种 try-catch 语句。 try-catch 只是尝试执行 try 分支中的代码,如果发生错误,它会自动执行 catch 块。在你的情况下,它会像

try
    % parfor here
catch
    % standard for here
end