没有足够的 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
如果 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