2008年10月4日土曜日

Cluster OpenMP

分散メモリ環境で共有メモリ型の並列プログラムを実現する環境としてIntelのCluster OpenMPって機能があるようです。その名の通り、PCクラスタなどの環境でOpenMPによるプログラムが可能となります。Intel Compiler v9.1以降でサポートされているようですが、完全にOpenMP互換というわけではなく、共有する変数にsharable指示子を付ける、などの移植作業は必要なようです。Intel以外の会社の出しているベンチマークを見ると、あまり性能良さそうではないのですが。。。Relaxed Consistency Modelを採用しているようです。Google File SystemもやはりRelaxed Consistency Modelですね。やはり分散環境でそれなりの性能でCoherenceをとろうとしたらRelaxedしかないのかな。
Clustern OpenMPのsharable heapがどのような実装になっているのか調べてませんが、SVM的な事をやってるんでしょう。SVMに関しては、コンパイラの介入を許す場合、コンパイル時に共有メモリアクセスを検出して、前後に特殊な命令列を挟む、などとしてfalse sharing missを減らすようにする工夫があるみたいです。とりあえず滝田さんの論文を見る限り、Shasta(*1)やBlizzard-S(*2)という研究があったようです。どちらも1996年ですね。
共有メモリだがCoherence制御はハードウェアでは行わない。コヒーレンスをとりたい場合はatomic指示をしてTransactional Memory的な制御をする、みたいな方向で新しい並列モデル、作れませんかね。いや、共有メモリって部分はなくした方が良いのかなぁ・・・不正なプログラムの挙動を保証できなくなって、潜在的なバグを作り込みやすい環境になっちゃうし。

*1: A Low Overhead, Software-Only Approarch for Supporting Fine-Grain Shared Memory
*2: Parallel Computer Research in the Wisconsin Wind Tunnel Project