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[]]はリストを要素ごとに操作する関数ApplyAssociationMapCasesCountFreeQKeyMapKeySelectKeyValueMapMapMapApplyMapIndexedMapThreadComapComapApplyMemberQPickScanSelectThroughを並列化する.
  • Parallelize[iter]は,反復子ArrayDoProductSumTableを並列化する.
  • Parallelize[list]list の要素を並列に評価する.
  • Parallelize[f[]]は,リスト可能な関数および結合的な関数,また内積と外積を並列化することができる. »
  • Parallelize[cmd1;cmd2;]は各 cmdiParallelizeで包み込み,これらを順番に評価する. »
  • Parallelize[s=expr]s=Parallelize[expr]に変換される.
  • Parallelize[expr]exprParallelizeによって認識されるケースではない場合は expr を順番に評価する.

例題

すべて開くすべて閉じる

  (4)

関数を並列にマップする:

表を並列に生成する:

インタラクティブに定義された関数は直ちに並列計算に使うことができる:

長い計算のときは,進捗状況や計算終了までの推定時間についての情報が表示される:

スコープ  (23)

リストできる関数  (1)

引数が1つのリスト可能な関数はすべて,リストに適用される場合は自動的に並列化される:

陰的に定義されたリスト:

構造保存関数  (8)

リスト構造を保存する多くの関数型プログラミング構造は並列化できる:

f@@@listMapApply[f,list]に等しい:

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

関数がない場合,Parallelizeは単に要素を並列に評価する:

分解  (4)

百万までの素数の数を数える:

93が最初の100の素数のリストの中にあるかどうか調べる:

リストに5が含まれていないかどうか確認する:

引数が明示的なListである必要はない:

内積と外積  (2)

内積は自動的に並列化される:

外積も自動的に並列化される:

反復子  (3)

反復子変数がある場合とない場合の表の並列評価:

配列を並列で生成する:

総和と積を並列評価する:

関数の評価は並列で行われる:

ファイル名のリストはサブカーネル上でローカルに拡張される:

結合関数  (1)

属性Flatを持つ関数は自動的に並列化される:

連想用の関数  (4)

AssociationMapを並列化する:

KeyMapを並列化する:

KeySelectを並列化する:

KeyValueMapを並列化する:

一般化と拡張  (4)

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

割当ての右辺だけが並列化される:

複合式の要素は順に並列化される:

動画フレームの生成を並列化する:

オプション  (13)

DistributedContexts  (5)

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

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

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

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

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

Method  (6)

計算を可能な限り最小のサブユニットに分解する:

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

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

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

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

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

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

ProgressReporting  (2)

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

Method"FinestGrained"を使って最も正確な進捗報告を得る:

アプリケーション  (4)

メルセンヌ(Mersenne)素数を検索する:

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

可視化の表全体を計算する:

極小値の範囲を並列で検索する:

最適のものを選ぶ:

共有関数を使って計時結果を生成されると同時に記録する:

計時結果付きの動的な棒グラフを設定する:

実行時間が大幅に異なる一連の計算を実行する:

特性と関係  (7)

データ並列関数に関しては,ParallelizeParallelCombineによって実装される:

並列によるスピードアップは所要時間が分かっている計算を行うことで確かめられる:

所要時間が分かっている多くのタスクを定義する:

一連のタスクの実行にかかる時間は個々のタスクの所要時間の合計である:

並列実行によるスピードアップを測る:

スケジューリングをきめ細かくすると負荷分散がよくなりスピードも速くなる:

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

+, , *, / から選んで算術式123456789を形成する:

算術演算の各リストは簡単な計算を与える:

簡単に評価することができる:

0を与える算術演算のすべての列を求める:

対応する式を表示する:

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

手動で定義を配布し自動配布を無効にする:

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

並列使用に適した乱数生成器を設定し各カーネルを初期化する:

考えられる問題  (8)

並列化できない式は通常の方法で評価される:

並列にマップされている関数では副次効果は利用できない:

副次効果をサポートするために共有変数を使う:

使用可能なサブカーネルがない場合,結果はマスターカーネルで計算される:

使用された関数がまだ配布されていない場合でも,結果は正しく見えるかもしれない:

関数が配布された場合にのみ結果が使用可能な複数のカーネルで実際に計算される:

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

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

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

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

関数の定義を明示的に配布する:

定義を修正する:

修正された定義は自動的に配布される:

定義の自動配布を抑制する:

サブカーネル上だけで定義された記号は自動的には配布されない:

$DistributedContextsの値はParallelizeでは使われない:

ParallelizeDistributedContextsオプションの値を設定する:

すべての設定をデフォルト値に戻す:

簡単な操作は並列化されるとより時間がかかることがある:

おもしろい例題  (1)

簡単ではないセルオートマトンを求まるたびに表示する:

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

テキスト

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

BibTeX

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

BibLaTeX

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