change the implementation of ARMCI_Malloc_local to also support migration. (using...
[charm.git] / examples / armci / putTest / put.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include <armci.h>
6 #include <charm.h>
7
8 #define MAX_PROCESSORS 2
9 #define MAX_BUF_SIZE 1048576
10
11 int main(int argc, char * argv[]) {
12   void *baseAddress[MAX_PROCESSORS];
13   char *local;
14   int thisImage;
15
16   int iter = 100, size;
17   double startTime, endTime;
18   int i;
19
20   // initialize
21   ARMCI_Init();
22   ARMCI_Myid(&thisImage);
23
24   // allocate data (collective operation)
25   ARMCI_Malloc(baseAddress, MAX_BUF_SIZE*sizeof(char));
26   local = (char *)ARMCI_Malloc_local(MAX_BUF_SIZE*sizeof(char));
27
28   ARMCI_Barrier();
29   ARMCI_Migrate();
30
31   if (thisImage == 0) {
32     for(size = 1; size <= MAX_BUF_SIZE; size = size<<1){
33       startTime = CkWallTimer();
34       for(i = 0; i < iter; i++){
35         ARMCI_Put(local, baseAddress[1], size, 1);
36       }
37       ARMCI_Fence(1);
38       endTime = CkWallTimer();
39       printf("%d: %f us\n", size, (endTime-startTime)*1000);
40     }
41     ARMCI_Barrier();
42   } else if (thisImage == 1) {
43     ARMCI_Barrier();
44   }
45
46   
47   ARMCI_Free(baseAddress[thisImage]);
48   ARMCI_Free_local(local);
49   // finalize
50   ARMCI_Finalize();
51   return 0;
52 }