parfor
は、コンピュータにコードを並列で実行するのに十分なRAMがないと判断した場合、自動的にシリアル化しますか?それは間違いなくそうであるようです。parohのRAMが不十分です
私は2つの同一のループを持っています(それらの中の行列のサイズは例外です)。最初のものは100%のCPUと半分のRAMに達し、2番目のものは12-20%のCPUとすべてのRAMに達し、コードはまったく同じです(それらの内部の行列のサイズを除く)。
parfor
は、コンピュータにコードを並列で実行するのに十分なRAMがないと判断した場合、自動的にシリアル化しますか?それは間違いなくそうであるようです。parohのRAMが不十分です
私は2つの同一のループを持っています(それらの中の行列のサイズは例外です)。最初のものは100%のCPUと半分のRAMに達し、2番目のものは12-20%のCPUとすべてのRAMに達し、コードはまったく同じです(それらの内部の行列のサイズを除く)。
この問題の同じ問題を解決しましたhere。要するに、Matlabプール内の各作業者が他の作業者とは独立しているため、各作業者は自分の量のメモリが必要です。
また、for-loopがメモリ不足になった場合、Matlabはfor-loopを自動的にシリアル化しません。 Matlabが適切なエラーを投げた場合(私の知る限り、Windows PC上で起こる)、try-catch
ステートメントを実行できます。 try-catch
は、try
ブランチのコードを実行しようとしますが、何らかのエラーが発生した場合は、catch
ブロックを自動的に実行します。あなたの場合、それは何かのようになります
try
% parfor here
catch
% standard for here
end
できます。私はコードの方が遅くなるので、try catchが一般的にどのように悪いかという情報を追加します。 –
'try/catch 'の問題は、2時間の並列処理後にコードがメモリ不足になった場合、完了できなかった何かをしようとして2時間の時間を無駄にしてしまったことです。出力のサイズを見積もって、それが合計RAMに収まるかどうかを確認し、それに基づいて決定する方が良いでしょう。 – Adriaan
あなたのコードが[mcve]のために十分短い場合は、コードを含むようにあなたの質問を編集してください。私の経験では、 'parfor'はRAMから外れたときに、単純にOut of Memoryエラーをスローします。 – Adriaan