4

parfor ループを含む小さなスクリプトを実行しています。スクリプトは次の行で始まります。

parfor i=1:length(vX)
    fprintf('%d/%d\n',i,length(X));
    ...

どうやら私はすぐに印刷物を見るべきです。によって開かれた 2 つのワーカーのプールで実行すると、出力がmatlabpool(2)表示されません。parfor ループを維持したままワーカーを閉じると、ctrl-c を押したときにのみ出力が表示されます。parforをレギュラーに変更するとfor、出力が表示されます。ループが非常に長いため、ループが完了するまで実行されたことはありませんが、出力はスクリプトの 2 行目であり、matlab で認識していないバッファー フラッシュの問題がない限り、すぐに実行されるはずです。何が起こっている??

4

2 に答える 2

3

parfor遅延は、ループを設定するオーバーヘッドが原因であると思われます。

私の経験では、ループを初期化するだけで数秒から最大 15 秒かかります。これは、変数をワーカーにコピーする必要があるため、ループ内のコードでメモリ フットプリントが大きい変数を使用する場合に特に当てはまります。

ワーカー間のデータのコピーはネットワークを介して行われ、基本的なネットワーク アクティビティ モニターはこのアクティビティを明らかにする必要があります。ワーカーの初期化にどれだけのparfor実行時間が費やされているかを判断すると便利です。

私はループfprintfで常に使用しています。parforただし、ループの反復は連続していないため、生成される出力については工夫を凝らしています。

探しているのが進行状況インジケーターだけである場合は、http: //www.mathworks.com/matlabcentral/fileexchange/32101-progress-monitor-progress-bar-that-works-with-parforを確認してください。

于 2013-01-08T17:30:36.913 に答える