Changeset 1500 for XIOS/dev/branch_openmp/extern/ep_dev/ep_reduce.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_reduce.cpp
r1499 r1500 66 66 ::MPI_Type_get_extent(to_mpi_type(datatype), &lb, &datasize); 67 67 68 int ep_rank = comm .ep_comm_ptr->size_rank_info[0].first;69 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;70 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;68 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 69 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 70 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 71 71 72 72 #pragma omp critical (_reduce) 73 comm .my_buffer->void_buffer[ep_rank_loc] = const_cast< void* >(sendbuf);73 comm->my_buffer->void_buffer[ep_rank_loc] = const_cast< void* >(sendbuf); 74 74 75 75 MPI_Barrier_local(comm); … … 78 78 { 79 79 80 memcpy(recvbuf, comm .my_buffer->void_buffer[0], datasize * count);80 memcpy(recvbuf, comm->my_buffer->void_buffer[0], datasize * count); 81 81 82 82 if(op == MPI_MAX) … … 86 86 assert(datasize == sizeof(int)); 87 87 for(int i=1; i<num_ep; i++) 88 reduce_max<int>(static_cast<int*>(comm .my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);88 reduce_max<int>(static_cast<int*>(comm->my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count); 89 89 } 90 90 … … 93 93 assert(datasize == sizeof(float)); 94 94 for(int i=1; i<num_ep; i++) 95 reduce_max<float>(static_cast<float*>(comm .my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count);95 reduce_max<float>(static_cast<float*>(comm->my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count); 96 96 } 97 97 … … 100 100 assert(datasize == sizeof(double)); 101 101 for(int i=1; i<num_ep; i++) 102 reduce_max<double>(static_cast<double*>(comm .my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count);102 reduce_max<double>(static_cast<double*>(comm->my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count); 103 103 } 104 104 … … 107 107 assert(datasize == sizeof(char)); 108 108 for(int i=1; i<num_ep; i++) 109 reduce_max<char>(static_cast<char*>(comm .my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count);109 reduce_max<char>(static_cast<char*>(comm->my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count); 110 110 } 111 111 … … 114 114 assert(datasize == sizeof(long)); 115 115 for(int i=1; i<num_ep; i++) 116 reduce_max<long>(static_cast<long*>(comm .my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count);116 reduce_max<long>(static_cast<long*>(comm->my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count); 117 117 } 118 118 … … 121 121 assert(datasize == sizeof(unsigned long)); 122 122 for(int i=1; i<num_ep; i++) 123 reduce_max<unsigned long>(static_cast<unsigned long*>(comm .my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count);123 reduce_max<unsigned long>(static_cast<unsigned long*>(comm->my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count); 124 124 } 125 125 … … 128 128 assert(datasize == sizeof(uint64_t)); 129 129 for(int i=1; i<num_ep; i++) 130 reduce_max<uint64_t>(static_cast<uint64_t*>(comm .my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);130 reduce_max<uint64_t>(static_cast<uint64_t*>(comm->my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count); 131 131 } 132 132 … … 135 135 assert(datasize == sizeof(long long)); 136 136 for(int i=1; i<num_ep; i++) 137 reduce_max<long long>(static_cast<long long*>(comm .my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count);137 reduce_max<long long>(static_cast<long long*>(comm->my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count); 138 138 } 139 139 … … 148 148 assert(datasize == sizeof(int)); 149 149 for(int i=1; i<num_ep; i++) 150 reduce_min<int>(static_cast<int*>(comm .my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);150 reduce_min<int>(static_cast<int*>(comm->my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count); 151 151 } 152 152 … … 155 155 assert(datasize == sizeof(float)); 156 156 for(int i=1; i<num_ep; i++) 157 reduce_min<float>(static_cast<float*>(comm .my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count);157 reduce_min<float>(static_cast<float*>(comm->my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count); 158 158 } 159 159 … … 162 162 assert(datasize == sizeof(double)); 163 163 for(int i=1; i<num_ep; i++) 164 reduce_min<double>(static_cast<double*>(comm .my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count);164 reduce_min<double>(static_cast<double*>(comm->my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count); 165 165 } 166 166 … … 169 169 assert(datasize == sizeof(char)); 170 170 for(int i=1; i<num_ep; i++) 171 reduce_min<char>(static_cast<char*>(comm .my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count);171 reduce_min<char>(static_cast<char*>(comm->my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count); 172 172 } 173 173 … … 176 176 assert(datasize == sizeof(long)); 177 177 for(int i=1; i<num_ep; i++) 178 reduce_min<long>(static_cast<long*>(comm .my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count);178 reduce_min<long>(static_cast<long*>(comm->my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count); 179 179 } 180 180 … … 183 183 assert(datasize == sizeof(unsigned long)); 184 184 for(int i=1; i<num_ep; i++) 185 reduce_min<unsigned long>(static_cast<unsigned long*>(comm .my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count);185 reduce_min<unsigned long>(static_cast<unsigned long*>(comm->my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count); 186 186 } 187 187 … … 190 190 assert(datasize == sizeof(uint64_t)); 191 191 for(int i=1; i<num_ep; i++) 192 reduce_min<uint64_t>(static_cast<uint64_t*>(comm .my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);192 reduce_min<uint64_t>(static_cast<uint64_t*>(comm->my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count); 193 193 } 194 194 … … 197 197 assert(datasize == sizeof(long long)); 198 198 for(int i=1; i<num_ep; i++) 199 reduce_min<long long>(static_cast<long long*>(comm .my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count);199 reduce_min<long long>(static_cast<long long*>(comm->my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count); 200 200 } 201 201 … … 211 211 assert(datasize == sizeof(int)); 212 212 for(int i=1; i<num_ep; i++) 213 reduce_sum<int>(static_cast<int*>(comm .my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);213 reduce_sum<int>(static_cast<int*>(comm->my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count); 214 214 } 215 215 … … 218 218 assert(datasize == sizeof(float)); 219 219 for(int i=1; i<num_ep; i++) 220 reduce_sum<float>(static_cast<float*>(comm .my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count);220 reduce_sum<float>(static_cast<float*>(comm->my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count); 221 221 } 222 222 … … 225 225 assert(datasize == sizeof(double)); 226 226 for(int i=1; i<num_ep; i++) 227 reduce_sum<double>(static_cast<double*>(comm .my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count);227 reduce_sum<double>(static_cast<double*>(comm->my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count); 228 228 } 229 229 … … 232 232 assert(datasize == sizeof(char)); 233 233 for(int i=1; i<num_ep; i++) 234 reduce_sum<char>(static_cast<char*>(comm .my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count);234 reduce_sum<char>(static_cast<char*>(comm->my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count); 235 235 } 236 236 … … 239 239 assert(datasize == sizeof(long)); 240 240 for(int i=1; i<num_ep; i++) 241 reduce_sum<long>(static_cast<long*>(comm .my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count);241 reduce_sum<long>(static_cast<long*>(comm->my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count); 242 242 } 243 243 … … 246 246 assert(datasize == sizeof(unsigned long)); 247 247 for(int i=1; i<num_ep; i++) 248 reduce_sum<unsigned long>(static_cast<unsigned long*>(comm .my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count);248 reduce_sum<unsigned long>(static_cast<unsigned long*>(comm->my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count); 249 249 } 250 250 … … 253 253 assert(datasize == sizeof(uint64_t)); 254 254 for(int i=1; i<num_ep; i++) 255 reduce_sum<uint64_t>(static_cast<uint64_t*>(comm .my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);255 reduce_sum<uint64_t>(static_cast<uint64_t*>(comm->my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count); 256 256 } 257 257 … … 260 260 assert(datasize == sizeof(long long)); 261 261 for(int i=1; i<num_ep; i++) 262 reduce_sum<long long>(static_cast<long long*>(comm .my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count);262 reduce_sum<long long>(static_cast<long long*>(comm->my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count); 263 263 } 264 264 … … 275 275 assert(datasize == sizeof(int)); 276 276 for(int i=1; i<num_ep; i++) 277 reduce_lor<int>(static_cast<int*>(comm .my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);277 reduce_lor<int>(static_cast<int*>(comm->my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count); 278 278 } 279 279 } … … 288 288 { 289 289 290 if(!comm .is_ep && comm.mpi_comm)291 { 292 return ::MPI_Reduce(sendbuf, recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), root, to_mpi_comm(comm .mpi_comm));293 } 294 295 296 297 int ep_rank = comm .ep_comm_ptr->size_rank_info[0].first;298 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;299 int mpi_rank = comm .ep_comm_ptr->size_rank_info[2].first;300 int ep_size = comm .ep_comm_ptr->size_rank_info[0].second;301 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;302 int mpi_size = comm .ep_comm_ptr->size_rank_info[2].second;303 304 int root_mpi_rank = comm .rank_map->at(root).second;305 int root_ep_loc = comm .rank_map->at(root).first;290 if(!comm->is_ep && comm->mpi_comm) 291 { 292 return ::MPI_Reduce(sendbuf, recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), root, to_mpi_comm(comm->mpi_comm)); 293 } 294 295 296 297 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 298 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 299 int mpi_rank = comm->ep_comm_ptr->size_rank_info[2].first; 300 int ep_size = comm->ep_comm_ptr->size_rank_info[0].second; 301 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 302 int mpi_size = comm->ep_comm_ptr->size_rank_info[2].second; 303 304 int root_mpi_rank = comm->rank_map->at(root).second; 305 int root_ep_loc = comm->rank_map->at(root).first; 306 306 307 307 ::MPI_Aint datasize, lb; … … 326 326 if(is_master) 327 327 { 328 ::MPI_Reduce(local_recvbuf, recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), root_mpi_rank, to_mpi_comm(comm .mpi_comm));328 ::MPI_Reduce(local_recvbuf, recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), root_mpi_rank, to_mpi_comm(comm->mpi_comm)); 329 329 330 330 }
Note: See TracChangeset
for help on using the changeset viewer.