ParallelCombine

ParallelCombine[f,h[e1,e2,],comb]

計算の部分をすべての並列カーネルに分配して f[h[e1,e2,]]を並列評価し,部分的な結果を comb で結合する.

ParallelCombine[f,h[e1,e2, ]]

h が属性Flatを持つ場合はParallelCombine[f,h[e1,e2,],h]に等しく,それ以外の場合はParallelCombine[f,h[e1,e2,],Join]に等しい.

詳細とオプション

  • ParallelCombine[f,h[e1,,en],comb]は,式 f[h[e1,,ek]], f[h[ek+1,]], , f[h[,en]] を形成し,使用可能なすべてのカーネルでこれらの式を評価し,comb[r1,r2,]を使って結果 riを結合する.
  • デフォルトの結合器であるJoinf[h[e1,,ek]]の結果が頭部 h を持つような関数 f に適している.これには属性Listableを持つすべての関数が含まれる.
  • 属性Flatがある頭部 h の場合,デフォルトの結合器 h は事実上結合法則h[e1,,en] = h[h[e1,,ek],h[ek+1,],,h[,en]]を実装する.
  • comb を矛盾なく選ぶと,ParallelCombine[f,h[e1,e2,],comb]f[h[e1,e2,]]に等しくなる.
  • 使用可能なカーネルがない場合,ParallelCombinef[h[e1,e2,]]を通常の方法で評価する.
  • ParallelCombineParallelizeと同じMethodオプションを取る.次は,使用可能な設定である.
  • "CoarsestGrained"カーネルの数だけたくさんの部分に計算を分割する
    "FinestGrained"できるだけ少ない部分ユニットに計算を分割する
    "EvaluationsPerKernel"->e1カーネルあたり最大で e 個の部分に計算を分割する
    "ItemsPerEvaluation"->m計算をそれぞれ最大 m 個の部分ユニットに分割する
    Automaticオーバーヘッドと負荷分散の間で妥協する
  • ParallelCombineParallelizeと同じDistributedContextsオプションを取る.デフォルト値はDistributedContexts:>$DistributedContextsである.
  • ProgressReportingオプションは,並列計算の進捗状況を報告するかどうかを指定する.
  • デフォルト値はProgressReporting:>$ProgressReportingである.

例題

すべて開くすべて閉じる

  (2)

f をリスト中の複数の部分に並列適用する(4つの並列カーネルが使用可):

各計算がどこで行われているかを示す:

デフォルトで,結合器関数としてJoinが使われる:

並列のフィルタ操作を行う:

スコープ  (9)

リスト可能な関数  (1)

Listableな関数はすべてParallelCombineで並列化できる:

関数がListableではない場合は明示的にMapを使う:

構造保存関数  (3)

多くの関数型プログラミング構造はParallelCombineで並列化できる:

結果が入力と同じ長さである必要はない:

リストの要素を並列評価する:

分解  (3)

全体としてのマッチ要素数は各部分の数の和に等しい:

少なくとも1つの部分にある要素はリストの要素として現れる:

どの部分にもない要素はリストの要素としては現れない:

結合関数  (2)

各サブカーネルがいくつかの加算を行い,結合器が結果を結合する:

Flat関数の結合器を自動的に選ぶ:

典型的なFlat関数:

一般化と拡張  (1)

複数の引数を持つリスト可能な関数:

オプション  (11)

Method  (6)

計算を可能な限り小さいサブユニットに分割する:

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

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

計算をそれぞれが最大でも5つの要素の評価になるように分割する:

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

カーネル1つについての評価数と評価1つについてのアイテム数を可視化する:

DistributedContexts  (5)

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

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

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

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

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

アプリケーション  (3)

並列化で結合された式を簡約する:

計算がカーネル間でどのように分配されているかを調べる:

MapThreadの並列バージョン:

特性と関係  (5)

ParallelMapの実装:

リスト可能な関数にとって,ParallelCombineParallelMapは等しい:

ParallelizeはしばしばParallelCombineによって実装される:

多くのデータ並列コマンドの並列バージョンはParallelCombineを使って容易に書くことができる:

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

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

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

考えられる問題  (2)

結合器は部分結果のタイプと整合性がなければならない:

デフォルトの結合器はJoinである.これはリスト様の結果に相応しい:

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

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

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

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

テキスト

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

CMS

Wolfram Language. 2008. "ParallelCombine." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2010. https://reference.wolfram.com/language/ref/ParallelCombine.html.

APA

Wolfram Language. (2008). ParallelCombine. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ParallelCombine.html

BibTeX

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

BibLaTeX

@online{reference.wolfram_2024_parallelcombine, organization={Wolfram Research}, title={ParallelCombine}, year={2010}, url={https://reference.wolfram.com/language/ref/ParallelCombine.html}, note=[Accessed: 24-November-2024 ]}