Changeset 1500 for XIOS/dev/branch_openmp/extern/ep_dev/ep_create.cpp
- Timestamp:
- 05/28/18 09:54:32 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/ep_dev/ep_create.cpp
r1499 r1500 25 25 \param [out] out_comm_hdls Handles of EP communicators. 26 26 */ 27 // #ifdef _intelmpi28 // int MPI_Comm_create_endpoints(int base_comm_ptr, int num_ep, MPI_Info info, MPI_Comm *& out_comm_hdls)29 // {30 // int base_rank;31 // int base_size;32 33 // ::MPI_Comm mpi_base_comm = static_cast< ::MPI_Comm> (base_comm_ptr);34 35 // ::MPI_Comm_size(mpi_base_comm, &base_size); // ep_lib::mpi_comm_size36 // ::MPI_Comm_rank(mpi_base_comm, &base_rank); // ep_lib::mpi_comm_rank37 // // parent_comm can also be endpoints communicators38 39 // std::vector<int> recv_num_ep(base_size);40 41 // out_comm_hdls = new MPI_Comm[num_ep];42 43 // for (int idx = 0; idx < num_ep; ++idx)44 // {45 // out_comm_hdls[idx].is_ep = true;46 // out_comm_hdls[idx].is_intercomm = false;47 // out_comm_hdls[idx].ep_comm_ptr = new ep_communicator;48 // out_comm_hdls[idx].mpi_comm = base_comm_ptr;49 // out_comm_hdls[idx].ep_comm_ptr->comm_list = out_comm_hdls;50 // out_comm_hdls[idx].ep_comm_ptr->comm_label = 0;51 // }52 53 // ::MPI_Allgather(&num_ep, 1, static_cast< ::MPI_Datatype>(MPI_INT), &recv_num_ep[0], 1, static_cast< ::MPI_Datatype>(MPI_INT), mpi_base_comm);54 55 56 // int sum = 0; // representing total ep number of process with smaller rank57 // for (int i = 0; i < base_rank; ++i) {sum += recv_num_ep[i]; }58 59 // int ep_size = std::accumulate(recv_num_ep.begin(), recv_num_ep.end(), 0);60 61 // out_comm_hdls[0].ep_barrier = new OMPbarrier(num_ep);62 63 // out_comm_hdls[0].my_buffer = new BUFFER;64 65 // out_comm_hdls[0].rank_map = new RANK_MAP;66 // out_comm_hdls[0].rank_map->resize(ep_size);67 68 69 // for (int i = 1; i < num_ep; i++)70 // {71 // out_comm_hdls[i].ep_barrier = out_comm_hdls[0].ep_barrier;72 // out_comm_hdls[i].my_buffer = out_comm_hdls[0].my_buffer;73 // out_comm_hdls[i].rank_map = out_comm_hdls[0].rank_map;74 // }75 76 77 // for (int i = 0; i < num_ep; i++)78 // {79 // out_comm_hdls[i].ep_comm_ptr->size_rank_info[0] = std::make_pair(sum+i, ep_size);80 // out_comm_hdls[i].ep_comm_ptr->size_rank_info[1] = std::make_pair(i, num_ep);81 // out_comm_hdls[i].ep_comm_ptr->size_rank_info[2] = std::make_pair(base_rank, base_size);82 83 // out_comm_hdls[i].ep_comm_ptr->message_queue = new Message_list;84 // }85 86 87 // int ind = 0;88 89 // for(int i=0; i<base_size; i++)90 // {91 // for(int j=0; j<recv_num_ep[i]; j++)92 // {93 // out_comm_hdls[0].rank_map->at(ind) = make_pair(j, i);94 // ind++;95 // }96 // }97 98 99 100 // return 0;101 102 // } //MPI_Comm_create_endpoints103 104 // #elif _openmpi105 // int MPI_Comm_create_endpoints(void* base_comm_ptr, int num_ep, MPI_Info info, MPI_Comm *& out_comm_hdls)106 // {107 108 // int base_rank;109 // int base_size;110 111 // ::MPI_Comm mpi_base_comm = static_cast< ::MPI_Comm> (base_comm_ptr);112 113 // ::MPI_Comm_size(mpi_base_comm, &base_size); // ep_lib::mpi_comm_size114 // ::MPI_Comm_rank(mpi_base_comm, &base_rank); // ep_lib::mpi_comm_rank115 // // parent_comm can also be endpoints communicators ?116 // std::vector<int> recv_num_ep(base_size);117 118 // out_comm_hdls = new MPI_Comm[num_ep];119 120 // for (int idx = 0; idx < num_ep; ++idx)121 // {122 // out_comm_hdls[idx].is_ep = true;123 // out_comm_hdls[idx].is_intercomm = false;124 // out_comm_hdls[idx].ep_comm_ptr = new ep_communicator;125 // out_comm_hdls[idx].mpi_comm = base_comm_ptr;126 // out_comm_hdls[idx].ep_comm_ptr->comm_list = out_comm_hdls;127 // out_comm_hdls[idx].ep_comm_ptr->comm_label = 0;128 // }129 130 // ::MPI_Allgather(&num_ep, 1, static_cast< ::MPI_Datatype> (MPI_INT),131 // &recv_num_ep[0], 1, static_cast< ::MPI_Datatype> (MPI_INT), mpi_base_comm);132 133 // int sum = 0; // representing total ep number of process with smaller rank134 // for (int i = 0; i < base_rank; ++i) {sum += recv_num_ep[i]; }135 136 // int ep_size = std::accumulate(recv_num_ep.begin(), recv_num_ep.end(), 0);137 138 // out_comm_hdls[0].ep_barrier = new OMPbarrier(num_ep);139 // out_comm_hdls[0].my_buffer = new BUFFER;140 141 // out_comm_hdls[0].rank_map = new RANK_MAP;142 // out_comm_hdls[0].rank_map->resize(ep_size);143 144 145 // for (int i = 1; i < num_ep; i++)146 // {147 // out_comm_hdls[i].ep_barrier = out_comm_hdls[0].ep_barrier;148 // out_comm_hdls[i].my_buffer = out_comm_hdls[0].my_buffer;149 // out_comm_hdls[i].rank_map = out_comm_hdls[0].rank_map;150 // }151 152 153 // for (int i = 0; i < num_ep; i++)154 // {155 // out_comm_hdls[i].ep_comm_ptr->size_rank_info[0] = std::make_pair(sum+i, ep_size);156 // out_comm_hdls[i].ep_comm_ptr->size_rank_info[1] = std::make_pair(i, num_ep);157 // out_comm_hdls[i].ep_comm_ptr->size_rank_info[2] = std::make_pair(base_rank, base_size);158 159 // out_comm_hdls[i].ep_comm_ptr->message_queue = new Message_list;160 // }161 162 163 // int ind = 0;164 165 // for(int i=0; i<base_size; i++)166 // {167 // for(int j=0; j<recv_num_ep[i]; j++)168 // {169 // out_comm_hdls[0].rank_map->at(ind) = make_pair(j, i);170 // ind++;171 // }172 // }173 174 // return 0;175 176 // } //MPI_Comm_create_endpoints177 178 // #endif179 180 27 181 28 int MPI_Comm_create_endpoints(void* base_comm_ptr, int num_ep, MPI_Info info, MPI_Comm *& out_comm_hdls) … … 197 44 for (int idx = 0; idx < num_ep; ++idx) 198 45 { 199 out_comm_hdls[idx].is_ep = true; 200 out_comm_hdls[idx].is_intercomm = false; 201 out_comm_hdls[idx].ep_comm_ptr = new ep_communicator; 202 *(static_cast< ::MPI_Comm*>(out_comm_hdls[idx].mpi_comm)) = *(static_cast< ::MPI_Comm*>(base_comm_ptr)); 203 out_comm_hdls[idx].ep_comm_ptr->comm_list = out_comm_hdls; 204 out_comm_hdls[idx].ep_comm_ptr->comm_label = 0; 46 out_comm_hdls[idx] = new ep_comm; 47 out_comm_hdls[idx]->is_ep = true; 48 out_comm_hdls[idx]->is_intercomm = false; 49 out_comm_hdls[idx]->ep_comm_ptr = new ep_communicator; 50 *(static_cast< ::MPI_Comm*>(out_comm_hdls[idx]->mpi_comm)) = *(static_cast< ::MPI_Comm*>(base_comm_ptr)); 51 out_comm_hdls[idx]->ep_comm_ptr->comm_list = out_comm_hdls; 52 out_comm_hdls[idx]->ep_comm_ptr->comm_label = 0; 205 53 } 206 54 … … 213 61 int ep_size = std::accumulate(recv_num_ep.begin(), recv_num_ep.end(), 0); 214 62 215 out_comm_hdls[0] .ep_barrier = new OMPbarrier(num_ep);216 out_comm_hdls[0] .my_buffer = new BUFFER;63 out_comm_hdls[0]->ep_barrier = new ep_barrier(num_ep); 64 out_comm_hdls[0]->my_buffer = new BUFFER; 217 65 218 out_comm_hdls[0] .rank_map = new RANK_MAP;219 out_comm_hdls[0] .rank_map->resize(ep_size);66 out_comm_hdls[0]->rank_map = new RANK_MAP; 67 out_comm_hdls[0]->rank_map->resize(ep_size); 220 68 221 69 222 70 for (int i = 1; i < num_ep; i++) 223 71 { 224 out_comm_hdls[i] .ep_barrier = out_comm_hdls[0].ep_barrier;225 out_comm_hdls[i] .my_buffer = out_comm_hdls[0].my_buffer;226 out_comm_hdls[i] .rank_map = out_comm_hdls[0].rank_map;72 out_comm_hdls[i]->ep_barrier = out_comm_hdls[0]->ep_barrier; 73 out_comm_hdls[i]->my_buffer = out_comm_hdls[0]->my_buffer; 74 out_comm_hdls[i]->rank_map = out_comm_hdls[0]->rank_map; 227 75 } 228 76 … … 230 78 for (int i = 0; i < num_ep; i++) 231 79 { 232 out_comm_hdls[i] .ep_comm_ptr->size_rank_info[0] = std::make_pair(sum+i, ep_size);233 out_comm_hdls[i] .ep_comm_ptr->size_rank_info[1] = std::make_pair(i, num_ep);234 out_comm_hdls[i] .ep_comm_ptr->size_rank_info[2] = std::make_pair(base_rank, base_size);80 out_comm_hdls[i]->ep_comm_ptr->size_rank_info[0] = std::make_pair(sum+i, ep_size); 81 out_comm_hdls[i]->ep_comm_ptr->size_rank_info[1] = std::make_pair(i, num_ep); 82 out_comm_hdls[i]->ep_comm_ptr->size_rank_info[2] = std::make_pair(base_rank, base_size); 235 83 236 out_comm_hdls[i] .ep_comm_ptr->message_queue = new Message_list;84 out_comm_hdls[i]->ep_comm_ptr->message_queue = new Message_list; 237 85 } 238 86 … … 244 92 for(int j=0; j<recv_num_ep[i]; j++) 245 93 { 246 out_comm_hdls[0] .rank_map->at(ind) = make_pair(j, i);94 out_comm_hdls[0]->rank_map->at(ind) = make_pair(j, i); 247 95 ind++; 248 96 }
Note: See TracChangeset
for help on using the changeset viewer.