|
Teuchos - Trilinos Tools Package Version of the Day
|
00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Teuchos: Common Tools Package 00005 // Copyright (2004) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are 00012 // met: 00013 // 00014 // 1. Redistributions of source code must retain the above copyright 00015 // notice, this list of conditions and the following disclaimer. 00016 // 00017 // 2. Redistributions in binary form must reproduce the above copyright 00018 // notice, this list of conditions and the following disclaimer in the 00019 // documentation and/or other materials provided with the distribution. 00020 // 00021 // 3. Neither the name of the Corporation nor the names of the 00022 // contributors may be used to endorse or promote products derived from 00023 // this software without specific prior written permission. 00024 // 00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 // 00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #ifndef TEUCHOS_MPICOMM_H 00043 #define TEUCHOS_MPICOMM_H 00044 00050 00051 #include "Teuchos_ConfigDefs.hpp" 00052 #include "Teuchos_Array.hpp" 00053 #include "Teuchos_RCP.hpp" 00054 00055 #ifdef HAVE_MPI 00056 #include "mpi.h" 00057 #endif 00058 00059 00060 namespace Teuchos 00061 { 00072 class TEUCHOS_DEPRECATED TEUCHOS_LIB_DLL_EXPORT MPIComm 00073 { 00074 public: 00075 00077 MPIComm(); 00078 00079 #ifdef HAVE_MPI 00080 00081 MPIComm(MPI_Comm comm); 00082 #endif 00083 00085 static MPIComm& world(); 00087 static MPIComm& self(); 00088 00090 int getRank() const {return myRank_;} 00091 00093 int getNProc() const {return nProc_;} 00094 00096 void synchronize() const ; 00097 00099 00100 00102 void allToAll(void* sendBuf, int sendCount, int sendType, 00103 void* recvBuf, int recvCount, int recvType) const ; 00104 00106 void allToAllv(void* sendBuf, int* sendCount, int* sendDisplacements, 00107 int sendType, 00108 void* recvBuf, int* recvCount, 00109 int* recvDisplacements, 00110 int recvType) const ; 00111 00113 void allReduce(void* input, void* result, int inputCount, int type, 00114 int op) const ; 00115 00116 00118 void gather(void* sendBuf, int sendCount, int sendType, 00119 void* recvBuf, int recvCount, int recvType, 00120 int root) const ; 00121 00123 void gatherv(void* sendBuf, int sendCount, int sendType, 00124 void* recvBuf, int* recvCount, int* displacements, 00125 int recvType, int root) const ; 00126 00128 void allGather(void* sendBuf, int sendCount, int sendType, 00129 void* recvBuf, int recvCount, int recvType) const ; 00130 00132 void allGatherv(void* sendBuf, int sendCount, int sendType, 00133 void* recvBuf, int* recvCount, int* recvDisplacements, 00134 int recvType) const ; 00135 00137 void bcast(void* msg, int length, int type, int src) const ; 00138 00140 00141 #ifdef HAVE_MPI 00142 00143 MPI_Comm getComm() const {return comm_;} 00144 #endif 00145 00147 00148 00149 static const int INT; 00151 static const int FLOAT; 00153 static const int DOUBLE; 00155 static const int DOUBLE_INT; 00157 static const int CHAR; 00159 00161 00162 00163 static const int SUM; 00165 static const int MIN; 00167 static const int MAX; 00169 static const int MINLOC; 00171 static const int MAXLOC; 00173 static const int PROD; 00175 00176 // errCheck() checks the return value of an MPI call and throws 00177 // a ParallelException upon failure. 00178 static void errCheck(int errCode, const std::string& methodName); 00179 00180 #ifdef HAVE_MPI 00181 00182 static MPI_Datatype getDataType(int type); 00183 00185 static MPI_Op getOp(int op); 00186 #endif 00187 private: 00188 #ifdef HAVE_MPI 00189 MPI_Comm comm_; 00190 #endif 00191 00192 int nProc_; 00193 int myRank_; 00194 00196 void init(); 00197 00199 int mpiIsRunning() const ; 00200 }; 00201 } 00202 #endif 00203
1.7.4