예제 #1
0
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;

}
예제 #2
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");
  }
}
예제 #3
0
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;
}
예제 #4
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;
}
예제 #5
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;
}
예제 #6
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");
  }
}
예제 #7
0
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;
}
예제 #8
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;
}
예제 #11
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;
}