2016-07-18 11 views
0

parforは、コンピュータにコードを並列で実行するのに十分なRAMがないと判断した場合、自動的にシリアル化しますか?それは間違いなくそうであるようです。parohのRAMが不十分です

私は2つの同一のループを持っています(それらの中の行列のサイズは例外です)。最初のものは100%のCPUと半分のRAMに達し、2番目のものは12-20%のCPUとすべてのRAMに達し、コードはまったく同じです(それらの内部の行列のサイズを除く)。

+0

あなたのコードが[mcve]のために十分短い場合は、コードを含むようにあなたの質問を編集してください。私の経験では、 'parfor'はRAMから外れたときに、単純にOut of Memoryエラーをスローします。 – Adriaan

答えて

0

この問題の同じ問題を解決しましたhere。要するに、Matlabプール内の各作業者が他の作業者とは独立しているため、各作業者は自分の量のメモリが必要です。

また、for-loopがメモリ不足になった場合、Matlabはfor-loopを自動的にシリアル化しません。 Matlabが適切なエラーを投げた場合(私の知る限り、Windows PC上で起こる)、try-catchステートメントを実行できます。 try-catchは、tryブランチのコードを実行しようとしますが、何らかのエラーが発生した場合は、catchブロックを自動的に実行します。あなたの場合、それは何かのようになります

try 
    % parfor here 
catch 
    % standard for here 
end 
+1

できます。私はコードの方が遅くなるので、try catchが一般的にどのように悪いかという情報を追加します。 –

+2

'try/catch 'の問題は、2時間の並列処理後にコードがメモリ不足になった場合、完了できなかった何かをしようとして2時間の時間を無駄にしてしまったことです。出力のサイズを見積もって、それが合計RAMに収まるかどうかを確認し、それに基づいて決定する方が良いでしょう。 – Adriaan

関連する問題