SetSharedFunction

SetSharedFunction[f1,f2,]

シンボル fiを,すべての並列カーネルで同期される共通関数として宣言する.

詳細

  • 任意の並列サブカーネルで評価された f[]の形の式はマスターカーネルに送られて評価され,結果は並列サブカーネルに送り返される.
  • 任意の並列カーネルで定義された共通関数の下向きの値は,マスターカーネルで保持されており,並列カーネルへのアクセスはすべてマスターカーネルを通して同期される.
  • 評価されない f[]の形の式はNullを返す.

例題

すべて開くすべて閉じる

  (2)

関数を定義して共有する:

getPIDの定義は,各サブカーネルから呼ばれるとマスターカーネルで評価される:

共通関数がないと,サブカーネルの値が返される:

マスターカーネルで局所変数resultsを操作する共通関数を定義する:

部分カーネルから関数を呼び出す:

マスターカーネル上の変数が変更された:

スコープ  (3)

関数を定義し共有にする:

各サブカーネルから呼ばれると,関数はマスターカーネルで next を更新する:

デフォルトの規則を使って共通関数を設定する:

サブカーネルについて追加の定義を行う:

この関数は共有されているので,マスターカーネルも追加の規則について認識している:

指標付きのデフォルト値を持った共有変数を保持する:

一般化と拡張  (1)

マスターカーネル上の共通関数の遅延的定義:

このような定義は,どのカーネルがこれを評価しようとも,常にマスターカーネルで評価される:

並列カーネルで行われた共通関数の定義:

このような定義は常にその値を求めているカーネルで評価される:

アプリケーション  (3)

共通関数は同期に使うことができる:

共有変数と危険域を使う方法では効率が低下する:

簡単な待ち行列データ型のコンストラクタ:

2つの共有待ち行列を作る:

入力待ち行列を埋める:

入力待ち行列内の要素を並列で処理し,結果を出力待ち行列に入れる:

単一の共通関数を使って入力と結果の両方を伝達する:

検索を設定し手動で放棄されるまで進行状況を表示する:

ここまでの結果,の因数の数のリスト:

特性と関係  (3)

局所変数に共通の追加関数を使って結果を集める:

AppendToを共有変数に使っても同じ効果がある:

fsを(大域的な)共通関数にする:

各サブカーネルが,同じ共通変数についての定義を行う:

共有しなければ,各サブカーネルが関数の独自の(局所)コピーを持つことになる:

共有関数は$SharedFunctionsにリストされる:

考えられる問題  (3)

共通関数は単なるコードの配布には効率的ではなく,連続評価の原因となる:

並列カーネルに必要な任意の関数定義を単に配布する:

共有変数上の別々の読み書き操作はスレッドセーフではない:

共通関数を使って(共有ではない)変数へのアクセスを同期する:

あるいはCriticalSectionを使ってコードセクション全体を原子的にする:

並列の動的プログラミング:

おもしろい例題  (1)

Sowの並列版:

Wolfram Research (2008), SetSharedFunction, Wolfram言語関数, https://reference.wolfram.com/language/ref/SetSharedFunction.html.

テキスト

Wolfram Research (2008), SetSharedFunction, Wolfram言語関数, https://reference.wolfram.com/language/ref/SetSharedFunction.html.

CMS

Wolfram Language. 2008. "SetSharedFunction." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/SetSharedFunction.html.

APA

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

BibTeX

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

BibLaTeX

@online{reference.wolfram_2024_setsharedfunction, organization={Wolfram Research}, title={SetSharedFunction}, year={2008}, url={https://reference.wolfram.com/language/ref/SetSharedFunction.html}, note=[Accessed: 21-November-2024 ]}