ParallelEvaluate

ParallelEvaluate[expr]

使用可能なすべての並列カーネルで式 expr を評価し,得られた結果のリストを返す.

ParallelEvaluate[expr,kernel]

指定の並列カーネルで expr を評価する.

ParallelEvaluate[expr,{ker1,ker2,}]

並列カーネル keriexpr を評価する.

ParallelEvaluate[expr,kernels,h]

結果を返す前に頭部 h で結果をラップする.

詳細とオプション

  • ParallelEvaluateは属性HoldFirstを持つ.
  • カーネルはKernels[]で返されたKernelObjectを使って,あるいは$KernelIDが返す整数のID番号を使って指定することができる.Allを使うこともできる.
  • 以下の特性を使って実行中のすべてのカーネルのサブセットが選択できる.
  • Allすべてのカーネル
    "CloudKernels"すべてのクラウドカーネル
    "LinkKernels"すべてのリンクカーネル
    "LocalKernels"ローカルで実行中のすべてのカーネル
    "LWGKernels"すべてのLightweightGridカーネル
    "OneKernelPerMachine"マシンごとに一つのカーネル
    "RemoteKernels"リモートマシンのすべてのカーネル
    "SshKernels"すべてのSSHカーネル
    "WSTPServerKernels"すべてのWSTPServerカーネル
  • ParallelEvaluateについてのDistributedContextsオプションは,expr 中のどのシンボルの定義が計算前に使用可能なすべてのカーネル前に配布されるかを指定する.
  • デフォルト値はDistributedContexts:>$DistributedContexts$DistributedContexts:=$Contextである.これは,現行コンテキストの全シンボルの定義を配布するが,パッケージからのシンボルの定義は配布しない.

例題

すべて開くすべて閉じる

  (1)

各並列カーネルの一意的なID番号を入手する:

各並列カーネルのシステムプロセスIDを入手する:

スコープ  (9)

ParallelEvaluateを使ってすべての並列カーネルの初期化を行う:

すべての並列カーネルで局所関数の定義を行う:

すべての並列カーネルの局所特性を入手する:

一つのカーネルから局所特性を入手する:

並列カーネルの局所的なソースからデータにアクセスする:

並列カーネルで計算された結果を一意的なファイルに局所的に保存する:

ファイルが書かれたことを確かめる:

サブカーネルから返された結果が局所的に再評価されないようにする:

マシンごとに一つのカーネルだけで評価を実行する:

すべてのローカルカーネルだけで評価を実行する:

すべてのLightweightGridカーネルだけで評価を実行する:

一般化と拡張  (2)

カーネルオブジェクトあるいはカーネルIDでクエリするカーネルを指定する:

いくつかのカーネルにクエリを行う:

使用可能なすべてのカーネルがAllを使って指定できる:

AllKernels[]に等しい:

オプション  (5)

DistributedContexts  (5)

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

関数の定義はどれも配布しないようにする:

並列計算に出現する全コンテキストの全シンボルの定義を配布する:

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

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

アプリケーション  (4)

すべての並列カーネルの特性を表にする:

同じコードをすべての並列カーネルで実行することでモンテカルロ(Monte-Carlo)シミュレーションを並列化する:

個々の平均を組み合せてより正確な全体としての結果にする:

大きい中間結果は個々の並列カーネルに局所的に保存する:

局所的に保存されたデータを使う:

これらの多項式のすべてが既約かどうか確かめる:

同期に使われた共有変数:

計算が放棄されるまで各カーネルにつき1つの検索ループを実行する:

特性と関係  (5)

ParallelEvaluateは各サブカーネルで同じ評価を行う:

Parallelizeは各サブカーネルに評価の一部を分配する:

決定性計算は各並列カーネルで同じ結果になる:

ランダム性を含む計算は各並列カーネルで独立した結果になる:

SeedRandomを設定することで同じ結果を強制する:

個々の並列カーネルには他とは異なるIDがある.このIDを使って式を一意的にすることができる:

DistributeDefinitionsParallelEvaluateを使ってすべてのカーネルに定義を伝える:

明示的なParallelEvaluateも同じことを行う:

配布された定義は新たなカーネルにも既知となる:

ParallelEvaluateの結果は既知とはならない:

ParallelNeedsParallelEvaluateを使ってすべての並列カーネルでNeedsを実行する:

また,すべての使用が記憶されるので,新たなカーネルにも必要なパッケージがロードされる:

ParallelEvaluateは使用された関数の定義を自動的に配布する:

考えられる問題  (2)

副次的な効果は異なる並列カーネル間で使うことはできない:

共有変数を使って副次効果をサポートする:

ParallelEvaluateで定義をしている場合は,定義の自動配布はしないようにする:

おもしろい例題  (2)

計算が手動で放棄されるまで が素数になるような を求める:

異なる多くのマシンで実行中の複数のカーネルを与える:

各マシンのキャッシュに一回だけリソース関数をロードする:

すべてのカーネルでリソース関数を使う:

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

テキスト

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

CMS

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

APA

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

BibTeX

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

BibLaTeX

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