[目次][前ページ][OHP][質疑応答]
(4/4)

4.おわりに(MPI、VPP Fortran、OpenMP…)


今回は、「転送行列の厳密対角化」と「量子モンテカルロ法(ループ アルゴリズム)」の二種類のプログラムについての並列化手法、および並列性能 評価結果を報告した。いずれのプログラムについても、十分な並列化性能が得ら れている。

今回は、いずれのプログラムもMPIを用いて並列化を行なった。他の並列プログ ラミング環境としては、最近広く使われるようになってきたOpenMP、また、VPP 独自のVPP Fotranなどがあるが、筆者の独断と偏見に基づくそれぞれの並列プロ グラミング環境についての利点・欠点を表1に示す。共有メモリ機 でしか使えないという欠点を除けば、これらの3つの中では、OpenMPが最も「取 りくみやすい」並列プログラミング環境であると言える。

 
表 1: 並列プログラミング環境の比較
  MPI VPP Fortran OpenMP
DATAの分割 explicit explicit implicit
段階的並列化 ×
ポータビリティ ×
参入障壁
性能
 

しかし、残念ながら、OpenMPを使って高い並列性能を引き出すには、かなりの熟 練を要する。SGI Origin 2000に代表される「cc-NUMA」のような共有分散アーキ テクチャに基づく並列機では、データが物理的にメモリ上のどこに配置されてい るかによって、アクセス速度にかなり違いが生じる。また、フォルスシェアリン グ等のオーバーヘッドにより極端に性能が低下する場合もある。結局のところ、 高い並列性能を引き出すためには、ユーザが物理的なメモリ配置を意識したプロ グラミングをする必要が生じる。最も大きな問題は、データ分割が言語上は implicit であるため、ユーザから非常に見えにくいという点にある。

一方、MPIは、共有/分散メモリを問わず、非常に高いポータビリティを持ってい る。(実際、LINUXが動作するシングルCPUのノートブック上で、MPIの並列プログ ラムを開発・デバッグし、その後、超並列計算機上でソース変更なしに実行する ことも可能である。) しかも、データ分割の設計が最初にしっかりとなされる ので、完成したプログラムはかなり高い並列性能を示す場合が多い。我々の経験 では、一般に、OpenMPで高い並列性能を示すプログラムは、MPIを用いて並列化 を行なった場合にも、同じく高い並列性能を示す。しかし、逆はかならずしも成 りたたない。(今回報告した「転送行列法」はMPI、OpenMP、いずれの並列化でも 同程度の並列性能を示す。しかし、「量子モンテカルロ法」については、OpenMP による並列化は、ベクトル化と同じくほとんど不可能であり、MPIが唯一の選択 肢である。) しかしながら、MPIでは、OpenMPを用いた場合のような「段階的 並列化」はほとんど不可能なので、初心者にとっては非常に障壁が高い。

その意味で、今必要とされているのは、「共有メモリ機でも動作するVPP Fortran」ではないだろうか? すなわち、並列プログラムの作成において、手続 きをまず分割しておいて、より高い性能を求める場合には、あとから「明示的に」 データの分割を行なう(もちろん逆の順番でも可)ことができるような言語が開発 されれば、初心者にとっても、エキスパートにとっても、非常に有効な並列プロ グラム開発環境となると期待される。



[目次][前ページ][OHP][質疑応答]