XcalableMP

XcalableMP、一般にXMPとして知られるこの言語は、スーパーコンピュータなど、多数のプロセッサが連携して動作する大規模並列計算機システム上での高性能計算を実現するために開発されました。既存の広く利用されているプログラミング言語であるC言語およびFortranに対して、並列処理に必要な機能が追加拡張されたものです。

XMPの基本的な実行モデルは、SPMD(Single Program Multiple Data)方式を採用しています。これは、すべての計算主体(XMPでは「ノード」と称されます)が同一のプログラムを実行し、各ノードがそれぞれに割り当てられた異なるデータを処理するというモデルです。この方式により、一つの大きな計算問題を小さな部分問題に分割し、各ノードに分散させて同時に処理させることが可能となります。

XMPは、並列化の記述を支援するために、「グローバルビュー」と「ローカルビュー」という、性質の異なる二つのアプローチをプログラマに提供しています。これにより、並列アルゴリズムの特性や記述の容易さに応じて、適切な手法を選択できるようになっています。

グローバルビューでは、データや計算処理を、あたかも単一の、すべてのノードからアクセス可能な巨大な空間に存在するかのように扱います。この考え方に基づき、プログラマはまず「テンプレート」と呼ばれる仮想的なインデックス空間を定義します。そして、実際のデータ配列がこのテンプレートにどのように対応し、結果的にどのノードに配置されるかを指定します。並列処理の指示は、ソースコード内に特別な「指示文」(ディレクティブ)を記述することで行われます。これは、共有メモリ環境でよく用いられるOpenMPにおける指示文による並列化記述に似ています。XMPの指示文を用いることで、データのノード間への分散配置(ディストリビューション)や、ノード間でのデータ通信(レプリケーション、リダクション、ブロードキャストなど)、さらにはループ構造の並列実行などを容易に制御できます。XMPの指示文の中には、過去の大規模並列計算で重要な役割を果たしたHigh Performance Fortran(HPF)の構文や概念を受け継いだものが含まれており、HPFの知識があるプログラマにとっては理解しやすい側面もあります。

一方、ローカルビューは、各ノードが自身のローカルメモリ空間に保持するデータに直接アクセスし、必要に応じて他のノードのメモリ空間に明示的にアクセスすることを主体としたアプローチです。この方法では、プログラマは他のノードのデータにアクセスする際に、対象となるノード番号を直接指定したり、ノード間の通信操作を具体的に記述したりします。この手法は、PGAS(Partitioned Global Address Space、区分化大域アドレス空間)モデルを具現化した言語の一つであるCo-array Fortranの機能に類似しています。特に、Fortran言語向けのXMP実装は、Co-array Fortranの機能を取り込み、それをさらに拡張した上位互換性を持っています。これにより、Co-array Fortranで書かれた既存の並列プログラム資産を活かしつつ、XMP独自の高度な機能を利用した開発を行うことが可能です。

これらグローバルビューとローカルビューの選択肢を提供することで、XMPは様々なタイプの並列アルゴリズムに対して柔軟な記述能力を発揮します。例えば、データ配置が複雑であったり、ノード間で密接なデータ交換が必要なタスクではローカルビューが適している場合があります。対照的に、規則的なデータ構造を持つ大規模なループ処理などでは、グローバルビューによる指示文を用いた記述がコードの簡潔さや保守性を高めることがあります。

XMPは、既存の強力な言語であるCおよびFortranを基盤としながら、分散メモリ並列計算環境に特化した豊富な機能を提供します。高レベルな指示文による並列性の抽象化から、ノード間通信のより詳細な制御まで、多様な記述スタイルをサポートすることで、科学技術計算分野における大規模並列アプリケーションの開発効率向上に貢献しています。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。