Changeset 1500 for XIOS/dev/branch_openmp/extern/ep_dev/ep_exscan.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_exscan.cpp
r1381 r1500 50 50 valid_op(op); 51 51 52 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;53 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;54 int mpi_rank = comm .ep_comm_ptr->size_rank_info[2].first;52 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 53 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 54 int mpi_rank = comm->ep_comm_ptr->size_rank_info[2].first; 55 55 56 56 … … 60 60 if(ep_rank_loc == 0 && mpi_rank != 0) 61 61 { 62 comm .my_buffer->void_buffer[0] = recvbuf;62 comm->my_buffer->void_buffer[0] = recvbuf; 63 63 } 64 64 if(ep_rank_loc == 0 && mpi_rank == 0) 65 65 { 66 comm .my_buffer->void_buffer[0] = const_cast<void*>(sendbuf);66 comm->my_buffer->void_buffer[0] = const_cast<void*>(sendbuf); 67 67 } 68 68 … … 70 70 MPI_Barrier_local(comm); 71 71 72 memcpy(recvbuf, comm .my_buffer->void_buffer[0], datasize*count);72 memcpy(recvbuf, comm->my_buffer->void_buffer[0], datasize*count); 73 73 74 74 MPI_Barrier_local(comm); 75 75 76 comm .my_buffer->void_buffer[ep_rank_loc] = const_cast<void*>(sendbuf);76 comm->my_buffer->void_buffer[ep_rank_loc] = const_cast<void*>(sendbuf); 77 77 78 78 MPI_Barrier_local(comm); … … 84 84 assert(datasize == sizeof(int)); 85 85 for(int i=0; i<ep_rank_loc; i++) 86 reduce_sum<int>(static_cast<int*>(comm .my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);86 reduce_sum<int>(static_cast<int*>(comm->my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count); 87 87 } 88 88 … … 91 91 assert(datasize == sizeof(float)); 92 92 for(int i=0; i<ep_rank_loc; i++) 93 reduce_sum<float>(static_cast<float*>(comm .my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count);93 reduce_sum<float>(static_cast<float*>(comm->my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count); 94 94 } 95 95 … … 99 99 assert(datasize == sizeof(double)); 100 100 for(int i=0; i<ep_rank_loc; i++) 101 reduce_sum<double>(static_cast<double*>(comm .my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count);101 reduce_sum<double>(static_cast<double*>(comm->my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count); 102 102 } 103 103 … … 106 106 assert(datasize == sizeof(char)); 107 107 for(int i=0; i<ep_rank_loc; i++) 108 reduce_sum<char>(static_cast<char*>(comm .my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count);108 reduce_sum<char>(static_cast<char*>(comm->my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count); 109 109 } 110 110 … … 113 113 assert(datasize == sizeof(long)); 114 114 for(int i=0; i<ep_rank_loc; i++) 115 reduce_sum<long>(static_cast<long*>(comm .my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count);115 reduce_sum<long>(static_cast<long*>(comm->my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count); 116 116 } 117 117 … … 120 120 assert(datasize == sizeof(unsigned long)); 121 121 for(int i=0; i<ep_rank_loc; i++) 122 reduce_sum<unsigned long>(static_cast<unsigned long*>(comm .my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count);122 reduce_sum<unsigned long>(static_cast<unsigned long*>(comm->my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count); 123 123 } 124 124 … … 134 134 assert(datasize == sizeof(int)); 135 135 for(int i=0; i<ep_rank_loc; i++) 136 reduce_max<int>(static_cast<int*>(comm .my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);136 reduce_max<int>(static_cast<int*>(comm->my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count); 137 137 } 138 138 … … 141 141 assert(datasize == sizeof(float)); 142 142 for(int i=0; i<ep_rank_loc; i++) 143 reduce_max<float>(static_cast<float*>(comm .my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count);143 reduce_max<float>(static_cast<float*>(comm->my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count); 144 144 } 145 145 … … 148 148 assert(datasize == sizeof(double)); 149 149 for(int i=0; i<ep_rank_loc; i++) 150 reduce_max<double>(static_cast<double*>(comm .my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count);150 reduce_max<double>(static_cast<double*>(comm->my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count); 151 151 } 152 152 … … 155 155 assert(datasize == sizeof(char)); 156 156 for(int i=0; i<ep_rank_loc; i++) 157 reduce_max<char>(static_cast<char*>(comm .my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count);157 reduce_max<char>(static_cast<char*>(comm->my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count); 158 158 } 159 159 … … 162 162 assert(datasize == sizeof(long)); 163 163 for(int i=0; i<ep_rank_loc; i++) 164 reduce_max<long>(static_cast<long*>(comm .my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count);164 reduce_max<long>(static_cast<long*>(comm->my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count); 165 165 } 166 166 … … 169 169 assert(datasize == sizeof(unsigned long)); 170 170 for(int i=0; i<ep_rank_loc; i++) 171 reduce_max<unsigned long>(static_cast<unsigned long*>(comm .my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count);171 reduce_max<unsigned long>(static_cast<unsigned long*>(comm->my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count); 172 172 } 173 173 … … 181 181 assert(datasize == sizeof(int)); 182 182 for(int i=0; i<ep_rank_loc; i++) 183 reduce_min<int>(static_cast<int*>(comm .my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count);183 reduce_min<int>(static_cast<int*>(comm->my_buffer->void_buffer[i]), static_cast<int*>(recvbuf), count); 184 184 } 185 185 … … 188 188 assert(datasize == sizeof(float)); 189 189 for(int i=0; i<ep_rank_loc; i++) 190 reduce_min<float>(static_cast<float*>(comm .my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count);190 reduce_min<float>(static_cast<float*>(comm->my_buffer->void_buffer[i]), static_cast<float*>(recvbuf), count); 191 191 } 192 192 … … 195 195 assert(datasize == sizeof(double)); 196 196 for(int i=0; i<ep_rank_loc; i++) 197 reduce_min<double>(static_cast<double*>(comm .my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count);197 reduce_min<double>(static_cast<double*>(comm->my_buffer->void_buffer[i]), static_cast<double*>(recvbuf), count); 198 198 } 199 199 … … 202 202 assert(datasize == sizeof(char)); 203 203 for(int i=0; i<ep_rank_loc; i++) 204 reduce_min<char>(static_cast<char*>(comm .my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count);204 reduce_min<char>(static_cast<char*>(comm->my_buffer->void_buffer[i]), static_cast<char*>(recvbuf), count); 205 205 } 206 206 … … 209 209 assert(datasize == sizeof(long)); 210 210 for(int i=0; i<ep_rank_loc; i++) 211 reduce_min<long>(static_cast<long*>(comm .my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count);211 reduce_min<long>(static_cast<long*>(comm->my_buffer->void_buffer[i]), static_cast<long*>(recvbuf), count); 212 212 } 213 213 … … 216 216 assert(datasize == sizeof(unsigned long)); 217 217 for(int i=0; i<ep_rank_loc; i++) 218 reduce_min<unsigned long>(static_cast<unsigned long*>(comm .my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count);218 reduce_min<unsigned long>(static_cast<unsigned long*>(comm->my_buffer->void_buffer[i]), static_cast<unsigned long*>(recvbuf), count); 219 219 } 220 220 … … 228 228 int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) 229 229 { 230 if(!comm .is_ep)231 { 232 return ::MPI_Scan(sendbuf, recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), to_mpi_comm(comm .mpi_comm));230 if(!comm->is_ep) 231 { 232 return ::MPI_Scan(sendbuf, recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), to_mpi_comm(comm->mpi_comm)); 233 233 } 234 234 235 235 valid_type(datatype); 236 236 237 int ep_rank = comm .ep_comm_ptr->size_rank_info[0].first;238 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;239 int mpi_rank = comm .ep_comm_ptr->size_rank_info[2].first;240 int ep_size = comm .ep_comm_ptr->size_rank_info[0].second;241 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;242 int mpi_size = comm .ep_comm_ptr->size_rank_info[2].second;237 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 238 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 239 int mpi_rank = comm->ep_comm_ptr->size_rank_info[2].first; 240 int ep_size = comm->ep_comm_ptr->size_rank_info[0].second; 241 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 242 int mpi_size = comm->ep_comm_ptr->size_rank_info[2].second; 243 243 244 244 ::MPI_Aint datasize, lb; … … 253 253 std::vector<int> my_map(mpi_size, 0); 254 254 255 for(int i=0; i<comm .rank_map->size(); i++) my_map[comm.rank_map->at(i).second]++;255 for(int i=0; i<comm->rank_map->size(); i++) my_map[comm->rank_map->at(i).second]++; 256 256 257 257 for(int i=0; i<mpi_rank; i++) my_src += my_map[i]; … … 291 291 292 292 if(ep_rank_loc == 0) 293 ::MPI_Exscan(MPI_IN_PLACE, tmp_recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), to_mpi_comm(comm .mpi_comm));293 ::MPI_Exscan(MPI_IN_PLACE, tmp_recvbuf, count, to_mpi_type(datatype), to_mpi_op(op), to_mpi_comm(comm->mpi_comm)); 294 294 295 295 // printf(" ID=%d : %d %d \n", ep_rank, static_cast<int*>(tmp_recvbuf)[0], static_cast<int*>(tmp_recvbuf)[1]);
Note: See TracChangeset
for help on using the changeset viewer.