Changeset 2a5451


Ignore:
Timestamp:
May 11, 2012, 8:36:18 PM (14 years ago)
Author:
Julian Iseringhausen <isering@…>
Children:
2d4211
Parents:
36d56c
Message:

vmg now succeeds on test_comm.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@1816 5161e1c8-67bf-11de-9fd5-51895aff932f

Location:
src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/base/command_list.cpp

    r36d56c r2a5451  
    6262
    6363#ifdef DEBUG_BARRIER
     64    Comm& comm = *MG::GetComm();
    6465#ifdef HAVE_MPI
    65     MPI_Barrier(MPI_COMM_WORLD);
     66    comm.Barrier();
    6667#endif
    67     MG::GetComm()->PrintStringOnce("Command \"%s\" start", iter->first.c_str());
     68    comm.PrintStringOnce("Command \"%s\" start", iter->first.c_str());
    6869#endif
    6970
     
    7475#ifdef DEBUG_BARRIER
    7576#ifdef HAVE_MPI
    76     MPI_Barrier(MPI_COMM_WORLD);
     77    comm.Barrier();
    7778#endif
    78     MG::GetComm()->PrintStringOnce("Command \"%s\" done", iter->first.c_str());
     79    comm.PrintStringOnce("Command \"%s\" done", iter->first.c_str());
    7980#endif
    8081
  • src/base/timer.cpp

    r36d56c r2a5451  
    185185  Comm& comm = *MG::GetComm();
    186186  char name[80];
    187   int rank, size;
    188 
    189   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    190   MPI_Comm_size(MPI_COMM_WORLD, &size);
     187
     188  int rank = comm.GlobalRank();
     189  int size = comm.GlobalSize();
    191190
    192191  vmg_float times[size];
     
    196195
    197196  int timer_size = Timer::td.size();
    198   MPI_Bcast(timer_size, 1, MPI_INT, 0, MPI_COMM_WORLD);
     197  comm.GlobalBroadcast(timer_size);
    199198
    200199  if (rank == 0) {
    201200      for (iter=Timer::td.begin(); iter!=Timer::td.end(); ++iter) {
    202201        std::strcpy(name, iter->first.c_str());
    203         MPI_Bcast(name, 80, MPI_CHAR, 0, MPI_COMM_WORLD);
    204         MPI_Gather(&Timer::td[name].duration, 1, MPI_DOUBLE, times, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
    205         MPI_Gather(&Timer::td[name].total, 1, MPI_INT, calls, 1, MPI_INT, 0, MPI_COMM_WORLD);
     202        comm.GlobalBroadcast(name);
     203        comm.GlobalGather(Timer::td[name].duration, times);
     204        comm.GlobalGather(Timer::td[name].total, calls);
    206205
    207206        int min_calls, max_calls;
     
    227226  }else {
    228227    for (int i=0; i<timer_size; ++i) {
    229       MPI_Bcast(name, 80, MPI_CHAR, 0, MPI_COMM_WORLD);
    230       MPI_Gather(&Timer::td[name].duration, 1, MPI_DOUBLE, times, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
    231       MPI_Gather(&Timer::td[name].total, 1, MPI_INT, calls, 1, MPI_INT, 0, MPI_COMM_WORLD);
     228      comm.GlobalBroadcast(name);
     229      comm.GlobalGather(Timer::td[name].duration, times);
     230      comm.GlobalGather(Timer::td[name].total, calls);
    232231    }
    233232  }
  • src/comm/comm.hpp

    r36d56c r2a5451  
    7171  virtual void CommFromGhostsAsyncFinish(Grid& grid) = 0;
    7272
     73  virtual void Barrier() {}
     74
    7375  virtual vmg_float GlobalSum(const vmg_float& value) {return value;}
    7476  virtual vmg_float GlobalSumRoot(const vmg_float& value) {return value;}
    7577  virtual void GlobalSumArray(vmg_float* array, const vmg_int& size) {}
     78  virtual vmg_float GlobalMax(const vmg_float& value) {return value;}
     79  virtual vmg_float GlobalMaxRoot(const vmg_float& value) {return value;}
     80  virtual void GlobalMaxArray(vmg_float* array, const vmg_int& size) {}
     81  virtual void GlobalBroadcast(vmg_float& value) {}
     82  virtual void GlobalGather(vmg_float& value, vmg_float* array) {array[0] = value;}
    7683
    7784  virtual vmg_int GlobalSum(const vmg_int& value) {return value;}
    7885  virtual vmg_int GlobalSumRoot(const vmg_int& value) {return value;}
    7986  virtual void GlobalSumArray(vmg_int* array, const vmg_int& size) {}
    80 
    81   virtual vmg_float GlobalMax(const vmg_float& value) {return value;}
    82   virtual vmg_float GlobalMaxRoot(const vmg_float& value) {return value;}
    83   virtual void GlobalMaxArray(vmg_float* array, const vmg_int& size) {}
    84 
    8587  virtual vmg_int GlobalMax(const vmg_int& value) {return value;}
    8688  virtual vmg_int GlobalMaxRoot(const vmg_int& value) {return value;}
    8789  virtual void GlobalMaxArray(vmg_int* array, const vmg_int& size) {}
     90  virtual void GlobalBroadcast(vmg_int& value) {}
     91  virtual void GlobalGather(vmg_int& value, vmg_int* array) {array[0] = value;}
     92
     93  virtual void GlobalBroadcast(char* str) {}
    8894
    8995  virtual vmg_float LevelSum(const Grid& grid, const vmg_float& value) {return value;}
  • src/comm/comm_mpi.cpp

    r36d56c r2a5451  
    186186}
    187187
     188void CommMPI::Barrier()
     189{
     190  MPI_Barrier(comm_global);
     191}
     192
    188193vmg_float CommMPI::GlobalSum(const vmg_float& value)
    189194{
     
    206211}
    207212
     213void CommMPI::GlobalBroadcast(vmg_float& value)
     214{
     215  MPI_Bcast(&value, 1, MPI_DOUBLE, 0, comm_global);
     216}
     217
     218void CommMPI::GlobalGather(vmg_float& value, vmg_float* array)
     219{
     220  MPI_Gather(&value, 1, MPI_DOUBLE, array, 1, MPI_DOUBLE, 0, comm_global);
     221}
     222
    208223vmg_int CommMPI::GlobalSum(const vmg_int& value)
    209224{
     
    264279{
    265280  MPI_Allreduce(MPI_IN_PLACE, array, size, MPI_INT, MPI_MAX, comm_global);
     281}
     282
     283void CommMPI::GlobalBroadcast(vmg_int& value)
     284{
     285  MPI_Bcast(&value, 1, MPI_INT, 0, comm_global);
     286}
     287
     288void CommMPI::GlobalGather(vmg_int& value, vmg_int* array)
     289{
     290  MPI_Gather(&value, 1, MPI_INT, array, 1, MPI_INT, 0, comm_global);
     291}
     292
     293void CommMPI::GlobalBroadcast(char* str)
     294{
     295  MPI_Bcast(str, std::strlen(str)+1, MPI_CHAR, 0, comm_global);
    266296}
    267297
  • src/comm/comm_mpi.hpp

    r36d56c r2a5451  
    8787  void CommFromGhostsAsyncFinish(Grid& grid);
    8888
     89  void Barrier();
     90
    8991  vmg_float GlobalSum(const vmg_float& value);
    9092  vmg_float GlobalSumRoot(const vmg_float& value);
    9193  void GlobalSumArray(vmg_float* array, const vmg_int& size);
     94  vmg_float GlobalMax(const vmg_float& value);
     95  vmg_float GlobalMaxRoot(const vmg_float& value);
     96  void GlobalMaxArray(vmg_float* array, const vmg_int& size);
     97  void GlobalBroadcast(vmg_float& value);
     98  void GlobalGather(vmg_float& value, vmg_float* array);
    9299
    93100  vmg_int GlobalSum(const vmg_int& value);
    94101  vmg_int GlobalSumRoot(const vmg_int& value);
    95102  void GlobalSumArray(vmg_int* array, const vmg_int& size);
    96 
    97   vmg_float GlobalMax(const vmg_float& value);
    98   vmg_float GlobalMaxRoot(const vmg_float& value);
    99   void GlobalMaxArray(vmg_float* array, const vmg_int& size);
    100 
    101103  vmg_int GlobalMax(const vmg_int& value);
    102104  vmg_int GlobalMaxRoot(const vmg_int& value);
    103105  void GlobalMaxArray(vmg_int* array, const vmg_int& size);
     106  void GlobalBroadcast(vmg_int& value);
     107  void GlobalGather(vmg_int& value, vmg_int* array);
     108
     109  void GlobalBroadcast(char* str);
    104110
    105111  vmg_float LevelSum(const Grid& grid, const vmg_float& value);
  • src/mg.cpp

    r36d56c r2a5451  
    158158#ifdef DEBUG_MEASURE_TIME
    159159#ifdef HAVE_MPI
    160   MPI_Barrier(MPI_COMM_WORLD);
     160  GetComm()->Barrier();
    161161#endif
    162162  Timer::Start("CompleteRunningTime");
     
    175175#ifdef DEBUG_MEASURE_TIME
    176176#ifdef HAVE_MPI
    177   MPI_Barrier(MPI_COMM_WORLD);
     177  GetComm()->Barrier();
    178178#endif
    179179  Timer::Stop("CompleteRunningTime");
  • src/units/particle/interface_fcs.cpp

    r36d56c r2a5451  
    107107  MPI_Errhandler mpiErrorHandler;
    108108  MPI_Comm_create_errhandler(VMG::MPI::ConvertToException, &mpiErrorHandler);
    109   MPI_Comm_set_errhandler(MPI_COMM_WORLD, mpiErrorHandler);
     109  MPI_Comm_set_errhandler(mpi_comm, mpiErrorHandler);
    110110#endif
    111111
     
    119119   * Register communication class.
    120120   */
    121   Comm* comm = new Particle::CommMPI(boundary, new DomainDecompositionMPI());
     121  Comm* comm = new Particle::CommMPI(boundary, new DomainDecompositionMPI(), mpi_comm);
    122122  comm->Register("COMM");
    123123
Note: See TracChangeset for help on using the changeset viewer.