XcalableMP

XcalableMP (XMP)
パラダイム 並列計算メッセージパッシング命令形手続き型言語)、構造化プログラミング
設計者 PCクラスタコンソーシアム 並列プログラミング言語XcalableMP規格部会
最新リリース 1.4/ 2018年11月9日 (6年前) (2018-11-09)
型付け 弱い静的型付け
主な処理系 Omni Compiler
影響を受けた言語 High Performance FortranCo-array Fortran
プラットフォーム クロスプラットフォーム
ウェブサイト xcalablemp.org
テンプレートを表示

XcalableMPXMP は大規模な並列計算機上での高性能計算向けにC言語およびFortranを拡張して作られたプログラミング言語である[1]

XMPの実行モデルはSPMDであり、その実行主体はノードと呼称する。 XMPは並列化の手段として、グローバルビューローカルビューをユーザに提供している。 グローバルビューでは、テンプレートと呼ばれる仮想的なインデックス集合を用いて並列化を行う。 グローバルビューでは、OpenMPのように、プログラマは逐次コードに対して指示文を挿入することで、データのマッピング、ノード間のデータのread/write、ループ文の並列化などを行う。XMPの指示文のいくつかはHigh Performance Fortranの指示文を引き継いだものである。 ローカルビューでは、Co-array Fortranのように、ノード番号を指定してノード間のデータのread/writeを行う。なお、Fortran言語のXMPはCo-array Fortranの上位互換である。

例(グローバルビュー)

int a[20];
#pragma xmp template t[20]  /* 0から19までのテンプレートを定義 */
#pragma xmp nodes p[4]        /* ノード集合を定義 */
#pragma xmp distribute t[block] onto p  /* テンプレートをノード集合に分散させる */
#pragma xmp align a[i] with t[i]        /* 分散されたテンプレートと配列を関連付ける */

int main() {
#pragma xmp loop on t[i]   /* 分散されたテンプレートに従い、ループ文を各ノードで実行する */
for (int i = 0; i < 20; i++)
   a[i] = func(i);

  return 0;
}

例(ローカルビュー)

#include <xmp.h>
#pragma xmp nodes p[4]        /* ノード集合を定義 */
int a[20]:[*];  /* Coarrayの定義 */

int main() {
  int me = xmpc_node_num();   /* 自身のノード番号を取得 */
 
  if (me == 1)
    a[0:20]:[3] = a[0:20];  /* ノード番号1は、自身が持つ配列aを、ノード番号3が持つ配列aにPUTする */

  return 0;
}

関連項目

外部リンク

脚注

  1. ^ 公式サイト