ParallelMap
ParallelMap[f,expr]
expr の第1レベルの各要素に f を並列適用する.
ParallelMap[f,expr,levelspec]
levelspec で指定された expr の部分に f を並列適用する.
詳細とオプション
- ParallelMapはMapの並列版で,自動的に異なるカーネルとプロセッサ間に f をさまざまに分配適用する.
- ParallelMapは,計算中の副次的な作用を除き,Mapと同じ結果を返す.
- ParallelMapはMapと同じレベル指定を使う.すべてのレベル指定が並列化できる訳ではない.
- Parallelize[Map[f,expr]]はParallelMap[f,expr]と等価である.
- ParallelMapのインスタンスが並列化できない場合,そのインスタンスはMapを使って評価される.
- 次は,使用可能なオプションである.
-
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である.
例題
すべて開くすべて閉じる例 (4)
ParallelMapは並列でMapと同じように作用する:
ParallelMapは任意の関数と一緒に使うことができる:
スコープ (6)
一般化と拡張 (2)
オプション (13)
DistributedContexts (5)
並列計算に現れるすべてのコンテキストのすべての記号の定義を配布する:
DistributedContextsオプションの値をデフォルト値に戻す:
Method (6)
ProgressReporting (2)
アプリケーション (2)
8つの数字のすべての部分集合のすべての順列を考えることでこのパズルを解くことができる:
ParallelTryを使い,自明ではない解が見付かったところで検索を中止することもできる:
特性と関係 (10)
Mapは,事実上ParallelMapを使って自動的に並列化される:
サイズが分かっているタスクでロードのバランスを取った効果を示す:
スケジューリングの粒度が細かいほどロードのバランスがよくなりスピードアップにも繋がる:
大きいタスクを最初にスケジュールすると結果がさらによくなる:
複数の引数を持つ関数はMapThreadで並列化することができる:
Parallelizeを使って並列化バージョンを得る:
MapIndexedは要素の指標をマップされた関数に渡す:
Parallelizeを使って並列化バージョンを得る:
インタラクティブに定義された関数は必要なときに自動的にすべてのカーネルに配布される:
パッケージからの関数には,DistributeDefinitionsよりParallelNeedsを使うとよい:
考えられる問題 (7)
レベル指定が並列化を妨げている場合,ParallelMapはMapのような評価を行う:
並列カーネルにとって既知ではない関数を使うと計算が順番に行われることがある:
デフォルトコンテキスト以外のコンテキストからの定義は自動的には配布されない:
DistributeDefinitionsを使ってそのような定義を配布する:
すべてのコンテキストを含むようにDistributedContextsオプションを設定することもできる:
関数が短い引数リストを簡約することはあるが,リストが長いと簡約は行われない:
部分式のこのような簡約は並列マッピングを不可能にすることがある:
テキスト
Wolfram Research (2008), ParallelMap, Wolfram言語関数, https://reference.wolfram.com/language/ref/ParallelMap.html (2021年に更新).
CMS
Wolfram Language. 2008. "ParallelMap." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/ParallelMap.html.
APA
Wolfram Language. (2008). ParallelMap. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ParallelMap.html