parforによる高速化

14 views (last 30 days)
ZT
ZT on 18 Apr 2017
Edited: ZT on 19 Apr 2017
①parforによる高速化は、どの程度遅い処理に対して効果が見込めるのでしょうか? また、オーバーヘッドを小さくする方法などありますでしょうか?
②parforのオーバーヘッドは、ワーカーごとにパラメータの実体を用意し、 渡しているために発生しているのでしょうか?
③parpoolを早くする方法はありますか?
以上、よろしくお願い致します。
  2 Comments
mizuki
mizuki on 18 Apr 2017
Edited: mizuki on 18 Apr 2017
回答ではありませんが、お名前とご所属が記載されていて問題ありませんでしょうか。
ご質問は edit を押すと修正ができますので、必要に応じて部分的に編集してください。
michio
michio on 18 Apr 2017
念のため冒頭部分を編集させて頂きました。

Sign in to comment.

Accepted Answer

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

More Answers (1)

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

Categories

Find more on 並列 for ループ (parfor) in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!