如果parfor
认为计算机没有足够的ram来并行运行代码,它会自动序列化吗?这似乎确实如此。
我有两个相同的parfor
循环(除了它们中的矩阵的大小)。在第一个上它很容易达到100%CPU和一半我的RAM,在第二个上它达到12-20%CPU和我所有的RAM,并且代码完全相同(除了它们内部的矩阵的大小)。 / p>
答案 0 :(得分:0)
我已在此问题中解决了同一问题here。
简而言之,当Matlab池中的每个工作者独立于其他工作者时,每个工作者都需要自己的内存量。
不,如果内存不存在,Matlab不会自动序列化你的for循环。如果Matlab抛出正确的错误(据我所知,它确实发生在Windows PC上),你可以做一些try-catch
语句。 try-catch
只是尝试执行try
分支中的代码,如果发生某些错误,它会自动执行catch
块。在你的情况下,它会像
try
% parfor here
catch
% standard for here
end