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

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

例(グローバルビュー) int a; #pragma xmp template t /* 0から19までのテンプレートを定義 */ #pragma xmp nodes p /* ノード集合を定義 */ #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 /* ノード集合を定義 */ int a:[*]; /* Coarrayの定義 */

int main() { int me = xmpc_node_num(); /* 自身のノード番号を取得 */

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

return 0; }

関連項目

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

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