XcalableMP / Specification

Specification of XcalableMP
0 stars 0 forks source link

gmove in/outに対するpost節およびwait_gmove指示文の追加 #46

Open mnakao opened 8 years ago

mnakao commented 8 years ago

下記コードでは、ノード1と2はgmove outでノード3と4にデータを送り、ノード3と4はデータを受け取った後、そのデータを使った処理をします。

#pragma xmp nodes p(4)
#pragma xmp template t(0:3)
#pragma xmp distribute t(block) onto p
int A[4], tag = 0;
#pragma xmp align A[i] with t(i)
...
if(xmp_node_num() == 1 || xmp_node_num() == 2){
#pragma xmp gmove out
  A[2:2] = A[0:2];
  int target = (xmp_node_num() == 1)? 3 : 4;
#pragma xmp post(p(target), tag)
}
else{
  int target = (xmp_node_num() == 3)? 1 : 2;
#pragma xmp wait(p(target), tag)
  func(A);
}

グローバルビューでデータ通信を行えているのにも関わらず、ノード番号を指定したpost指示文でしか通信の完了を保証できないのは不便と感じます。

改善案としては、gmoveにpost節をつけ、wait_gmove指示文を新設し、post節とwait_gmove指示文とを対応させます。

if(xmp_node_num() == 1 || xmp_node_num() == 2){
#pragma xmp gmove out post(tag)
  A[2:2] = A[0:2];
}
else{
#pragma xmp wait_gmove(tag)
  func(A);
}

wait_gmoveよりもwait_postの方が良いかも(asyncとwait_asyncの対応のように)。