int main(void){ a = (float *)xmp_malloc(xmp_desc_of(a), 100); b = (float *)xmp_malloc(xmp_desc_of(b), 100); #pragma xmp array on t[:] a[0:99] = b[0:99]; return 0; }
void foo() { #pragma xmp template_fix [gblock(m)] t[NSIZE] int *a; #pragma xmp align a[i] with t[i] #pragma xmp shadow a[2] a = (int*)xmp_malloc(xmp_desc_of(a), NSIZE); #pragma xmp loop on t[i] for (int i = 0; i < N; i++) a[i] = i; #pragma xmp reflect (a) width (/periodic/1:1) async (100) #pragma xmp wait_async (100) #pragma xmp loop on t[i] for (int i = 0; i < N; i++){ if(a[i-1] != (i-1+N)%N){ printf("ERROR Lower in %d (%06d) (%06d)\n", (int)i, a[i-1], (int)(i-1+N)%N); exit(1); } if(a[i+1] != (i+1+N)%N){ printf("ERROR Upper in %d (%06d) (%06d)\n", (int)i, a[i+1], (int)(i+1+N)%N); exit(1); } } #pragma xmp task on p[0] { printf("PASS\n"); } }
int main(void) { N = 1000; #pragma xmp template_fix[cyclic(3)] t[N] a = (int *)xmp_malloc(xmp_desc_of(a), N); #pragma xmp loop on t[i] for(i=0;i<N;i++) a[i] = i; #pragma xmp loop on t[i] reduction(+:s) for(i=0;i<N;i++) s = s + a[i]; if(s != 499500) result = -1; #pragma xmp reduction(+:result) #pragma xmp task on p[0] { if(result == 0 ){ printf("PASS\n"); } else{ fprintf(stderr, "ERROR\n"); exit(1); } } return 0; }
int main() { array = (int *)xmp_malloc(xmp_desc_of(array), 10); loArray = (int *)malloc(sizeof(int)*10); #pragma xmp loop on t[i] for (int i = 0; i < 10; i++){ array[i] = i; } #pragma xmp gmove loArray[0:10] = array[0:10]; for (int i = 0; i < 10; i++){ if (loArray[i] != i){ printf("Error! : a[%d] = %d\n", i, loArray[i]); xmp_exit(1); } } #pragma xmp task on p[0] printf("PASS\n"); return 0; }
int main(){ int (*l_2d)[SIZE]; int (*l_3d)[SIZE][SIZE]; #pragma xmp align l_2d[i][j] with t[i][j] #pragma xmp align l_3d[i][j][*] with t[i][j] g_2d = (int (*)[SIZE])xmp_malloc(xmp_desc_of(g_2d), SIZE, SIZE); g_3d = (int (*)[SIZE][SIZE])xmp_malloc(xmp_desc_of(g_3d), SIZE, SIZE, SIZE); l_2d = (int (*)[SIZE])xmp_malloc(xmp_desc_of(l_2d), SIZE, SIZE); l_3d = (int (*)[SIZE][SIZE])xmp_malloc(xmp_desc_of(l_3d), SIZE, SIZE, SIZE); #pragma acc data copy(g_2d, g_3d, l_2d, l_3d) { #pragma xmp loop [i][j] on t[i][j] #pragma acc parallel loop collapse(2) for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++){ g_2d[i][j] = i * 100 + j + 1; g_3d[i][j][0] = i * 100 + j + 2; l_2d[i][j] = i * 100 + j + 3; l_3d[i][j][0] = i * 100 + j + 4; } } } int err = 0; #pragma xmp loop [i][j] on t[i][j] reduction(+:err) for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++){ if(g_2d[i][j] != i * 100 + j + 1) err++; if(g_3d[i][j][0] != i * 100 + j + 2) err++; if(l_2d[i][j] != i * 100 + j + 3) err++; if(l_3d[i][j][0] != i * 100 + j + 4) err++; } } #pragma xmp task on p[0][0] if(err != 0){ printf("# of errors is %d\n", err); return 1; }else{ printf("PASS\n"); } return 0; }
void foo() { #pragma xmp template_fix [block][gblock(m)] t[NSIZE][NSIZE] int (*a)[NSIZE]; #pragma xmp align a[i][j] with t[j][i] #pragma xmp shadow a[2][1] a = (int (*)[NSIZE])xmp_malloc(xmp_desc_of(a), NSIZE, NSIZE); #pragma xmp loop (i,j) on t[j][i] for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ a[i][j] = i * 1000 + j; } } #pragma xmp reflect (a) width (/periodic/1:1,/periodic/1:1) async (100) #pragma xmp wait_async (100) #pragma xmp loop (i,j) on t[j][i] for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ if (a[i-1][j] != (i - 1 + N) % N * 1000 + j){ printf("ERROR North in (%d, %d) (%06d) (%06d)\n", i, j, a[i-1][j], (i - 1 + N) % N * 1000 + j); exit(1); } if (a[i+1][j] != (i + 1 + N) % N * 1000 + j){ printf("ERROR South in (%d, %d) (%06d) (%06d)\n", i, j, a[i+1][j], (i + 1 + N) % N * 1000 + j); exit(1); } if (a[i][j-1] != i * 1000 + (j - 1 + N) % N){ printf("ERROR West in (%d, %d) (%06d) (%06d)\n", i, j, a[i][j-1], i * 1000 + (j - 1 + N) % N); exit(1); } if (a[i][j+1] != i * 1000 + (j + 1 + N) % N){ printf("ERROR East in (%d, %d) (%06d) (%06d)\n", i, j, a[i][j+1], i * 1000 + (j + 1 + N) % N); exit(1); } } } #pragma xmp task on p[0][0] { printf("PASS\n"); } }
int main(void) { procs = xmp_num_nodes(); m = (int *)malloc(sizeof(int) * procs); remain = N; for(i=0;i<procs-1;i++){ m[i] = remain/2; remain -= m[i]; } m[procs-1] = remain; #pragma xmp template_fix[gblock(m)] t[N] a = (int *)xmp_malloc(xmp_desc_of(a), N); #pragma xmp loop on t[i] for(i=0;i<N;i++) a[i] = i; #pragma xmp loop on t[i] reduction(+:s) for(i=0;i<N;i++) s += a[i]; if(s != 499500) result = -1; #pragma xmp reduction(+:result) #pragma xmp task on p[0] { if(result == 0){ printf("PASS\n"); } else{ fprintf(stderr, "ERROR\n"); exit(1); } } free (a); free (m); return 0; }
int main(void) { int const n = 16; #pragma xmp template t[n][n] #pragma xmp distribute t[block][block] onto p int a[n][n]; #pragma xmp align a[j][i] with t[j][i] #pragma xmp shadow a[1][1] int *laddr_a, lsize1_a, lsize2_a; xmp_array_laddr(xmp_desc_of(a), (void **)&laddr_a); xmp_array_lsize(xmp_desc_of(a), 1, &lsize1_a); //includes shadow xmp_array_lsize(xmp_desc_of(a), 2, &lsize2_a); //includes shadow for(int i = 0; i < lsize1_a; i++){ for(int j = 0; j < lsize2_a; j++){ laddr_a[i * lsize2_a + j] = -1; } } #pragma xmp loop on t[j][i] for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ a[i][j] = 1; } } #pragma xmp reflect(a) int err = 0; #pragma xmp task on p[0][0] { for(int i = 0; i < lsize1_a; i++){ for(int j = 0; j < lsize2_a; j++){ int v = laddr_a[i * lsize2_a + j]; if(i >= 1 && j >= 1){ if(v != 1) err++; }else{ if(v != -1) err++; } } } } #pragma xmp task on p[0][1] { for(int i = 0; i < lsize1_a; i++){ for(int j = 0; j < lsize2_a; j++){ int v = laddr_a[i * lsize2_a + j]; if(i >= 1 && j <= lsize2_a-2){ if(v != 1) err++; }else{ if(v != -1) err++; } } } } #pragma xmp task on p[1][0] { for(int i = 0; i < lsize1_a; i++){ for(int j = 0; j < lsize2_a; j++){ int v = laddr_a[i * lsize2_a + j]; if(i <= lsize1_a-2 && j >= 1){ if(v != 1) err++; }else{ if(v != -1) err++; } } } } #pragma xmp task on p[1][1] { for(int i = 0; i < lsize1_a; i++){ for(int j = 0; j < lsize2_a; j++){ int v = laddr_a[i * lsize2_a + j]; if(i <= lsize1_a-2 && j <= lsize2_a-2){ if(v != 1) err++; }else{ if(v != -1) err++; } } } } #pragma xmp reduction(+:err) if(err > 0) return 1; #pragma xmp task on p[0][0] printf("PASS\n"); return 0; }
int main() { int i,j; for(i=0;i<100;i++) if(i<50) vdash[i]=i*2; else vdash[i]=0; for(i=0;i<10;i++) for(j=0;j<10;j++) if(j%2==1) adash[i][j]=i*10+j-1; else adash[i][j]=0; #pragma xmp loop (i,j) on tp(i,j) for(i=0;i<10;i++) for(j=0;j<10;j++) { if(j%2==0) mask[i][j]=1; else mask[i][j]=0; } #pragma xmp loop (i,j) on tp(i,j) for(i=0;i<10;i++) for(j=0;j<10;j++) { a[i][j]=i*10+j; } #pragma xmp loop (i) on tq(i) for(i=0;i<100;i++) { v[i]=0; } xmp_pack(xmp_desc_of(v),xmp_desc_of(a),xmp_desc_of(mask)); #pragma xmp loop (i,j) on tp(i,j) for(i=0;i<10;i++) for(j=0;j<10;j++) { a[i][j]=0; if(j%2==0) mask[i][j]=0; else mask[i][j]=1; } xmp_unpack(xmp_desc_of(a),xmp_desc_of(v),xmp_desc_of(mask)); int result = 0; #pragma xmp loop (i) on tq(i) for(i=0;i<100;i++) if(v[i]!=vdash[i]) result =-1; #pragma xmp reduction(+:result) #pragma xmp task on p(1,1) { if (result == 0){ printf("PASS\n"); } else{ printf("ERROR\n"); exit(1); } } #pragma xmp loop (i,j) on tp(i,j) for(i=0;i<10;i++) for(j=0;j<10;j++) if(a[i][j]!=adash[i][j]) result =-1; #pragma xmp reduction(+:result) #pragma xmp task on p(1,1) { if (result == 0){ printf("PASS\n"); } else{ printf("ERROR\n"); exit(1); } } return 0; }
int main() { int i,result = 0; int adash[16],xdash[16],idxdash[16]; for(i=0;i<16;i++) adash[i]=i; idxdash[0]=0; idxdash[1]=2; idxdash[2]=1; idxdash[3]=5; idxdash[4]=4; idxdash[5]=3; idxdash[6]=9; idxdash[7]=8; idxdash[8]=7; idxdash[9]=6; idxdash[10]=15; idxdash[11]=14; idxdash[12]=13; idxdash[13]=12; idxdash[14]=11; idxdash[15]=10; for(i=0;i<16;i++) xdash[idxdash[i]]=adash[i]; #pragma xmp loop on t(i) for(i=0;i<16;i++) a[i]=i; #pragma xmp loop on t(i) for(i=0;i<16;i++) idx[i]=i; #pragma xmp task on p(1) { idx[0]=0; idx[1]=2; idx[2]=1; idx[3]=5; } #pragma xmp task on p(2) { idx[4]=4; idx[5]=3; idx[6]=9; idx[7]=8; } #pragma xmp task on p(3) { idx[8]=7; idx[9]=6; idx[10]=15; idx[11]=14; } #pragma xmp task on p(4) { idx[12]=13; idx[13]=12; idx[14]=11; idx[15]=10; } #pragma xmp loop on t(i) for(i=0;i<16;i++) x[i]=0; xmp_scatter(xmp_desc_of(x),xmp_desc_of(a),xmp_desc_of(idx)); #pragma xmp loop (i) on t(i) for(i=1;i<16;i++) if(x[i]!=xdash[i]) result =-1; #pragma xmp reduction(+:result) #pragma xmp task on p(1) { if (result == 0){ printf("PASS\n"); } else{ printf("ERROR\n"); exit(1); } } return 0; }
int main() { int irank, ierr, error=0; xmp_desc_t dt, dn, dt1, dn1, dn2; int ival,lb[3],ub[3],st[3],map[2]; ierr=xmp_align_template(xmp_desc_of(a), &dt); ierr=xmp_dist_nodes(dt, &dn); ierr=xmp_align_template(xmp_desc_of(a1), &dt1); ierr=xmp_dist_nodes(dt1, &dn1); irank=xmp_node_num(); ierr=xmp_template_fixed(xmp_desc_of(t2), &ival); check(ival, 0, &error); #pragma xmp template_fix[block] t2[0:6] if (irank==11){ ierr=xmp_nodes_ndims(dn, &ival); check(ival, 3, &error); ierr=xmp_nodes_index(dn, 1, &ival); check(ival, 1, &error); ierr=xmp_nodes_index(dn, 2, &ival); check(ival, 3, &error); ierr=xmp_nodes_index(dn, 3, &ival); check(ival, 2, &error); ierr=xmp_nodes_size(dn, 1, &ival); check(ival, 2, &error); ierr=xmp_nodes_size(dn, 2, &ival); check(ival, 3, &error); ierr=xmp_nodes_size(dn, 3, &ival); check(ival, 2, &error); ierr=xmp_nodes_equiv(dn1, &dn2, lb, ub, st); check(lb[0], 1, &error); check(ub[0], 2, &error); check(st[0], 1, &error); /*ierr=xmp_nodes_attr(dn, &ival); check(ival, 3, &error); ierr=xmp_nodes_attr(dn1, &ival); check(ival, 3, &error);*/ ierr=xmp_template_fixed(xmp_desc_of(t2), &ival); check(ival, 1, &error); ierr=xmp_template_ndims(dt, &ival); check(ival, 3, &error); ierr=xmp_template_lbound(dt, 1, &ival); check(ival, 0, &error); ierr=xmp_template_lbound(dt, 2, &ival); check(ival, 0, &error); ierr=xmp_template_lbound(dt, 3, &ival); check(ival, 0, &error); ierr=xmp_template_ubound(dt, 1, &ival); check(ival, 15, &error); ierr=xmp_template_ubound(dt, 2, &ival); check(ival, 5, &error); ierr=xmp_template_ubound(dt, 3, &ival); check(ival, 8, &error); ierr=xmp_dist_format(dt, 1, &ival); check(ival, 2101, &error); ierr=xmp_dist_format(dt, 2, &ival); check(ival, 2102, &error); ierr=xmp_dist_format(dt, 3, &ival); check(ival, 2102, &error); ierr=xmp_dist_blocksize(dt, 1, &ival); check(ival, 8, &error); ierr=xmp_dist_blocksize(dt, 2, &ival); check(ival, 1, &error); ierr=xmp_dist_blocksize(dt, 3, &ival); check(ival, 2, &error); ierr=xmp_dist_gblockmap(dt1, 1, map); check(map[0], 2, &error); check(map[1], 4, &error); ierr=xmp_dist_axis(dt, 1, &ival); check(ival, 1, &error); ierr=xmp_dist_axis(dt, 2, &ival); check(ival, 2, &error); ierr=xmp_dist_axis(dt, 3, &ival); check(ival, 3, &error); ierr=xmp_align_axis(xmp_desc_of(a), 1, &ival); check(ival, 2, &error); ierr=xmp_align_axis(xmp_desc_of(a), 2, &ival); check(ival, 3, &error); ierr=xmp_align_axis(xmp_desc_of(a), 3, &ival); check(ival, 1, &error); ierr=xmp_align_offset(xmp_desc_of(a), 1, &ival); check(ival, 0, &error); ierr=xmp_align_offset(xmp_desc_of(a), 2, &ival); check(ival, 0, &error); ierr=xmp_align_offset(xmp_desc_of(a), 3, &ival); check(ival, 0, &error); ierr=xmp_align_replicated(xmp_desc_of(b), 1, &ival); check(ival, 0, &error); ierr=xmp_align_replicated(xmp_desc_of(b), 2, &ival); check(ival, 1, &error); ierr=xmp_align_replicated(xmp_desc_of(b), 3, &ival); check(ival, 1, &error); ierr=xmp_array_ndims(xmp_desc_of(a), &ival); check(ival, 3, &error); ierr=xmp_array_lbound(xmp_desc_of(a), 1, &ival); check(ival, 0, &error); ierr=xmp_array_lbound(xmp_desc_of(a), 2, &ival); check(ival, 0, &error); ierr=xmp_array_lbound(xmp_desc_of(a), 3, &ival); check(ival, 0, &error); ierr=xmp_array_ubound(xmp_desc_of(a), 1, &ival); check(ival, 5, &error); ierr=xmp_array_ubound(xmp_desc_of(a), 2, &ival); check(ival, 8, &error); ierr=xmp_array_ubound(xmp_desc_of(a), 3, &ival); check(ival, 15, &error); ierr=xmp_array_lshadow(xmp_desc_of(a), 1, &ival); check(ival, 0, &error); ierr=xmp_array_lshadow(xmp_desc_of(a), 2, &ival); check(ival, 0, &error); ierr=xmp_array_lshadow(xmp_desc_of(a), 3, &ival); check(ival, 1, &error); ierr=xmp_array_ushadow(xmp_desc_of(a), 1, &ival); check(ival, 0, &error); ierr=xmp_array_ushadow(xmp_desc_of(a), 2, &ival); check(ival, 0, &error); ierr=xmp_array_ushadow(xmp_desc_of(a), 3, &ival); check(ival, 2, &error); ierr=xmp_array_gtol(xmp_desc_of(a), 1, gidx[0], &lidx[0]); ierr=xmp_array_gtol(xmp_desc_of(a), 2, gidx[1], &lidx[1]); ierr=xmp_array_gtol(xmp_desc_of(a), 3, gidx[2], &lidx[2]); check(lidx[0], 1, &error); check(lidx[1], 1, &error); check(lidx[2], 4, &error); if(error == 0){ printf("PASS\n"); } else{ fprintf(stderr, "ERROR count=%d\n",error); exit(1); } } return 0; }