1 /*
2  * Test Program for GA
3  * This is to test GA_Put (is a collective operation)
4  * GA_Create -- used to create a global array using handles like 'g_A'
5  */
6 
7 #include<stdio.h>
8 #include<stdlib.h>
9 
10 #include"mpi.h"
11 #include"ga.h"
12 #include"macdecls.h"
13 #include"ga_unit.h"
14 
15 #define DIM 2
16 #define SIZE 5
17 
main(int argc,char ** argv)18 int main(int argc, char **argv)
19 {
20   int rank, nprocs, i, j;
21   int g_A, **local_A=NULL, **local_B=NULL;
22   int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={SIZE-SIZE,SIZE-SIZE}, hi[DIM]={SIZE-1,SIZE-1}, ld=5, value=5;
23 
24   MPI_Init(&argc, &argv);
25 
26   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
27   MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
28 
29   MA_init(C_INT, 1000, 1000);
30 
31   GA_Initialize();
32 
33 
34   local_A=(int**)malloc(SIZE*sizeof(int*));
35   for(i=0; i<SIZE; i++)
36     {
37       local_A[i]=(int*)malloc(SIZE*sizeof(int));
38       for(j=0; j<SIZE; j++) local_A[i][j]=rand()%10;
39     }
40 
41   local_B=(int**)malloc(SIZE*sizeof(int*));
42   for(i=0; i<SIZE; i++)
43     {
44       local_B[i]=(int*)malloc(SIZE*sizeof(int));
45       for(j=0; j<SIZE; j++) local_B[i][j]=rand()%10;
46     }
47 
48   g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL);
49   //GA_Fill(g_A, &value);
50   //  GA_Zero(g_A);
51   GA_Print(g_A);
52 
53   NGA_Put(g_A, lo, hi, local_A, &ld);
54 
55   NGA_Get(g_A, lo, hi, local_B, &ld);
56 
57   GA_Sync();
58   GA_Print(g_A);
59 
60   if(rank==0)
61     {
62       printf(" local_B \n");
63       for(i=0; i<SIZE; i++)
64 	{
65 	  for(j=0; j<SIZE; j++)
66 	    printf("%d ", local_B[i][j]);
67 	  printf("\n");
68 	}
69 
70       printf("\n");
71       printf(" local_A \n");
72       for(i=0; i<SIZE; i++)
73 	{
74 	  for(j=0; j<SIZE; j++)
75 	    printf("%d ", local_A[i][j]);
76 	  printf("\n");
77 	}
78 
79       printf("\n");
80       for(i=0; i<SIZE; i++)
81 	{
82 	  for(j=0; j<SIZE; j++)
83 	    {
84 	      if(local_B[i][j]!=local_A[i][j])
85 		printf("ERROR : in passing values \n");
86 	      /* there is erroe in the above piece of code
87 	       * have to find method to solve it
88 	       */
89 	    }
90 	}
91     }
92   //  GA_Print(g_A);
93   GA_Sync();
94   //GA_Destroy(g_A);
95   if(rank == 0)
96     GA_PRINT_MSG();
97 
98   GA_Terminate();
99   MPI_Finalize();
100 }
101