SMPクラスタ向け OpenMPコンパイラ
佐藤三久 佐藤茂久 草野和寛 田中良夫 並列分散システムパフォーマンス研究室( {msato,
sh-sato, kusano, yoshio}@trc.rwcp.or.jp)
1.はじめに
我々は、0penMP仕様を用いて記述された並列プログラムをSMPクラス夕上で実行するためのコンパイラの開発を進めている。
低価格で高性能なマイクロプロセッサと高速なネットワークの普及により、マイクロブロセッサを用いた既存の高性能なワークステーシヨンやPCを結合したクラスタシステムが高性能計算のためのプラットフォームとして多く構築されている。一方で、ワークステーシヨンを高性能化するために複数のプロセッサを共有メモリ結合した共有メモリマルチブロセッサ(SMP)が一般的に普及しつつある。これからのクラスタシスデムは、SMPを結合した、いわゆるSMP
クラスタシステムが一般的になると予想されている。これまで、我々はPCを用いたSMPをMyrinetネットワークで結合したSMPクラスタシステムCOM-
PaSを構築し、プログラミングの方法と性能特性の研究を進めてきた。
OpenMPは、共有メモリ並列プログラミング言語の標準規格を目指して、既存のFortranやCなどの逐次プログラミング言語を拡張する並列化指示文・実行時ライブラリ・環境変数の仕様である。インクリメンタルな並列化が可能で、並列化指示文を無視して逐次プログラムとしてコンパイルすることもできるため、逐次プログラムからの移行が容易であると言う特徴を持つ。さらに、プログラマは並列性の記述を主に行い、ターゲットマシン向けの最適化はコンパイラによって行えるため、ポータブルな並列プログラムの標準としても期待されている。
SMPクラス夕では、共有メモリシスチムと分散メモリシステムが混合したシステムであり、ノード内の共有メモリシステムにはスレッドプログラミング、ノード間の分散メモリシステムにはメッセージ通信プログラミングを行わなくてならず、プログラミングが繁雑になる。我々の目的は、0poenMPコンパイラによりノード内の共有メモリブログラミングを簡便にするでだけでなく、コンパイラによる解析、最適化を行うことによりOpenMPプログラムをSMP
クラス夕で実行できるようにし、共有メモリシステムから分散メモリメモリ、それらを混合したSMPクラスタシステムに対し、シームレスなプログラミング環境を提供しようというものである。
2.0mni OpenMPコンパイラ
我々の開発を進めているコンパイラOmni OpenMP
コンパイラの構成を図1に示す。ソースプログラムは、中間コードXobjectに変換され、これらの変換をする部分をjavaプログラムによるコンパイラ用クラスライブラリexc
toolkitにより行い、Cプログラムに変換する。これらのプログラムは実行時ルーチンとりンクされ並列実行される。SMP向けのコンパイラは既に公開しており、POSIXスレッドのある
LinuxやSolarisのSMPで利用可能になっている。
Figure 1: Omni OpenMPコンパイラの構成
3.SMPクラスタ向け0penMPコンパイラ
SMPクラス夕に対しては、明示的なりモートコビ一とソフトウェァ分散共有メモリ(SDSM)を併用してノード間でのデータ共有を実現する。コンパイラはまず、共有データへの参照に関して、SDSMによる共有データの一貫性をチェックするコードを挿入し、これを解析することにより冗長なチェックコードの除去、一括化の最適化を行う。さらに、0penMPの並列ループではデータ並列的な最適化を行うことができるため、さらに効率的な明示的なりモートメモリ通信を生成することができる。実行時ルーチンは、
COMPaSの通信レイヤNICAMのりモートメモリ機能を利用して高速化を図つている。初期評価の一例として図2にJacobi緩和法の性能について示す。
Figure 2: COMPaS上でのJacobi緩和法の性能
|