Changeset 1520 for XIOS/dev/branch_openmp/extern/src_ep_dev/ep_create.cpp
- Timestamp:
- 06/04/18 19:25:08 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_create.cpp
r1356 r1520 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) … … 194 41 195 42 out_comm_hdls = new MPI_Comm[num_ep]; 43 #ifdef _showinfo 44 printf("new out_comm_hdls = %p\n", out_comm_hdls); 45 #endif 196 46 47 ::MPI_Comm *parent_comm = new ::MPI_Comm; 48 ::MPI_Comm_dup(to_mpi_comm(base_comm_ptr), parent_comm); 49 50 #ifdef _showinfo 51 printf("new out_comm_hdls->mpi_comm = %p\n", parent_comm); 52 #endif 53 197 54 for (int idx = 0; idx < num_ep; ++idx) 198 55 { 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; 56 57 out_comm_hdls[idx] = new ep_comm; 58 #ifdef _showinfo 59 printf("new out_comm_hdls[%d] = %p\n", idx, out_comm_hdls[idx]); 60 #endif 61 62 out_comm_hdls[idx]->is_ep = true; 63 out_comm_hdls[idx]->is_intercomm = false; 64 65 out_comm_hdls[idx]->ep_comm_ptr = new ep_communicator; 66 #ifdef _showinfo 67 printf("new out_comm_hdls[%d]->ep_comm_ptr = %p\n", idx, out_comm_hdls[idx]->ep_comm_ptr); 68 #endif 69 70 71 out_comm_hdls[idx]->mpi_comm = parent_comm; 72 out_comm_hdls[idx]->ep_comm_ptr->comm_list = out_comm_hdls; 73 out_comm_hdls[idx]->ep_comm_ptr->comm_label = 0; 205 74 } 206 75 … … 213 82 int ep_size = std::accumulate(recv_num_ep.begin(), recv_num_ep.end(), 0); 214 83 215 out_comm_hdls[0].ep_barrier = new OMPbarrier(num_ep); 216 out_comm_hdls[0].my_buffer = new BUFFER; 84 out_comm_hdls[0]->ep_barrier = new ep_barrier(num_ep); 85 #ifdef _showinfo 86 printf("new out_comm_hdls[0]->ep_barrier = %p\n", out_comm_hdls[0]->ep_barrier); 87 #endif 217 88 218 out_comm_hdls[0].rank_map = new RANK_MAP; 219 out_comm_hdls[0].rank_map->resize(ep_size); 89 out_comm_hdls[0]->my_buffer = new BUFFER; 90 #ifdef _showinfo 91 printf("new out_comm_hdls[0]->my_buffer = %p\n", out_comm_hdls[0]->my_buffer); 92 #endif 220 93 94 out_comm_hdls[0]->ep_rank_map = new EP_RANK_MAP; 95 #ifdef _showinfo 96 printf("new out_comm_hdls[0]->ep_rank_map = %p\n", out_comm_hdls[0]->ep_rank_map); 97 #endif 221 98 222 99 for (int i = 1; i < num_ep; i++) 223 100 { 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;101 out_comm_hdls[i]->ep_barrier = out_comm_hdls[0]->ep_barrier; 102 out_comm_hdls[i]->my_buffer = out_comm_hdls[0]->my_buffer; 103 out_comm_hdls[i]->ep_rank_map= out_comm_hdls[0]->ep_rank_map; 227 104 } 228 105 … … 230 107 for (int i = 0; i < num_ep; i++) 231 108 { 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);109 out_comm_hdls[i]->ep_comm_ptr->size_rank_info[0] = std::make_pair(sum+i, ep_size); 110 out_comm_hdls[i]->ep_comm_ptr->size_rank_info[1] = std::make_pair(i, num_ep); 111 out_comm_hdls[i]->ep_comm_ptr->size_rank_info[2] = std::make_pair(base_rank, base_size); 235 112 236 out_comm_hdls[i].ep_comm_ptr->message_queue = new Message_list; 113 out_comm_hdls[i]->ep_comm_ptr->message_queue = new Message_list; 114 #ifdef _showinfo 115 printf("new out_comm_hdls[%d]->ep_comm_ptr->message_queue = %p\n", i, out_comm_hdls[i]->ep_comm_ptr->message_queue); 116 #endif 117 237 118 } 238 119 … … 244 125 for(int j=0; j<recv_num_ep[i]; j++) 245 126 { 246 out_comm_hdls[0] .rank_map->at(ind) = make_pair(j, i);127 out_comm_hdls[0]->ep_rank_map->insert(std::pair< int, std::pair<int,int> >(ind, j, i)); 247 128 ind++; 248 129 } … … 253 134 } //MPI_Comm_create_endpoints 254 135 136 255 137 256 138 } //namespace ep_lib
Note: See TracChangeset
for help on using the changeset viewer.