XcalableMP

、XMP は大規模な並列計算機上での高性能計算向けにC言語およびFortranを拡張して作られたプログラミング言語である公式サイト。

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

例（グローバルビュー）
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;
}

関連項目

 (プログラミング言語)
区分化大域アドレス空間
並列計算
XcalableACC
OpenACC

 外部リンク 
 書籍、"XcalableMP PGAS Programming Language", Springer # オンライン版はフリー
 脚注 

Category:プログラミング言語
Category:並列コンピューティング
Category:並行計算