parforによる高速化

11 views (last 30 days)
ZT
ZT on 18 Apr 2017
Edited: ZT on 19 Apr 2017
①parforによる高速化は、どの程度遅い処理に対して効果が見込めるのでしょうか? また、オーバーヘッドを小さくする方法などありますでしょうか?
②parforのオーバーヘッドは、ワーカーごとにパラメータの実体を用意し、 渡しているために発生しているのでしょうか?
③parpoolを早くする方法はありますか?
以上、よろしくお願い致します。
  2 Comments
michio
michio on 18 Apr 2017
念のため冒頭部分を編集させて頂きました。

Sign in to comment.

Accepted Answer

jiro
jiro 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 からもお問い合わせが可能です。デスクトップにある 'サポートのリクエスト'アイコンをクリックして必要事項を記入して送信します。

Community Treasure Hunt

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

Start Hunting!