00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TEUCHOS_COMM_HPP
00030 #define TEUCHOS_COMM_HPP
00031
00032 #include "Teuchos_ReductionOp.hpp"
00033 #include "Teuchos_ArrayRCP.hpp"
00034
00035 namespace Teuchos {
00036
00037
00039 class CommRequest : public Teuchos::Describable {};
00040
00041
00058 template<typename Ordinal>
00059 class Comm : virtual public Describable {
00060 public:
00061
00063
00064
00071 virtual int getRank() const = 0;
00072
00079 virtual int getSize() const = 0;
00080
00082
00084
00085
00089 virtual void barrier() const = 0;
00090
00105 virtual void broadcast(
00106 const int rootRank, const Ordinal bytes, char buffer[]
00107 ) const = 0;
00108
00131 virtual void gatherAll(
00132 const Ordinal sendBytes, const char sendBuffer[]
00133 ,const Ordinal recvBytes, char recvBuffer[]
00134 ) const = 0;
00135
00149 virtual void reduceAll(
00150 const ValueTypeReductionOp<Ordinal,char> &reductOp
00151 ,const Ordinal bytes, const char sendBuffer[], char globalReducts[]
00152 ) const = 0;
00153
00177 virtual void reduceAllAndScatter(
00178 const ValueTypeReductionOp<Ordinal,char> &reductOp
00179 ,const Ordinal sendBytes, const char sendBuffer[]
00180 ,const Ordinal recvCounts[], char myGlobalReducts[]
00181 ) const = 0;
00182
00196 virtual void scan(
00197 const ValueTypeReductionOp<Ordinal,char> &reductOp
00198 ,const Ordinal bytes, const char sendBuffer[], char scanReducts[]
00199 ) const = 0;
00200
00202
00203
00220 virtual void send(
00221 const Ordinal bytes, const char sendBuffer[], const int destRank
00222 ) const = 0;
00223
00244 virtual int receive(
00245 const int sourceRank, const Ordinal bytes, char recvBuffer[]
00246 ) const = 0;
00247
00248
00260 virtual void readySend(
00261 const ArrayView<const char> &sendBuffer,
00262 const int destRank
00263 ) const = 0;
00264
00265
00267
00268
00270
00271
00272
00284 virtual RCP<CommRequest> isend(
00285 const ArrayView<const char> &sendBuffer,
00286 const int destRank
00287 ) const = 0;
00288
00289
00304 virtual RCP<CommRequest> ireceive(
00305 const ArrayView<char> &recvBuffer,
00306 const int sourceRank
00307 ) const = 0;
00308
00309
00320 virtual void waitAll(
00321 const ArrayView<RCP<CommRequest> > &requests
00322 ) const = 0;
00323
00324
00335 virtual void wait(
00336 const Ptr<RCP<CommRequest> > &request
00337 ) const = 0;
00338
00339
00341
00342 };
00343
00344 }
00345
00346 #endif // TEUCHOS_COMM_HPP