Getting Started

Wolfram言語にはツールと設定がすべて組み込まれているため,すぐに並列計算を実行することができる.並列計算を活用するには通常,マルチコアマシンまたは並列Wolfram言語カーネルのグリッドへのアクセスがある方がよい.幸運にもマルチコアマシンはここのところ多くの設定タイプで一般的になってきている.

最初のステップはシステムが実行中であることを示すだけかもしれないが,ParallelEvaluateである.これが最初の並列計算なら,これにより設定された並列カーネルが起動する.

次の例は各並列カーネルのプロセスIDを返す.

次は各カーネルのマシン名を返す.すべてが同じマシンで実行中であることを示している.

並列カーネルの状態モニタを開くと便利であることがある.これは以下のようなものである.

1.gif

これで実際の計算が実行できる.非常に簡単な並列プログラムに検索がある.次の例では階乗に1が加えられ,結果が素数であるかどうかが検証される.これは通常のWolfram言語の計算をParallelizeで囲むことで行われる.

いくつかの値が素数であることが示される.

別の例として,メルセンヌ(Mersenne)素数を検索する.これも以下のように計算をParallelizeで囲むことで行う.

最初の15個のメルセンヌ素数が求められたことが示された.

ここまで来たら,Wolfram言語で並列計算の実行を開始する準備は整っている.

並列計算で独自の関数を使う

前の例は,並列化可能な式をParallelize[]で囲むことで行われた.式に組込み関数だけでなく,ユーザ定義の関数が含まれる場合は準備が必要になる.

並列カーネルで評価する組込みシンボル以外のシンボルの定義は,使用前にすべてのカーネルに「配布」する必要がある.

が素数であるかどうかを検証する述語を定義する.
すべての並列カーネルに定義を配布する.
これで並列計算の一部として使えるようになった.

定義を配布するのを忘れて並列計算を行ったら何が起るのだろうか.

この定義は上のmersenneQと同じである.
並列カーネルは定義を知らないので,Trueを返すことはない.

多くの場合は計算は常に動作するように見えるが,パフォーマンスを分析してみると,それが実際にはあるべき速度では評価されていないことが分かる.

次の計算は正しい結果を返すが,通常のTableほど速くない.

これが正常に動作しているように見える理由は,未知の関数m2は並列カーネルでは評価されず,式 m2[10000]m2[10001]は送り返されて,定義が既知であるマスターカーネルで評価されるからである.