Fixing memory leak in a debugging routine.
[charm.git] / src / ck-com / MPIStrategy.C
1 // #ifdef filippo
2
3 // #include "MPIStrategy.h"
4
5 // #if CHARM_MPI
6 // MPI_Comm groupComm;
7 // MPI_Group group, groupWorld;
8 // #endif
9
10 // MPIStrategy::MPIStrategy() {
11 //     messageBuf = NULL;
12 //     messageCount = 0;
13 //     npes = CkNumPes();
14 //     pelist = NULL;
15 // }
16
17 // MPIStrategy::MPIStrategy(int npes, int *pelist) {
18 //     messageBuf = NULL;
19 //     messageCount = 0;
20
21 //     this->npes = npes;
22 //     this->pelist = pelist;
23 // }
24
25 // void MPIStrategy::insertMessage(CharmMessageHolder *cmsg){
26 //     cmsg->next = messageBuf;
27 //     messageBuf = cmsg;    
28 // }
29
30 // void MPIStrategy::doneInserting(){
31 // #if CHARM_MPI
32 //     ComlibPrintf("[%d] In MPI strategy\n", CkMyPe());
33     
34 //     CharmMessageHolder *cmsg = messageBuf;
35 //     char *buf_ptr = mpi_sndbuf;
36     
37 //     //if(npes == 0)
38 //     //  npes = CkNumPes();
39     
40 //     for(count = 0; count < npes; count ++) {
41 //         ((int *)buf_ptr)[0] = 0;
42 //         buf_ptr += MPI_MAX_MSG_SIZE;
43 //     }
44     
45 //     buf_ptr = mpi_sndbuf;
46 //     for(count = 0; count < messageCount; count ++) {
47 //         if(npes < CkNumPes()) {
48 //             ComlibPrintf("[%d] Copying data to %d and rank %d\n", 
49 //                          cmsg->dest_proc, procMap[cmsg->dest_proc]);
50 //             buf_ptr = mpi_sndbuf + MPI_MAX_MSG_SIZE * procMap[cmsg->dest_proc];  
51 //         }
52 //         else
53 //             buf_ptr = mpi_sndbuf + MPI_MAX_MSG_SIZE * cmsg->dest_proc; 
54         
55 //         char * msg = cmsg->getCharmMessage();
56 //         envelope * env = UsrToEnv(msg);
57         
58 //         ((int *)buf_ptr)[0] = env->getTotalsize();
59         
60 //         ComlibPrintf("[%d] Copying message\n", CkMyPe());
61 //         memcpy(buf_ptr + sizeof(int), (char *)env, env->getTotalsize());
62         
63 //         ComlibPrintf("[%d] Deleting message\n", CkMyPe());
64 //         CmiFree((char *) env);
65 //         CharmMessageHolder *prev = cmsg;
66 //         cmsg = cmsg->next;
67 //         delete prev;
68 //     }
69     
70 //     //ComlibPrintf("[%d] Calling Barrier\n", CkMyPe());
71 //     //PMPI_Barrier(groupComm);
72     
73 //     ComlibPrintf("[%d] Calling All to all\n", CkMyPe());
74 //     MPI_Alltoall(mpi_sndbuf, MPI_MAX_MSG_SIZE, MPI_CHAR, mpi_recvbuf, 
75 //                   MPI_MAX_MSG_SIZE, MPI_CHAR, groupComm);
76     
77 //     ComlibPrintf("[%d] All to all finished\n", CkMyPe());
78 //     buf_ptr = mpi_recvbuf;
79 //     for(count = 0; count < npes; count ++) {
80 //         int recv_msg_size = ((int *)buf_ptr)[0];
81 //         char * recv_msg = buf_ptr + sizeof(int);
82         
83 //         if((recv_msg_size > 0) && recv_msg_size < MPI_MAX_MSG_SIZE) {
84 //             ComlibPrintf("[%d] Receiving message of size %d\n", CkMyPe(), 
85 //                          recv_msg_size);
86 //             CmiSyncSend(CkMyPe(), recv_msg_size, recv_msg);
87 //         }
88 //         buf_ptr += MPI_MAX_MSG_SIZE;
89 //     }
90 // #endif
91 // }
92
93 // void MPIStrategy::pup(PUP::er &p) {
94 //     CharmStrategy::pup(p);
95
96 //     p | messageCount;
97 //     p | npes; 
98        
99 //     if(p.isUnpacking())
100 //         pelist = new int[npes];
101 //     p(pelist , npes);
102
103 //     messageBuf = NULL;
104     
105 //     if(p.isUnpacking()){
106 // #if CHARM_MPI
107 //         if(npes < CkNumPes()){
108 //             MPI_Comm_group(MPI_COMM_WORLD, &groupWorld);
109 //             MPI_Group_incl(groupWorld, npes, pelist, &group);
110 //             MPI_Comm_create(MPI_COMM_WORLD, group, &groupComm);
111 //         }
112 //         else groupComm = MPI_COMM_WORLD;
113 // #endif
114 //     }
115 // }
116
117 // //PUPable_def(MPIStrategy);
118
119 // #endif