void communicate_1(int me){ xmp_sync_all(&status); if(me == 2){ int tmp[100]; tmp[3:5] = a[2:5]:[1]; // get memcpy(&a[3], &tmp[3], sizeof(int)*5); }
int main(){ for(int i=0;i<10;i++) a[i] = 0; xmp_sync_all(NULL); if(xmp_node_num() == 1) hoge(3, 2, -9); xmp_sync_all(NULL); if(xmp_node_num() == 2){ if(a[3] == -9){ printf("PASS\n"); } else{ fprintf(stderr, "ERROR\n"); exit(1); } } return 0; }
int main(){ double t; int i, me, target; unsigned int size; me = xmp_node_num(); target = 3 - me; init_buf(local_buf, me); init_buf(target_buf, me); if(me==1) print_items(); for(size=4;size<MAX_SIZE+1;size*=2){ // size must be more than 4 when using Fujitsu RDMA xmp_sync_all(NULL); for(i=0;i<LOOP+WARMUP;i++){ if(WARMUP == i) t = wtime(); if(me == 1){ local_buf[0:size] = target_buf[0:size]:[target]; xmp_sync_memory(NULL); #ifdef DEBUG if(local_buf[0] != '2' && local_buf[size-1] != '2') fprintf(stderr, "Error !\n"); local_buf[0] = '1'; local_buf[size-1] = '1'; #endif xmp_sync_all(NULL); } else{ xmp_sync_all(NULL); local_buf[0:size] = target_buf[0:size]:[target]; #ifdef DEBUG if(local_buf[0] != '1' && local_buf[size-1] != '1') fprintf(stderr, "Error !\n"); local_buf[0] = '2'; local_buf[size-1] = '2'; #endif } xmp_sync_all(NULL); }
void initialize_coarrays(int me) { for(int i=0;i<N;i++) a[i] = i + (me+1)*100; for(int i=0;i<N;i++) for(int j=0;j<N;j++) b[i][j] = i*N + j + (me+1)*100; for(int i=0;i<N;i++) for(int j=0;j<N;j++) for(int k=0;k<N;k++) c[i][j][k] = i*N*N + j*N + k + (me+1)*100; xmp_sync_all(NULL); }
void initialize_coarrays(int me) { for(int i=0;i<N;i++) a[i] = a_ans[i] = 0; for(int i=0;i<N;i++) for(int j=0;j<N;j++) b[i][j] = b_ans[i][j] = 0; for(int i=0;i<N;i++) for(int j=0;j<N;j++) for(int k=0;k<N;k++) c[i][j][k] = c_ans[i][j][k] = 0; for(int i=0;i<N;i++) d[i] = d_ans[i] = i + (me+1) * 100; for(int i=0;i<N;i++) d[i] = d_ans[i] = i + (me+1) * 100; xmp_sync_all(NULL); }
int a[SIZE][SIZE][SIZE][SIZE]:[*], b[SIZE][SIZE][SIZE][SIZE]:[*], ret = 0; int start[DIMS], len[DIMS], stride[DIMS]; int status; int main(){ for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) for(int k=0;k<SIZE;k++) for(int m=0;m<SIZE;m++) b[i][j][k][m] = xmp_node_num(); for(start[0]=0;start[0]<2;start[0]++){ for(len[0]=1;len[0]<=SIZE;len[0]++){ for(stride[0]=1;stride[0]<4;stride[0]++){ for(start[1]=0;start[1]<2;start[1]++){ for(len[1]=1;len[1]<=SIZE;len[1]++){ for(stride[1]=1;stride[1]<4;stride[1]++){ for(start[2]=0;start[2]<2;start[2]++){ for(len[2]=1;len[2]<=SIZE;len[2]++){ for(stride[2]=1;stride[2]<4;stride[2]++){ for(start[3]=0;start[3]<2;start[3]++){ for(len[3]=1;len[3]<=SIZE;len[3]++){ for(stride[3]=1;stride[3]<4;stride[3]++){ if(start[0]+(len[0]-1)*stride[0] < SIZE && start[1]+(len[1]-1)*stride[1] < SIZE && start[2]+(len[2]-1)*stride[2] < SIZE && start[3]+(len[3]-1)*stride[3] < SIZE){ for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) for(int k=0;k<SIZE;k++) for(int m=0;m<SIZE;m++) a[i][j][k][m] = -1; xmp_sync_all(&status); if(xmp_node_num() == 1){ a[start[0]:len[0]:stride[0]][start[1]:len[1]:stride[1]][start[2]:len[2]:stride[2]][start[3]:len[3]:stride[3]] = b[start[0]:len[0]:stride[0]][start[1]:len[1]:stride[1]][start[2]:len[2]:stride[2]][start[3]:len[3]:stride[3]]:[2]; for(int i=0;i<len[0];i++){ int position0 = start[0]+i*stride[0]; for(int j=0;j<len[1];j++){ int position1 = start[1]+j*stride[1]; for(int k=0;k<len[2];k++){ int position2 = start[2]+k*stride[2]; for(int m=0;m<len[3];m++){ int position3 = start[3]+m*stride[3]; if(a[position0][position1][position2][position3] != 2){ fprintf(stderr, "a[%d:%d:%d][%d:%d:%d][%d:%d:%d][%d:%d:%d] ", start[0], len[0], stride[0], start[1], len[1], stride[1], start[2], len[2], stride[2], start[3], len[3], stride[3]); ret = -1; goto end; } } } } } } } } } } } } } } } } } } } end: xmp_sync_all(&status); #pragma xmp bcast(ret) if(xmp_node_num() == 1) if(ret == 0) printf("PASS\n"); else fprintf(stderr, "ERROR\n"); return ret; }