Open mnakao opened 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の対応のように)。
下記コードでは、ノード1と2はgmove outでノード3と4にデータを送り、ノード3と4はデータを受け取った後、そのデータを使った処理をします。
グローバルビューでデータ通信を行えているのにも関わらず、ノード番号を指定したpost指示文でしか通信の完了を保証できないのは不便と感じます。
改善案としては、gmoveにpost節をつけ、wait_gmove指示文を新設し、post節とwait_gmove指示文とを対応させます。
wait_gmoveよりもwait_postの方が良いかも(asyncとwait_asyncの対応のように)。