XcalableMP
表示
パラダイム | 並列計算、メッセージパッシング、命令形(手続き型言語)、構造化プログラミング |
---|---|
設計者 | PCクラスタコンソーシアム 並列プログラミング言語XcalableMP規格部会 |
最新リリース | 1.4/ 2018年11月9日 |
型付け | 弱い静的型付け |
主な処理系 | Omni Compiler |
影響を受けた言語 | High Performance Fortran、Co-array Fortran |
プラットフォーム | クロスプラットフォーム |
ウェブサイト |
xcalablemp.org |
XcalableMP、XMP は大規模な並列計算機上での高性能計算向けに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;
}
関連項目
[編集]- High Performance Fortran
- Co-array Fortran
- Chapel
- X10 (プログラミング言語)
- 区分化大域アドレス空間
- 並列計算
- XcalableACC
- OpenACC
外部リンク
[編集]- 書籍、"XcalableMP PGAS Programming Language", Springer # オンライン版はフリー