parforによる高速化
15 views (last 30 days)
Show older comments
①parforによる高速化は、どの程度遅い処理に対して効果が見込めるのでしょうか? また、オーバーヘッドを小さくする方法などありますでしょうか?
②parforのオーバーヘッドは、ワーカーごとにパラメータの実体を用意し、 渡しているために発生しているのでしょうか?
③parpoolを早くする方法はありますか?
以上、よろしくお願い致します。
2 Comments
Accepted Answer
Jiro Doke
on 19 Apr 2017
実際に並列化しようとしているコードはもともとどの位の時間がかかる処理でしょうか。添付されたファイルはサンプルコードだと思いますが、1秒程度の処理を並列化してもほぼ高速化は得られないでしょう。
どの位で効果が得られるかはコード、データ、PCスペックなどに依存しますので特定の値はあげられませんが、「処理負荷が大きい、つまり遅ければ遅いほど効果が上がる」と言えるでしょう。秒単位よりも分単位。分単位よりも時単位。時単位よりも日単位。というふうに。アルゴリズムやデータサイズが変わらなければオーバーヘッドというのは比較的一定となります。よって処理が遅いものほどそのオーバーヘッドの割合が減少します。
オーバーヘッドはデータのやりとり(クライアントMATLABとワーカーMATLAB間)が大きな要因となりますが、その他接続が持続しているかの通信などによるオーバーヘッドもあります。ユーザーが一番コントロールできるのはデータのやり取りですね。仰る通り、大きな変数を parfor の前で定義し、それを parfor 内で使用するとそのデータの通信がオーバーヘッドとなります。また逆に parfor 内で定義したデータを parfor の後で使用するとそれもオーバーヘッドとなります。
いろいろ要因があると思いますので、実際に実装したいアルゴリズムを使って様々なデータサイズでのシミュレーションを行ってみるのが良いかと思います。
0 Comments
More Answers (1)
michio
on 19 Apr 2017
②についてはおっしゃる通りです。計算に必要なデータのワーカーへの転送に加え、ワーカーから返される結果の転送もオーバーヘッドとして発生します。例えば(可能であれば)各ワーカー上で必要なデータを作成させたり、クライアントに戻す結果を予め選択することで、オーバーヘッドを削減させることができます。
既にご覧になられていなければ、ドキュメンテーションの 「parfor のパフォーマンスの向上」 の冒頭部分や 「タスク関数の作成」 の「タスクによって返されるデータの量を削減する場合」例がオーバーヘッドを削減する際の参考になるかと思います。
parpoolが非常に遅いPCに関しては、下記
などライセンスが関った事例も報告されていますが、原因を詳細に調査できるように、可能であればサポート窓口への問い合わせも検討ください。お問い合わせする際には、保守有効なライセンス番号を確認し、下記のリンクにある Webリクエストフォームまたは電話番号からご連絡下さい。
MATLAB Desktop からもお問い合わせが可能です。デスクトップにある 'サポートのリクエスト'アイコンをクリックして必要事項を記入して送信します。
0 Comments
See Also
Categories
Find more on 並列 for ループ (parfor) in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!