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