#include "mpi.hpp" #include "backtrace.hpp" #include "exception.hpp" #include "log.hpp" #include #include namespace xios { std::map CCommTrack::commTrack_ ; void CCommTrack::registerComm(const MPI_Comm& comm) { if (comm!=MPI_COMM_NULL) { auto it = commTrack_.find(comm) ; if (it == commTrack_.end()) commTrack_[comm] = MemTrack::backTrace(3); else ERROR("CCommtrack::registerComm", << "Communicator already allocated : " << endl<second) } } void CCommTrack::releaseComm(const MPI_Comm& comm) { auto it = commTrack_.find(comm) ; if (it == commTrack_.end()) info(100)<<"WARNING : CCommtrack::releaseComm => Communicator not allocated !" << endl ; else commTrack_.erase(it) ; } void CCommTrack::dumpComm(void) { ostringstream ostr ; ostr<<" LIST of UNFREED MPI COMMUNICATORS"< MPI_Datatype MPI_GetType(void) { return MPI_CXX_BOOL ;} template<> MPI_Datatype MPI_GetType(void) { return MPI_CHAR ;} template<> MPI_Datatype MPI_GetType(void) { return MPI_SHORT ;} template<> MPI_Datatype MPI_GetType(void) { return MPI_INT ;} template<> MPI_Datatype MPI_GetType(void) { return MPI_SIZE_T ;} template<> MPI_Datatype MPI_GetType(void) { return MPI_FLOAT ;} template<> MPI_Datatype MPI_GetType(void) { return MPI_DOUBLE ;} template<> MPI_Datatype MPI_GetType(void) { return MPI_LONG_DOUBLE ;} }