ParallelMap

ParallelMap[f,expr]

expr の第1レベルの各要素に f を並列適用する.

ParallelMap[f,expr,levelspec]

levelspec で指定された expr の部分に f を並列適用する.

詳細とオプション

  • ParallelMapMapの並列版で,自動的に異なるカーネルとプロセッサ間に f をさまざまに分配適用する.
  • ParallelMapは,計算中の副次的な作用を除き,Mapと同じ結果を返す.
  • ParallelMapMapと同じレベル指定を使う.すべてのレベル指定が並列化できる訳ではない.
  • 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)

レベル1でマップする(デフォルト):

レベル2までマップする:

レベル2でマップする:

レベル3までマップする:

レベル1から始めてすべてのレベルでマップする:

負のレベル:

正負のレベルを混ぜてもよい:

各レベルに異なる頭部:

すべてのレベルが並列化できる訳ではない:

一般化と拡張  (2)

ParallelMapは任意の頭部の式に使うことができる:

属性Listableを持つ関数は自動的にマップされる:

オプション  (13)

DistributedContexts  (5)

デフォルトで,現行コンテキストの定義は自動的に配布される:

関数の定義は配布しない:

並列計算に現れるすべてのコンテキストのすべての記号の定義を配布する:

指定されたコンテキストの定義だけを配布する:

DistributedContextsオプションの値をデフォルト値に戻す:

Method  (6)

計算を実行可能な最小のサブユニットに分割する:

計算を使用可能なカーネル数に分割する:

カーネル1個の計算の評価数が最大でも2つになるようにジョブ全体を分割する:

各評価の要素数が最高でも5つになるように計算を分割する:

デフォルトのオプション設定では評価のサイズと評価数のバランスが取られる:

ランタイムが大きく異なる計算はできるだけきめ細かく並列化しなければならない:

多数の簡単な計算は可能な限り少ないまとまりとして分配されるべきである:

ProgressReporting  (2)

一時的な進捗状況の報告は表示しない:

最も正確な進捗状況の報告にはMethod"FinestGrained"を使う:

アプリケーション  (2)

結果が求まるたびに現れるのを見る:

算術パズルを解く:

上記を記号形式で書く:

各文字に一桁の数字を割り当てる:

次に各単語を底が10の数字として解釈する:

特定の数字の割当ての検証を自動化する:

この割当てを組織的に解くために,まず文字のリストを得る:

8つの数字のすべての部分集合のすべての順列を考えることでこのパズルを解くことができる:

上記を並列化する:

一般に の解のみが考慮される:

ParallelTryを使い,自明ではない解が見付かったところで検索を中止することもできる:

特性と関係  (10)

並列化は使用されている最も外側のレベルで行われる:

Mapは,事実上ParallelMapを使って自動的に並列化される:

サイズが分かっているタスクでロードのバランスを取った効果を示す:

ランタイムが分かっているタスクの数を定義する:

並列実行の時間を測る:

スピードアップ(大きいほどよい):

スケジューリングの粒度が細かいほどロードのバランスがよくなりスピードアップにも繋がる:

大きいタスクを最初にスケジュールすると結果がさらによくなる:

複数の引数を持つ関数はMapThreadで並列化することができる:

Parallelizeを使って並列化バージョンを得る:

MapIndexedは要素の指標をマップされた関数に渡す:

Parallelizeを使って並列化バージョンを得る:

ScanMapと同じことを行うが結果は返さない:

インタラクティブに定義された関数は必要なときに自動的にすべてのカーネルに配布される:

手動で定義を配布し自動配布を停止する:

パッケージからの関数には,DistributeDefinitionsよりParallelNeedsを使うとよい:

インストールしたMathematicaにあるWolfram言語の全ファイルのサイズを並列計算で得る:

考えられる問題  (7)

レベル指定が並列化を妨げている場合,ParallelMapMapのような評価を行う:

並列でマップされた関数では副次的な効果は使えない:

副次的な効果をサポートする共有変数を使う:

並列カーネルにとって既知ではない関数を使うと計算が順番に行われることがある:

すべての並列カーネルで関数を定義する:

これで,関数が並列カーネルで評価されるようになった:

現行コンテキストの関数の定義は自動的に配布される:

デフォルトコンテキスト以外のコンテキストからの定義は自動的には配布されない:

DistributeDefinitionsを使ってそのような定義を配布する:

すべてのコンテキストを含むようにDistributedContextsオプションを設定することもできる:

簡単な操作は並列化した方が時間がかかることがある:

最小の並列伝達のオーバーヘッドを測る:

マスターカーネル自身で行われた簡単な計算と比べる:

関数が短い引数リストを簡約することはあるが,リストが長いと簡約は行われない:

部分式のこのような簡約は並列マッピングを不可能にすることがある:

部分式の簡約を阻止し最後にのみ所望の関数を適用する:

入力リストの終り近くにより大きい計算がある場合は所要時間の推定が不正確になるかもしれない:

Wolfram Research (2008), ParallelMap, Wolfram言語関数, https://reference.wolfram.com/language/ref/ParallelMap.html (2021年に更新).

テキスト

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

BibTeX

@misc{reference.wolfram_2024_parallelmap, author="Wolfram Research", title="{ParallelMap}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/ParallelMap.html}", note=[Accessed: 17-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_parallelmap, organization={Wolfram Research}, title={ParallelMap}, year={2021}, url={https://reference.wolfram.com/language/ref/ParallelMap.html}, note=[Accessed: 17-November-2024 ]}