①parforによる高速化は、どの程度遅い処理に対して効果が見込めるのでしょうか? また、オーバーヘッドを小さくする方法などありますでしょうか?
②parforのオーバーヘッドは、ワーカーごとにパラメータの実体を用意し、 渡しているために発生しているのでしょうか?
③parpoolを早くする方法はありますか?
以上、よろしくお願い致します。

댓글 수: 2

mizuki
mizuki 2017년 4월 18일
편집: mizuki 2017년 4월 18일
回答ではありませんが、お名前とご所属が記載されていて問題ありませんでしょうか。
ご質問は edit を押すと修正ができますので、必要に応じて部分的に編集してください。
michio
michio 2017년 4월 18일
念のため冒頭部分を編集させて頂きました。

댓글을 달려면 로그인하십시오.

 채택된 답변

Jiro Doke
Jiro Doke 2017년 4월 19일

3 개 추천

実際に並列化しようとしているコードはもともとどの位の時間がかかる処理でしょうか。添付されたファイルはサンプルコードだと思いますが、1秒程度の処理を並列化してもほぼ高速化は得られないでしょう。
どの位で効果が得られるかはコード、データ、PCスペックなどに依存しますので特定の値はあげられませんが、「処理負荷が大きい、つまり遅ければ遅いほど効果が上がる」と言えるでしょう。秒単位よりも分単位。分単位よりも時単位。時単位よりも日単位。というふうに。アルゴリズムやデータサイズが変わらなければオーバーヘッドというのは比較的一定となります。よって処理が遅いものほどそのオーバーヘッドの割合が減少します。
オーバーヘッドはデータのやりとり(クライアントMATLABとワーカーMATLAB間)が大きな要因となりますが、その他接続が持続しているかの通信などによるオーバーヘッドもあります。ユーザーが一番コントロールできるのはデータのやり取りですね。仰る通り、大きな変数を parfor の前で定義し、それを parfor 内で使用するとそのデータの通信がオーバーヘッドとなります。また逆に parfor 内で定義したデータを parfor の後で使用するとそれもオーバーヘッドとなります。
いろいろ要因があると思いますので、実際に実装したいアルゴリズムを使って様々なデータサイズでのシミュレーションを行ってみるのが良いかと思います。

추가 답변 (1개)

michio
michio 2017년 4월 19일

1 개 추천

②についてはおっしゃる通りです。計算に必要なデータのワーカーへの転送に加え、ワーカーから返される結果の転送もオーバーヘッドとして発生します。例えば(可能であれば)各ワーカー上で必要なデータを作成させたり、クライアントに戻す結果を予め選択することで、オーバーヘッドを削減させることができます。
既にご覧になられていなければ、ドキュメンテーションの 「parfor のパフォーマンスの向上」 の冒頭部分や 「タスク関数の作成」 の「タスクによって返されるデータの量を削減する場合」例がオーバーヘッドを削減する際の参考になるかと思います。
parpoolが非常に遅いPCに関しては、下記
などライセンスが関った事例も報告されていますが、原因を詳細に調査できるように、可能であればサポート窓口への問い合わせも検討ください。お問い合わせする際には、保守有効なライセンス番号を確認し、下記のリンクにある Webリクエストフォームまたは電話番号からご連絡下さい。
MATLAB Desktop からもお問い合わせが可能です。デスクトップにある 'サポートのリクエスト'アイコンをクリックして必要事項を記入して送信します。

카테고리

도움말 센터File Exchange에서 並列 for ループ (parfor)에 대해 자세히 알아보기

질문:

ZT
2017년 4월 18일

편집:

ZT
2017년 4월 19일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!