1

matlab に parfor ループがあり、実行中は 1 つのプロセスのみが CPU を使用しており (トップとシステム モニターは同じ CPU 使用率を示しています。添付の​​スクリーンショットを参照)、parfor はより速く実行されません。どうして???

ubuntu 12.04 LTS、64 ビット matlab 2012b

pools = matlabpool('size');
if pools ~= 10
    if pools > 0
        matlabpool('close');
    end      
    matlabpool local 10;  %10+ the one I am using = 11 matlab process in system monitor
end

parfor i = 1:num_utt

 dojob();

end

ここに画像の説明を入力

ありがとう、マルシン&エドリック、

あなたが提案するように小さなテストケースを実行しましたが、このhttp://www.mathworks.com/help/distcomp/advanced-topicsで、内側のループコードが外側のループデータにアクセスすることが問題の原因であることに気付きました。 html、彼らはそれをアクセスブロードキャスト変数と呼んでいます。

parfor ループの開始時に、ブロードキャスト変数の値がすべてのワーカーに送信されます。このタイプの変数は便利で不可欠なものですが、ブロードキャスト変数が大きいと、クライアントとワーカーの間で多くの通信が発生する可能性があります。場合によっては、この目的のために一時変数を使用し、ループ内で一時変数を作成して割り当てる方が効率的かもしれません。

私の場合、ブロードキャスト変数は大量のデータを保持しているため、ワーカーに渡すのに問題があります。

一部のデータを削除すると、parfor ループは正常に機能します。

4

0 に答える 0