20. coarray記法

Coarrayの概要は チュートリアル(Local-view) で説明しました. 本ページでは,まだ説明していなった同期文の詳細について説明します.

20.1. 同期文の種類

20.1.1. sync all

  • XMP/Cプログラム
void xmp_sync_all(int *status)
  • XMP/Fortranプログラム
sync all

これまでに発行したすべての片側通信の完了後に全イメージでバリア同期を行います. 詳細は チュートリアル(Local-view) を参照してください.

20.1.2. sync images

  • XMP/Cプログラム
void xmp_sync_images(int num, int *image-set, int *status)
  • XMP/Fortranプログラム
sync images (image-set)

これまでに発行したすべての片側通信の完了後に指定したイメージ間でバリア同期を行います.

  • XMP/Cプログラム
int image_set[3] = {0,1,2};
xmp_sync_images(3, image_set, NULL);
  • XMP/Fortranプログラム
integer :: image_set(3) = (/ 1, 2, 3/)
sync images (image_set)

20.1.3. sync memory

void xmp_sync_memory(int *status)
  • XMP/Fortranプログラム
sync memory

これまでに発行したすべての片側通信の完了を待ちます. この文は,sync allやsync imagesと異なりバリア同期を含まないため,ローカルのみで実行されます.

20.2. 引数について

  • XMP/Cプログラム
void xmp_sync_all(int *status)
void xmp_sync_images(int *status)
void xmp_sync_memory(int *status)
  • XMP/Fortranプログラム
sync all [stat=..] [errmsg=..]
sync images (image-set) [stat=..] [errmsg=..]
sync memory [stat=..] [errmsg=..]

XMP/Cにおいて,同期が成功した場合は,statusにはxmp.hで定義された定数である「XMP_STAT_SUCCESS」が代入されます. いずれかのイメージがすでに終了していた場合は,「XMP_STAT_STOPPED_IMAGE」が代入されます. それ以外のエラーの場合は,上記2つ以外の値が代入されます.

同様に,XMP/Fortranにおいて,同期が成功した場合は,stat=の右辺の変数に「STAT_STOPPED_IMAGE」が代入され, いずれかのイメージがすでに終了していた場合は,「STAT_STOPPED_IMAGE」が代入されます. それ以外のエラーの場合は,上記2つ以外の値が代入されます.

ヒント

XMP/Fortranにおいて,stat=やerrmsg=を省略した方が同期の速度は早いでしょう. XMP/Cにおいても,xmp_sync_all(NULL); のようにNULLを用いることにより,statusの代入を省略することができます.