Parallelize
Parallelize[expr]
自動並列化を使って expr を評価する.
詳細とオプション
- Parallelize[expr]は expr の評価のさまざまな部分を使用可能な別々のカーネルとプロセッサに自動分配する.
- Parallelize[expr]は,一般に,計算中の副産物を除き,expr の評価と同じ結果を返す.
- Parallelizeは属性HoldFirstを持ち,式が並列化の前に計算されないようにする.
- 次は,使用可能なオプションである.
-
Method Automatic 並列化の粒度 DistributedContexts $DistributedContexts 並列計算にシンボルを分配するために使われるコンテキスト ProgressReporting $ProgressReporting 計算の進捗報告を行うかどうか - Methodオプションは使用する並列化の方法を指定する.次は,その可能な設定である.
-
"CoarsestGrained" 計算を使用可能なカーネル数まで分割する "FinestGrained" 計算を可能な最小サブユニットまで分割する "EvaluationsPerKernel"->e 計算をカーネルごとに最高で e 個まで分割する "ItemsPerEvaluation"->m 計算をそれぞれ最大 m 個のサブユニットの評価に分割する Automatic オーバーヘッドと負荷分散の間で妥協する - Method->"CoarsestGrained"はどれもが同じだけ時間がかかる多くのサブユニットを含む計算に適している.これはオーバーヘッドを最小化するが,負荷分散はもたらさない.
- Method->"FinestGrained"は評価時間の異なるいくつかのサブユニットを含む計算に適している.これを使うとオーバーヘッドは高くなるが,負荷分散は最高になる.
- DistributedContextsオプションは expr 中のどのシンボルの定義を計算前に自動的に使用可能な全カーネルに配布するかを指定する.
- デフォルト値はDistributedContexts:>$DistributedContextsで$DistributedContexts:=$Contextであり,現行コンテキスト内の全シンボルの定義が配布されるが,パッケージからのシンボルの定義は配布されない.
- ProgressReportingオプションは並列計算の進捗報告をするかどうかを指定する.
- デフォルト値はProgressReporting:>$ProgressReportingである.
- Parallelize[f[…]]はリストを要素ごとに操作する関数Apply,AssociationMap,Cases,Count,FreeQ,KeyMap,KeySelect,KeyValueMap,Map,MapApply,MapIndexed,MapThread,Comap,ComapApply,MemberQ,Pick,Scan,Select,Throughを並列化する.
- Parallelize[iter]は,反復子Array,Do,Product,Sum,Tableを並列化する.
- Parallelize[list]は list の要素を並列に評価する.
- Parallelize[f[…]]は,リスト可能な関数および結合的な関数,また内積と外積を並列化することができる. »
- Parallelize[cmd1;cmd2;…]は各 cmdiをParallelizeで包み込み,これらを順番に評価する. »
- Parallelize[s=expr]は s=Parallelize[expr]に変換される.
- Parallelize[expr]は expr がParallelizeによって認識されるケースではない場合は expr を順番に評価する.
並列化のオプション
並列化のスコープ
例題
すべて開くすべて閉じる例 (4)
スコープ (23)
構造保存関数 (8)
分解 (4)
反復子 (3)
結合関数 (1)
属性Flatを持つ関数は自動的に並列化される:
連想用の関数 (4)
オプション (13)
DistributedContexts (5)
並列計算に現れるすべてのコンテキストのすべての記号の定義を配布する:
DistributedContextsオプションの値をデフォルトに戻す:
Method (6)
ProgressReporting (2)
アプリケーション (4)
特性と関係 (7)
データ並列関数に関しては,ParallelizeがParallelCombineによって実装される:
並列によるスピードアップは所要時間が分かっている計算を行うことで確かめられる:
一連のタスクの実行にかかる時間は個々のタスクの所要時間の合計である:
スケジューリングをきめ細かくすると負荷分散がよくなりスピードも速くなる:
最初に大きいタスクをスケジュールするとさらに結果がよくなる:
⊗を+, –, *, / から選んで算術式1⊗2⊗3⊗4⊗5⊗6⊗7⊗8⊗9を形成する:
インタラクティブに定義された関数は必要なときに自動的にすべてのカーネルに配布される:
パッケージからの関数の場合は,DistributeDefinitionsよりもParallelNeedsを使うとよい:
考えられる問題 (8)
使用可能なサブカーネルがない場合,結果はマスターカーネルで計算される:
使用された関数がまだ配布されていない場合でも,結果は正しく見えるかもしれない:
関数が配布された場合にのみ結果が使用可能な複数のカーネルで実際に計算される:
デフォルトコンテキスト以外のコンテキストからの定義は自動的には配布されない:
そのような定義はDistributeDefinitionsを使って配布する:
すべてのコンテキストが含まれるようにDistributedContextsオプションを設定することもできる:
サブカーネル上だけで定義された記号は自動的には配布されない:
$DistributedContextsの値はParallelizeでは使われない:
ParallelizeのDistributedContextsオプションの値を設定する:
テキスト
Wolfram Research (2008), Parallelize, Wolfram言語関数, https://reference.wolfram.com/language/ref/Parallelize.html (2021年に更新).
CMS
Wolfram Language. 2008. "Parallelize." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/Parallelize.html.
APA
Wolfram Language. (2008). Parallelize. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Parallelize.html