はじめに

Wolfram言語における並列計算

Wolfram言語での並列計算は,一つのマスターWolfram言語内から複数のWolfram言語カーネル(ワーカー)プロセスを起動して制御し,並列計算のための分配メモリ環境を提供することに基づいている.並列アプリケーションの実行,作成のためのコンポーネントとツールはすべて,どのWolframシステムにも備えられている.

並列計算機能はほぼすべてがWolfram言語で書かれているため,マシン非依存である.これらの機能はUnix,Linux,Windows,Macintoshプラットフォームで検証されており,マルチコアマシンでローカルに,またはマシンのグリッドや異機種環境ネットワークで使用するのに適している.クライアントコードとアプリケーションコードはすべて分配されるため,共通ファイルシステムは必要ない.

1.gif

並列計算はWolfram言語の一部として提供されるようになったため,並列プログラミング技術が利用しやすくなった.これらはマルチコアマシン,並列計算のための専用ハードウェア,接続されたコンピュータのグリッドの実行を助ける高速ネットワーク等,多くの技術の進歩を利用することができる.

計算を並列に行うには,以下のタスクが行えなければならない:

WSTP

Wolfram言語における並列計算の基礎になっているのはWolfram Symbolic Transfer Protocol (WSTP)である.これはプログラムがWolfram言語と通信するための一般的で柔軟なインターフェースである.これはWolfram言語の基礎となるコンポーネントであり,Wolfram言語自体で幅広く使用されている.一般的な操作モードの一つに,Wolfram言語の別々のコンポーネントがWSTPを使って通信するというものがある.まさにこのように並列計算でWSTPが使われるのである.

WSTPはいくつかの中核となる機能を提供し,プラットフォームやアーキテクチャに非依存であり,ローカルでもネットワークを介してでも使え,Wolfram言語が表せるものは何でも送信でき,Wolfram言語を制御するためのインターフェースを提供する.これらはすべて,同機種,異機種のネットワークでのローカルおよびネットワーク通信を可能にし,データとプログラムのどちらでも送信することができるようにする並列計算の鍵となる機能である.

接続方法

Wolfram言語は同じマシン上でローカルに,またはネットワーク上でリモートで,並列ワーカーをさまざまな方法で実行することができる.また,ネットワークは専用管理アプリケーションで制御されている同機種グリッドかもしれないし,異機種グリッドかもしれない.このような状況で実行するには,Wolfram言語は並列ワーカーを起動してからそれらと通信する必要がある.

このようなさまざまな状況で並列計算を実行するために,Wolfram言語は種々の接続方法を提供する.そのそれぞれは特定のスタイルの使用法に特化している.ここでは主な接続方法のいくつかについて述べる.

ローカルカーネル

ローカルカーネル接続法はマスターWolfram言語と同じコンピュータの並列ワーカーを実行するために使用する.これはマルチコア環境に適しており,並列計算の際に起動して実行する最も簡単な方法である.

プロセッサが2つ以上のコアを持つときは,ローカルのカーネルが並列計算に使える.

Lightweight Grid

Lightweight Grid接続法はマスターWolfram言語から別のコンピュータの並列ワーカーを実行するときに使用する.これはWolfram Lightweight Gridテクノロジーを使ってリモートマシン上でWolfram言語を起動する.これは管理技術のない異機種ネットワークに適している.

クラスタインテグレーション

クラスタインテグレーション接続法は,マスターWolfram言語から別のコンピュータの並列ワーカーを実行するときに使用する.これは多くの他社のクラスタ管理技術と統合する.

リモートカーネル

リモートカーネル接続法はマスターWolfram言語から別のコンピュータの並列ワーカーを実行するときに使用する.これは起動にリモートシェル呼出し技術を利用するため,設定と管理が通常より難しい.

機能

Wolfram言語における並列計算の主な機能:

より低レベルの機能

Parallel`Developer`コンテキストで追加の並列プログラミング機能が利用できる.これにより並列カーネルの特性を得たり設定したり,並行性のための独自のスケジューラを実装したりすることができる.

より低レベルの機能は,そのコンテキストを$ContextPathに加えると最も使いやすい.

一度使うだけなら,デベロッパ関数をParallel`Developer`ClearKernels[]等の完全名で参照するだけで十分である.