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;
}
Exemple #3
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;
}