Changeset 1388
- Timestamp:
- 12/21/17 14:50:18 (6 years ago)
- Location:
- XIOS/dev/branch_openmp/extern/ep_dev
- Files:
-
- 1 added
- 1 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/ep_dev/ep_lib.cpp
r1383 r1388 255 255 } 256 256 257 MPI_Info to_mpi_info( void*info)258 { 259 return *(static_cast< MPI_Info* >(info ));257 MPI_Info to_mpi_info(ep_lib::MPI_Info info) 258 { 259 return *(static_cast< MPI_Info* >(info.mpi_info)); 260 260 } 261 261 -
XIOS/dev/branch_openmp/extern/ep_dev/ep_lib.hpp
r1381 r1388 69 69 int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr); 70 70 71 int MPI_Alloc_mem(unsigned long size, MPI_Info info, void *baseptr);71 //int MPI_Alloc_mem(unsigned long size, MPI_Info info, void *baseptr); 72 72 73 73 -
XIOS/dev/branch_openmp/extern/ep_dev/ep_lib_win.hpp
r1385 r1388 23 23 int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, 24 24 int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win); 25 25 26 int MPI_Win_allocate (MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr, MPI_Win *win); 26 27 } 27 28 -
XIOS/dev/branch_openmp/extern/ep_dev/ep_mpi.hpp
r1383 r1388 8 8 MPI_Comm to_mpi_comm(void* comm); 9 9 MPI_Message to_mpi_message(void* message); 10 MPI_Info to_mpi_info( void*info);10 MPI_Info to_mpi_info(ep_lib::MPI_Info info); 11 11 MPI_Win to_mpi_win(void* win); 12 12 MPI_Aint to_mpi_aint(ep_lib::MPI_Aint aint); -
XIOS/dev/branch_openmp/extern/ep_dev/ep_type.hpp
r1385 r1388 277 277 public: 278 278 bool is_ep; 279 void* mpi_win[12]; // client side280 279 MPI_Comm comm; 281 280 282 void* server_win[1 2];281 void* server_win[16]; 283 282 void* client_win; 283 void* null_win[16]; 284 284 }; 285 285 -
XIOS/dev/branch_openmp/extern/ep_dev/ep_win.cpp
r1383 r1388 35 35 for(int i=0; i<num_ep_max; i++) 36 36 { 37 ::MPI_Win_create(base, to_mpi_aint(size .mpi_aint), disp_unit, to_mpi_info(info.mpi_info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->server_win[i]));37 ::MPI_Win_create(base, to_mpi_aint(size), disp_unit, to_mpi_info(info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->server_win[i])); 38 38 win->comm = comm; 39 39 } … … 43 43 win->client_win = new ::MPI_Win; 44 44 45 for(int i=0; i<num_ep _max; i++)45 for(int i=0; i<num_ep; i++) 46 46 { 47 47 if(rank_loc == i) 48 48 { 49 49 printf("Calling MPI_Win_create from client, rank = %d\n", rank); 50 ::MPI_Win_create(base, to_mpi_aint(size .mpi_aint), disp_unit, to_mpi_info(info.mpi_info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->client_win));50 ::MPI_Win_create(base, to_mpi_aint(size), disp_unit, to_mpi_info(info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->client_win)); 51 51 win->comm = comm; 52 52 } … … 54 54 } 55 55 56 // #pragma omp critical (win_create) 57 // { 58 // ::MPI_Win_create(base, to_mpi_aint(size.mpi_aint), disp_unit, to_mpi_info(info.mpi_info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->client_win)); 59 // win->comm = comm; 60 // } 56 if(num_ep_max > num_ep) 57 { 58 59 #pragma omp master 60 { 61 for(int i=0; i<num_ep_max-num_ep; i++) 62 { 63 win->null_win[i] = new ::MPI_Win; 64 ::MPI_Win_create(NULL, 0, disp_unit, to_mpi_info(info), to_mpi_comm(comm.mpi_comm), static_cast< ::MPI_Win*>(win->null_win[i])); 65 } 66 } 67 } 68 61 69 } 62 70 return 0; … … 90 98 else 91 99 { 92 for(int i=0; i<num_ep _max; i++)100 for(int i=0; i<num_ep; i++) 93 101 { 94 102 if(rank_loc == i) … … 99 107 MPI_Barrier_local(win->comm); 100 108 } 109 110 111 if(num_ep_max > num_ep) 112 { 113 #pragma omp master 114 { 115 for(int i=0; i<num_ep_max-num_ep; i++) 116 { 117 ::MPI_Win_free(static_cast< ::MPI_Win*>(win->null_win[i])); 118 } 119 } 120 } 121 101 122 } 102 123 return 0; … … 126 147 else 127 148 { 128 for(int i=0; i<num_ep _max; i++)149 for(int i=0; i<num_ep; i++) 129 150 { 130 151 if(rank_loc == i) … … 134 155 } 135 156 MPI_Barrier_local(win.comm); 157 } 158 159 160 if(num_ep_max > num_ep) 161 { 162 #pragma omp master 163 { 164 for(int i=0; i<num_ep_max-num_ep; i++) 165 { 166 ::MPI_Win_fence(assert, *static_cast< ::MPI_Win*>(win.null_win[i])); 167 } 168 } 136 169 } 137 170 } -
XIOS/dev/branch_openmp/extern/ep_dev/main.cpp
r1385 r1388 637 637 { 638 638 printf("Proc %d is client\n", mpi_rank); 639 num_threads = 2 ;639 num_threads = 2+mpi_rank; 640 640 } 641 641 else … … 730 730 1, MPI_INT, MPI_SUM, ep_win); 731 731 } 732 733 732 733 MPI_Win_fence(0, ep_win); 734 735 MPI_Win ep_win_allocated; 736 int* baseptr = new int[10]; 737 MPI_Aint base_size = 4; 738 739 MPI_Win_allocate (base_size, sizeof(int), info, comm, baseptr, &ep_win_allocated); 740 741 MPI_Win_fence(0, ep_win_allocated); 742 743 MPI_Win_free(&ep_win_allocated); 744 delete[] baseptr; 745 734 746 MPI_Win_free(&ep_win); 735 747 printf("rank = %d, buf = %d, local_buf = %d, result_buf = %d\n", rank, buf, local_buf, result_buf);
Note: See TracChangeset
for help on using the changeset viewer.