Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/toolx/mpi/wait_buffer

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/g4tools/include/toolx/mpi/wait_buffer (Version 11.3.0) and /externals/g4tools/include/toolx/mpi/wait_buffer (Version 11.1)


  1 // Copyright (C) 2010, Guy Barrand. All rights      1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
  2 // See the file tools.license for terms.            2 // See the file tools.license for terms.
  3                                                     3 
  4 #ifndef toolx_mpi_wait_buffer                       4 #ifndef toolx_mpi_wait_buffer
  5 #define toolx_mpi_wait_buffer                       5 #define toolx_mpi_wait_buffer
  6                                                     6 
  7 #include <mpi.h>                                    7 #include <mpi.h>
  8                                                     8 
  9 #include <ostream>                                  9 #include <ostream>
 10                                                    10 
 11 namespace toolx {                                  11 namespace toolx {
 12 namespace mpi {                                    12 namespace mpi {
 13                                                    13 
 14 inline bool wait_buffer(std::ostream& a_out,in     14 inline bool wait_buffer(std::ostream& a_out,int a_rank,int a_src,int a_tag,const MPI_Comm& a_comm,
 15                         int& a_buffer_size,cha     15                         int& a_buffer_size,char*& a_buffer,int& a_probe_src,bool a_verbose = false) {
 16   a_buffer = 0;                                    16   a_buffer = 0;
 17   a_buffer_size = 0;                               17   a_buffer_size = 0;
 18   a_probe_src = -1;                                18   a_probe_src = -1;
 19                                                    19 
 20   MPI_Status status;                               20   MPI_Status status;
 21   if(::MPI_Probe(a_src,a_tag,a_comm,&status)!=     21   if(::MPI_Probe(a_src,a_tag,a_comm,&status)!=MPI_SUCCESS) {
 22     a_out << "toolx::mpi::wait_buffer : rank "     22     a_out << "toolx::mpi::wait_buffer : rank " << a_rank << " : MPI_Probe : failed." << std::endl;
 23     return false;                                  23     return false;
 24   }                                                24   }
 25                                                    25 
 26   if(::MPI_Get_count(&status,MPI_CHAR,&a_buffe     26   if(::MPI_Get_count(&status,MPI_CHAR,&a_buffer_size)!=MPI_SUCCESS) {
 27     a_out << "toolx::mpi::wait_buffer : rank "     27     a_out << "toolx::mpi::wait_buffer : rank " << a_rank << " : MPI_Get_count : failed." << std::endl;
 28     a_buffer_size = 0;                             28     a_buffer_size = 0;
 29     return false;                                  29     return false;
 30   }                                                30   }
 31                                                    31 
 32   a_probe_src = status.MPI_SOURCE;                 32   a_probe_src = status.MPI_SOURCE;
 33                                                    33 
 34   if(!a_buffer_size) {                             34   if(!a_buffer_size) {
 35     a_out << "exlb::mpi::wait_buffer : MPI_Get     35     a_out << "exlb::mpi::wait_buffer : MPI_Get_count returns zero data." << std::endl;
 36     a_probe_src = -1;                              36     a_probe_src = -1;
 37     return false;                                  37     return false;
 38   }                                                38   }
 39                                                    39 
 40   if(a_verbose) a_out << "toolx::mpi::wait_buf     40   if(a_verbose) a_out << "toolx::mpi::wait_buffer : rank " << a_rank << " : get_count " << a_buffer_size << std::endl;
 41                                                    41 
 42   a_buffer = new char[a_buffer_size];              42   a_buffer = new char[a_buffer_size];
 43   if(!a_buffer) {                                  43   if(!a_buffer) {
 44     a_out << "toolx::mpi::wait_buffer : rank "     44     a_out << "toolx::mpi::wait_buffer : rank " << a_rank << " : can't alloc buffer of size " << a_buffer_size << std::endl;
 45     a_buffer_size = 0;                             45     a_buffer_size = 0;
 46     a_probe_src = -1;                              46     a_probe_src = -1;
 47     return false;                                  47     return false;
 48   }                                                48   }
 49                                                    49 
 50   if(::MPI_Recv(a_buffer,a_buffer_size,MPI_CHA     50   if(::MPI_Recv(a_buffer,a_buffer_size,MPI_CHAR,status.MPI_SOURCE,status.MPI_TAG,a_comm,&status)!=MPI_SUCCESS) {
 51     a_out << "toolx::mpi::wait_buffer : rank "     51     a_out << "toolx::mpi::wait_buffer : rank " << a_rank << " : MPI_Recv : failed." << std::endl;
 52     a_buffer_size = 0;                             52     a_buffer_size = 0;
 53     delete [] a_buffer;                            53     delete [] a_buffer;
 54     a_buffer = 0;                                  54     a_buffer = 0;
 55     a_probe_src = -1;                              55     a_probe_src = -1;
 56     return false;                                  56     return false;
 57   }                                                57   }
 58                                                    58 
 59   if(a_verbose) a_out << "toolx::mpi::wait_buf     59   if(a_verbose) a_out << "toolx::mpi::wait_buffer : rank " << a_rank << " : unpack data ..." << std::endl;
 60                                                    60 
 61   return true;                                     61   return true;
 62 }                                                  62 }
 63                                                    63 
 64 }}                                                 64 }}
 65                                                    65 
 66 #endif                                             66 #endif