10#ifndef TEUCHOS_COMM_HELPERS_HPP
11#define TEUCHOS_COMM_HELPERS_HPP
13#include "Teuchos_Comm.hpp"
14#include "Teuchos_CommUtilities.hpp"
15#include "Teuchos_SerializationTraitsHelpers.hpp"
16#include "Teuchos_ReductionOpHelpers.hpp"
17#include "Teuchos_SerializerHelpers.hpp"
22#include "Teuchos_Workspace.hpp"
25#ifdef HAVE_TEUCHOS_MPI
28#include "Teuchos_DefaultSerialComm.hpp"
37#ifdef HAVE_TEUCHOS_MPI
46std::string getMpiErrorString (
const int errCode);
55template<
typename Ordinal>
62template<
typename Ordinal>
69template<
typename Ordinal>
76template<
typename Ordinal,
typename Packet>
80 const Ordinal count, Packet buffer[]
87template<
typename Ordinal,
typename Packet>
98template<
typename Ordinal,
typename Packet>
101 const int rootRank, Packet *
object
108template<
typename Ordinal,
typename Packet>
118template<
typename Ordinal,
typename Packet>
121 const int rootRank,
const Ordinal count, Packet*
const buffer[]
128template<
typename Ordinal,
typename Packet>
139template<
typename Ordinal,
typename Packet,
typename Serializer>
144 const Ordinal count, Packet buffer[]
151template<
typename Ordinal,
typename Packet>
154 const Ordinal sendCount,
156 const Ordinal recvCount,
164template<
typename Ordinal,
typename Packet>
167 const Ordinal sendCount,
169 const Ordinal recvCounts[],
170 const Ordinal displs[],
179template<
typename Ordinal,
typename Packet>
182 const Ordinal sendCount,
const Packet sendBuffer[],
183 const Ordinal recvCount, Packet recvBuffer[]
191template<
typename Ordinal,
typename Packet>
194 const Ordinal sendCount,
const Packet*
const sendBuffer[],
195 const Ordinal recvCount, Packet*
const recvBuffer[]
203template<
typename Ordinal,
typename Packet,
typename Serializer>
207 const Ordinal sendCount,
const Packet sendBuffer[],
208 const Ordinal recvCount, Packet recvBuffer[]
237template<
typename Ordinal,
typename Packet>
240 const Ordinal sendCount,
242 const Ordinal recvCount,
250 (
true, std::logic_error,
"Teuchos::scatter<" <<
252 <<
">: Generic version is not yet implemented. This function currently "
253 "only has an implementtion for Ordinal = int and Packet = int. "
254 "See Bug 6375 and Bug 6336.");
257template<
typename Ordinal,
typename Packet>
259scatterv (
const Packet sendBuf[],
260 const Ordinal sendCounts[],
261 const Ordinal displs[],
263 const Ordinal recvCount,
271 (
true, std::logic_error,
"Teuchos::scatterv<" <<
273 <<
">: Generic version is not yet implemented. This function currently "
274 "only has an implementtion for Ordinal = int and Packet = int. "
275 "See Bug 6375 and Bug 6336.");
305template<
typename Ordinal,
typename Packet>
336template<
typename Ordinal,
typename Packet>
339 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
347template<
typename Ordinal,
typename Packet>
350 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
358template<
typename Ordinal,
typename Packet>
369template<
typename Ordinal,
typename Packet>
373 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
381template<
typename Ordinal,
typename Packet,
typename Serializer>
386 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
394template<
typename Ordinal,
typename Packet,
typename Serializer>
399 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
407template<
typename Ordinal,
typename Packet>
410 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
418template<
typename Ordinal,
typename Packet>
421 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
429template<
typename Ordinal,
typename Packet>
440template<
typename Ordinal,
typename Packet>
444 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
452template<
typename Ordinal,
typename Packet,
typename Serializer>
457 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
465template<
typename Ordinal,
typename Packet,
typename Serializer>
470 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
477template<
typename Ordinal,
typename Packet>
480 const Ordinal count,
const Packet sendBuffer[],
const int destRank
484template<
typename Ordinal,
typename Packet>
486send (
const Packet sendBuffer[],
496template<
typename Ordinal,
typename Packet>
499 const Ordinal count,
const Packet sendBuffer[],
const int destRank
503template<
typename Ordinal,
typename Packet>
505ssend (
const Packet sendBuffer[],
515template<
typename Ordinal,
typename Packet>
518 const Packet &
send,
const int destRank
525template<
typename Ordinal,
typename Packet>
528 const Packet &
send,
const int destRank
537template<
typename Ordinal,
typename Packet>
540 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
548template<
typename Ordinal,
typename Packet,
typename Serializer>
552 const Ordinal count,
const Packet sendBuffer[],
const int destRank
559template<
typename Ordinal,
typename Packet>
562 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
569template<
typename Ordinal,
typename Packet>
572 const int sourceRank, Packet *recv
579template<
typename Ordinal,
typename Packet>
582 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
590template<
typename Ordinal,
typename Packet,
typename Serializer>
594 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
602template<
typename Ordinal,
typename Packet>
610template<
typename Ordinal,
typename Packet>
622template<
typename Ordinal,
typename Packet>
634template<
typename Ordinal,
typename Packet,
typename Serializer>
646template<
typename Ordinal,
typename Packet>
654template<
typename Ordinal,
typename Packet>
665template<
typename Ordinal,
typename Packet>
677template<
typename Ordinal,
typename Packet,
typename Serializer>
698template<
typename Ordinal,
typename Packet>
706template<
typename Ordinal,
typename Packet>
709 const int sourceRank,
724template<
typename Ordinal,
typename Packet>
736template<
typename Ordinal,
typename Packet,
typename Serializer>
755template<
typename Ordinal>
790template<
typename Ordinal>
819template<
typename Ordinal>
832template<
typename Ordinal,
typename Packet>
839 const Packet inBuffer[],
853template<
typename Ordinal,
typename Packet>
860 const Packet inBuffer[],
874template<
typename Ordinal,
typename Packet>
881 const Packet inBuffer[],
891template<
typename Ordinal,
typename Packet>
898 const Packet inBuffer[],
913namespace MixMaxUtilities {
916template<
bool isComparable,
typename Ordinal,
typename Packet>
920template<
typename Ordinal,
typename Packet>
921class Min<true,Ordinal,Packet> {
925 const Packet inBuffer[],
929 for(
int i = 0; i < count; ++i )
930 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
935template<
typename Ordinal,
typename Packet>
936class Min<false,Ordinal,Packet> {
945 true,std::logic_error,
947 <<
" does not support comparison operations!"
953template<
bool isComparable,
typename Ordinal,
typename Packet>
957template<
typename Ordinal,
typename Packet>
958class Max<true,Ordinal,Packet> {
962 const Packet inBuffer[],
966 for(
int i = 0; i < count; ++i )
967 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
972template<
typename Ordinal,
typename Packet>
973class Max<false,Ordinal,Packet> {
982 true,std::logic_error,
984 <<
" does not support comparison operations!"
990template<
bool isComparable,
typename Ordinal,
typename Packet>
994template<
typename Ordinal,
typename Packet>
995class AND<true,Ordinal,Packet> {
999 const Packet inBuffer[],
1000 Packet inoutBuffer[]
1003 for(
int i = 0; i < count; ++i )
1004 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1009template<
typename Ordinal,
typename Packet>
1010class AND<false,Ordinal,Packet> {
1019 true,std::logic_error,
1021 <<
" does not support logical AND operations!"
1030template<
typename Ordinal,
typename Packet>
1032 const Ordinal count,
1033 const Packet inBuffer[],
1034 Packet inoutBuffer[]
1037 for(
int i = 0; i < count; ++i )
1038 inoutBuffer[i] += inBuffer[i];
1042template<
typename Ordinal,
typename Packet>
1044 const Ordinal count,
1045 const Packet inBuffer[],
1046 Packet inoutBuffer[]
1049 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal, Packet> min_type;
1050 min_type::min (count, inBuffer, inoutBuffer);
1054template<
typename Ordinal,
typename Packet>
1056 const Ordinal count,
1057 const Packet inBuffer[],
1058 Packet inoutBuffer[]
1061 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal, Packet> max_type;
1062 max_type::max (count,inBuffer,inoutBuffer);
1066template<
typename Ordinal,
typename Packet>
1068 const Ordinal count,
1069 const Packet inBuffer[],
1070 Packet inoutBuffer[]
1073 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal, Packet> and_type;
1074 and_type::andOp (count, inBuffer, inoutBuffer);
1104template<
typename Ordinal,
typename Packet>
1105ValueTypeReductionOp<Ordinal,Packet>*
1106createOp (
const EReductionType reductType)
1108 typedef ScalarTraits<Packet> ST;
1109 switch (reductType) {
1111 return new SumValueReductionOp<Ordinal,Packet> ();
1114 if (ST::isComparable) {
1119 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1121 <<
" is not less-than comparable, so it does not make sense to do a "
1122 "MIN reduction with it.");
1126 if (ST::isComparable) {
1131 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1133 <<
" is not less-than comparable, so it does not make sense to do a "
1134 "MAX reduction with it.");
1142 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1143 "Invalid EReductionType value " << reductType <<
". Valid values "
1144 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1157template<
typename Ordinal>
1164template<
typename Ordinal>
1171template<
typename Ordinal>
1174 TEUCHOS_COMM_TIME_MONITOR(
1175 "Teuchos::CommHelpers: barrier<"
1183template<
typename Ordinal,
typename Packet>
1186 const int rootRank,
const Ordinal count, Packet buffer[]
1189 TEUCHOS_COMM_TIME_MONITOR(
1190 "Teuchos::CommHelpers: broadcast<"
1195 charBuffer(count,buffer);
1197 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1202template<
typename Ordinal,
typename Packet>
1213template<
typename Ordinal,
typename Packet>
1216 const int rootRank, Packet *
object
1223template<
typename Ordinal,
typename Packet>
1233template<
typename Ordinal,
typename Packet>
1236 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1239 TEUCHOS_COMM_TIME_MONITOR(
1240 "Teuchos::CommHelpers: broadcast<"
1242 <<
">( reference type )"
1245 charBuffer(serializer, count, buffer);
1252template<
typename Ordinal,
typename Packet>
1259 for (
int i = 0; i < buffer.size(); ++i) {
1260 bufferPtrArray.
push_back(buffer[i].getRawPtr());
1263 buffer.size(), bufferPtrArray.
getRawPtr());
1266template<
typename Ordinal,
typename Packet,
typename Serializer>
1270 const int rootRank,
const Ordinal count, Packet buffer[]
1273 TEUCHOS_COMM_TIME_MONITOR(
1274 "Teuchos::CommHelpers: broadcast<"
1279 charBuffer(count,buffer,
rcp(&serializer,
false));
1281 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1286template<
typename Ordinal,
typename Packet>
1289 const Ordinal sendCount,
const Packet sendBuffer[],
1290 const Ordinal recvCount, Packet recvBuffer[]
1293 TEUCHOS_COMM_TIME_MONITOR(
1294 "Teuchos::CommHelpers: gatherAll<"
1299 charSendBuffer(sendCount,sendBuffer);
1301 charRecvBuffer(recvCount,recvBuffer);
1303 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1304 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1308template<
typename Ordinal,
typename Packet>
1311 const Ordinal sendCount,
1313 const Ordinal recvCount,
1317 TEUCHOS_COMM_TIME_MONITOR(
1318 "Teuchos::CommHelpers: gather<"
1323 charSendBuffer (sendCount, sendBuf);
1325 charRecvBuffer (recvCount, recvBuf);
1326 comm.
gather (charSendBuffer.getBytes (),
1327 charSendBuffer.getCharBuffer (),
1328 charRecvBuffer.getBytes (),
1329 charRecvBuffer.getCharBuffer (),
1333template<
typename Ordinal,
typename Packet>
1336 const Ordinal sendCount,
1338 const Ordinal recvCounts[],
1339 const Ordinal displs[],
1364 "Teuchos::gatherv: The general case is not implemented.");
1367template<
typename Ordinal,
typename Packet>
1370 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1371 const Ordinal recvCount, Packet*
const recvBuffer[]
1377template<
typename Ordinal,
typename Packet,
typename Serializer>
1381 const Ordinal sendCount,
const Packet sendBuffer[],
1382 const Ordinal recvCount, Packet recvBuffer[]
1385 TEUCHOS_COMM_TIME_MONITOR(
1386 "Teuchos::CommHelpers: gatherAll<"
1391 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1393 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1395 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1396 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1401template<
typename Ordinal,
typename Packet>
1405 const Ordinal count,
1414 (
true, std::logic_error,
"Teuchos::reduce<" <<
1416 <<
">: Generic version not implemented. We only implement this function "
1417 "for Ordinal = int and Packet = specific types.");
1421template<
typename Ordinal,
typename Packet>
1424 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1427 TEUCHOS_COMM_TIME_MONITOR(
1428 "Teuchos::CommHelpers: reduceAll<"
1430 <<
">( value type, user-defined op )"
1433 charSendBuffer(count,sendBuffer);
1435 charGlobalReducts(count,globalReducts);
1437 charReductOp(
rcp(&reductOp,
false));
1439 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1440 ,charGlobalReducts.getCharBuffer()
1445template<
typename Ordinal,
typename Packet>
1448 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1451 TEUCHOS_COMM_TIME_MONITOR(
1452 "Teuchos::CommHelpers: reduceAll<"
1454 <<
">( value type, "<<toString(reductType)<<
" )"
1458 createOp<Ordinal, Packet> (reductType);
1460 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1462 catch (std::exception& e) {
1478#ifdef HAVE_TEUCHOS_COMPLEX
1481TEUCHOSCOMM_LIB_DLL_EXPORT
void
1483 const EReductionType reductType,
1485 const std::complex<double> sendBuffer[],
1486 std::complex<double> globalReducts[]);
1491 const int sourceRank);
1495 const int sourceRank,
1499TEUCHOSCOMM_LIB_DLL_EXPORT
void
1502 const std::complex<double> sendBuffer[],
1503 const int destRank);
1505TEUCHOSCOMM_LIB_DLL_EXPORT
void
1520TEUCHOSCOMM_LIB_DLL_EXPORT
void
1522 const EReductionType reductType,
1524 const std::complex<float> sendBuffer[],
1525 std::complex<float> globalReducts[]);
1530 const int sourceRank);
1534 const int sourceRank,
1538TEUCHOSCOMM_LIB_DLL_EXPORT
void
1541 const std::complex<float> sendBuffer[],
1542 const int destRank);
1544TEUCHOSCOMM_LIB_DLL_EXPORT
void
1561TEUCHOSCOMM_LIB_DLL_EXPORT
void
1563 const EReductionType reductType,
1565 const double sendBuffer[],
1566 double globalReducts[]);
1571 const int sourceRank);
1575 const int sourceRank,
1579TEUCHOSCOMM_LIB_DLL_EXPORT
void
1582 const double sendBuffer[],
1583 const int destRank);
1585TEUCHOSCOMM_LIB_DLL_EXPORT
void
1599TEUCHOSCOMM_LIB_DLL_EXPORT
void
1601 const int sendCount,
1603 const int recvCounts[],
1610TEUCHOSCOMM_LIB_DLL_EXPORT
void
1612 const EReductionType reductType,
1614 const float sendBuffer[],
1615 float globalReducts[]);
1620 const int sourceRank);
1624 const int sourceRank,
1628TEUCHOSCOMM_LIB_DLL_EXPORT
void
1631 const float sendBuffer[],
1632 const int destRank);
1634TEUCHOSCOMM_LIB_DLL_EXPORT
void
1648TEUCHOSCOMM_LIB_DLL_EXPORT
void
1650 const int sendCount,
1652 const int recvCounts[],
1659TEUCHOSCOMM_LIB_DLL_EXPORT
void
1661 const int sendCount,
1662 long long recvBuf[],
1663 const int recvCount,
1667TEUCHOSCOMM_LIB_DLL_EXPORT
void
1669 const int sendCount,
1670 long long recvBuf[],
1671 const int recvCounts[],
1676TEUCHOSCOMM_LIB_DLL_EXPORT
void
1678 const EReductionType reductType,
1680 const long long sendBuffer[],
1681 long long globalReducts[]);
1686 const int sourceRank);
1690 const int sourceRank,
1694TEUCHOSCOMM_LIB_DLL_EXPORT
void
1697 const long long sendBuffer[],
1698 const int destRank);
1700TEUCHOSCOMM_LIB_DLL_EXPORT
void
1715TEUCHOSCOMM_LIB_DLL_EXPORT
void
1717 const int sendCount,
1718 unsigned long long recvBuf[],
1719 const int recvCount,
1723TEUCHOSCOMM_LIB_DLL_EXPORT
void
1725 const int sendCount,
1726 unsigned long long recvBuf[],
1727 const int recvCounts[],
1732TEUCHOSCOMM_LIB_DLL_EXPORT
void
1734 const EReductionType reductType,
1736 const unsigned long long sendBuffer[],
1737 unsigned long long globalReducts[]);
1742 const int sourceRank);
1746 const int sourceRank,
1750TEUCHOSCOMM_LIB_DLL_EXPORT
void
1753 const unsigned long long sendBuffer[],
1754 const int destRank);
1756TEUCHOSCOMM_LIB_DLL_EXPORT
void
1771TEUCHOSCOMM_LIB_DLL_EXPORT
void
1773 const int sendCount,
1775 const int recvCount,
1779TEUCHOSCOMM_LIB_DLL_EXPORT
void
1781 const int sendCount,
1783 const int recvCounts[],
1788TEUCHOSCOMM_LIB_DLL_EXPORT
void
1790 const EReductionType reductType,
1792 const long sendBuffer[],
1793 long globalReducts[]);
1798 const int sourceRank);
1802 const int sourceRank,
1806TEUCHOSCOMM_LIB_DLL_EXPORT
void
1809 const long sendBuffer[],
1810 const int destRank);
1812TEUCHOSCOMM_LIB_DLL_EXPORT
void
1827TEUCHOSCOMM_LIB_DLL_EXPORT
void
1829 const int sendCount,
1830 unsigned long recvBuf[],
1831 const int recvCount,
1835TEUCHOSCOMM_LIB_DLL_EXPORT
void
1837 const int sendCount,
1838 unsigned long recvBuf[],
1839 const int recvCounts[],
1844TEUCHOSCOMM_LIB_DLL_EXPORT
void
1846 const EReductionType reductType,
1848 const unsigned long sendBuffer[],
1849 unsigned long globalReducts[]);
1854 const int sourceRank);
1858 const int sourceRank,
1862TEUCHOSCOMM_LIB_DLL_EXPORT
void
1865 const unsigned long sendBuffer[],
1866 const int destRank);
1868TEUCHOSCOMM_LIB_DLL_EXPORT
void
1883TEUCHOSCOMM_LIB_DLL_EXPORT
void
1885 const int sendCount,
1887 const int recvCount,
1891TEUCHOSCOMM_LIB_DLL_EXPORT
void
1893 const int sendCount,
1895 const int recvCounts[],
1900TEUCHOSCOMM_LIB_DLL_EXPORT
void
1901scatter (
const int sendBuf[],
1902 const int sendCount,
1904 const int recvCount,
1908TEUCHOSCOMM_LIB_DLL_EXPORT
void
1909scatterv (
const double sendBuf[],
1910 const int sendCounts[],
1913 const int recvCount,
1917TEUCHOSCOMM_LIB_DLL_EXPORT
void
1918scatterv (
const float sendBuf[],
1919 const int sendCounts[],
1922 const int recvCount,
1926TEUCHOSCOMM_LIB_DLL_EXPORT
void
1930 const EReductionType reductType,
1934TEUCHOSCOMM_LIB_DLL_EXPORT
void
1938 const EReductionType reductType,
1942TEUCHOSCOMM_LIB_DLL_EXPORT
void
1944 unsigned long recvBuf[],
1946 const EReductionType reductType,
1950TEUCHOSCOMM_LIB_DLL_EXPORT
void
1952 unsigned long long recvBuf[],
1954 const EReductionType reductType,
1958TEUCHOSCOMM_LIB_DLL_EXPORT
void
1962 const EReductionType reductType,
1966TEUCHOSCOMM_LIB_DLL_EXPORT
void
1968 const EReductionType reductType,
1970 const int sendBuffer[],
1971 int globalReducts[]);
1977 const int sourceRank);
1981 const int sourceRank,
1985TEUCHOSCOMM_LIB_DLL_EXPORT
void
1988 const int sendBuffer[],
1989 const int destRank);
1991TEUCHOSCOMM_LIB_DLL_EXPORT
void
2006TEUCHOSCOMM_LIB_DLL_EXPORT
void
2008 const int sendCount,
2009 unsigned int recvBuf[],
2010 const int recvCount,
2014TEUCHOSCOMM_LIB_DLL_EXPORT
void
2016 const int sendCount,
2017 unsigned int recvBuf[],
2018 const int recvCounts[],
2023TEUCHOSCOMM_LIB_DLL_EXPORT
void
2025 const EReductionType reductType,
2027 const unsigned int sendBuffer[],
2028 unsigned int globalReducts[]);
2033 const int sourceRank);
2037 const int sourceRank,
2041TEUCHOSCOMM_LIB_DLL_EXPORT
void
2044 const unsigned int sendBuffer[],
2045 const int destRank);
2047TEUCHOSCOMM_LIB_DLL_EXPORT
void
2062TEUCHOSCOMM_LIB_DLL_EXPORT
void
2064 const int sendCount,
2066 const int recvCount,
2070TEUCHOSCOMM_LIB_DLL_EXPORT
void
2072 const int sendCount,
2074 const int recvCounts[],
2079TEUCHOSCOMM_LIB_DLL_EXPORT
void
2081 const EReductionType reductType,
2083 const short sendBuffer[],
2084 short globalReducts[]);
2089 const int sourceRank);
2093 const int sourceRank,
2097TEUCHOSCOMM_LIB_DLL_EXPORT
void
2100 const short sendBuffer[],
2101 const int destRank);
2103TEUCHOSCOMM_LIB_DLL_EXPORT
void
2127TEUCHOSCOMM_LIB_DLL_EXPORT
void
2129 const EReductionType reductType,
2131 const char sendBuffer[],
2132 char globalReducts[]);
2137template<
typename Ordinal,
typename Packet>
2149template<
typename Ordinal,
typename Packet>
2153 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2156 TEUCHOS_COMM_TIME_MONITOR(
2157 "Teuchos::CommHelpers: reduceAll<"
2159 <<
">( reference type )"
2162 charSendBuffer(serializer,count,sendBuffer);
2164 charGlobalReducts(serializer,count,globalReducts);
2166 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2173template<
typename Ordinal,
typename Packet,
typename Serializer>
2178 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2181 TEUCHOS_COMM_TIME_MONITOR(
2182 "Teuchos::CommHelpers: reduceAll<"
2184 <<
">( value type, user-defined op )"
2187 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2189 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2191 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2193 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2194 ,charGlobalReducts.getCharBuffer()
2199template<
typename Ordinal,
typename Packet,
typename Serializer>
2204 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2207 TEUCHOS_COMM_TIME_MONITOR(
2208 "Teuchos::CommHelpers: reduceAll<"
2210 <<
">( value type, "<<toString(reductType)<<
" )"
2214 createOp<Ordinal, Packet> (reductType);
2216 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2218 catch (std::exception& e) {
2226template<
typename Ordinal,
typename Packet>
2229 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2232 TEUCHOS_COMM_TIME_MONITOR(
2233 "Teuchos::CommHelpers: scan<"
2235 <<
">( value type, user-defined op )"
2238 charSendBuffer(count,sendBuffer);
2240 charScanReducts(count,scanReducts);
2242 charReductOp(
rcp(&reductOp,
false));
2244 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2245 ,charScanReducts.getCharBuffer()
2250template<
typename Ordinal,
typename Packet>
2253 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2256 TEUCHOS_COMM_TIME_MONITOR(
2257 "Teuchos::CommHelpers: scan<"
2259 <<
">( value type, "<<toString(reductType)<<
" )"
2263 createOp<Ordinal, Packet> (reductType);
2265 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2267 catch (std::exception& e) {
2275template<
typename Ordinal,
typename Packet>
2285template<
typename Ordinal,
typename Packet>
2289 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2295template<
typename Ordinal,
typename Packet,
typename Serializer>
2300 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2303 TEUCHOS_COMM_TIME_MONITOR(
2304 "Teuchos::CommHelpers: scan<"
2306 <<
">( value type, user-defined op )"
2309 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2311 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2313 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2315 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2316 ,charScanReducts.getCharBuffer()
2321template<
typename Ordinal,
typename Packet,
typename Serializer>
2326 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2329 TEUCHOS_COMM_TIME_MONITOR(
2330 "Teuchos::CommHelpers: scan<"
2332 <<
">( value type, "<<toString(reductType)<<
" )"
2336 createOp<Ordinal, Packet> (reductType);
2338 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2340 catch (std::exception& e) {
2347template<
typename Ordinal,
typename Packet>
2350 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2353 TEUCHOS_COMM_TIME_MONITOR(
2354 "Teuchos::CommHelpers: send<"
2359 charSendBuffer(count,sendBuffer);
2361 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2366template<
typename Ordinal,
typename Packet>
2369 const Ordinal count,
2374 TEUCHOS_COMM_TIME_MONITOR(
2375 "Teuchos::CommHelpers: send<"
2380 comm.
send (charSendBuffer.getBytes (), charSendBuffer.getCharBuffer (), destRank, tag);
2383template<
typename Ordinal,
typename Packet>
2386 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2389 TEUCHOS_COMM_TIME_MONITOR(
2390 "Teuchos::CommHelpers: ssend<"
2395 charSendBuffer(count,sendBuffer);
2397 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2402template<
typename Ordinal,
typename Packet>
2405 const Ordinal count,
2410 TEUCHOS_COMM_TIME_MONITOR(
2411 "Teuchos::CommHelpers: ssend<"
2416 buf_type charSendBuffer (count, sendBuffer);
2417 comm.
ssend (charSendBuffer.getBytes (),
2418 charSendBuffer.getCharBuffer (),
2422template<
typename Ordinal,
typename Packet>
2425 const Packet &
send,
const int destRank
2431template<
typename Ordinal,
typename Packet>
2434 const Packet &
send,
const int destRank
2440template<
typename Ordinal,
typename Packet>
2443 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2449template<
typename Ordinal,
typename Packet,
typename Serializer>
2453 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2456 TEUCHOS_COMM_TIME_MONITOR(
2457 "Teuchos::CommHelpers: send<"
2462 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2464 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2469template<
typename Ordinal,
typename Packet>
2472 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2475 TEUCHOS_COMM_TIME_MONITOR(
2476 "Teuchos::CommHelpers: receive<"
2481 charRecvBuffer(count,recvBuffer);
2484 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2489template<
typename Ordinal,
typename Packet>
2492 const int sourceRank, Packet *recv
2499template<
typename Ordinal,
typename Packet>
2502 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2508template<
typename Ordinal,
typename Packet,
typename Serializer>
2512 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2515 TEUCHOS_COMM_TIME_MONITOR(
2516 "Teuchos::CommHelpers: receive<"
2521 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2524 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2528template<
typename Ordinal,
typename Packet>
2535 TEUCHOS_COMM_TIME_MONITOR(
2536 "Teuchos::CommHelpers: readySend<"
2542 comm.
readySend( charSendBuffer.getCharBufferView(), destRank );
2545template<
typename Ordinal,
typename Packet>
2548 const Ordinal count,
2553 TEUCHOS_COMM_TIME_MONITOR(
2554 "Teuchos::CommHelpers: readySend<"
2559 buf_type charSendBuffer (count, sendBuffer);
2560 comm.
readySend (charSendBuffer.getBytes (),
2561 charSendBuffer.getCharBuffer (),
2565template<
typename Ordinal,
typename Packet>
2575template<
typename Ordinal,
typename Packet,
typename Serializer>
2583 TEUCHOS_COMM_TIME_MONITOR(
2584 "Teuchos::CommHelpers: readySend<"
2589 charSendBuffer(sendBuffer.
size(), sendBuffer.
getRawPtr(), serializer);
2590 comm.
readySend( charSendBuffer.getCharBufferView(), destRank );
2593template<
typename Ordinal,
typename Packet>
2601 TEUCHOS_COMM_TIME_MONITOR(
2602 "Teuchos::CommHelpers: isend<"
2609 charSendBuffer.getCharBufferView(), destRank );
2614template<
typename Ordinal,
typename Packet>
2616Teuchos::isend (
const ArrayRCP<const Packet> &sendBuffer,
2619 const Comm<Ordinal>& comm)
2621 TEUCHOS_COMM_TIME_MONITOR(
2622 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2623 << TypeNameTraits<Packet>::name () <<
">");
2624 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2625 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2626 RCP<CommRequest<Ordinal> > commRequest =
2627 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2628 set_extra_data (sendBuffer,
"buffer", inOutArg (commRequest));
2632template<
typename Ordinal,
typename Packet>
2635 const Comm<Ordinal>& comm,
2636 const RCP<const Packet> &send,
2640 const ArrayRCP<const Packet> sendBuffer =
2644 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2647template<
typename Ordinal,
typename Packet,
typename Serializer>
2650 const Comm<Ordinal>& comm,
2651 const Serializer& serializer,
2652 const ArrayRCP<const Packet> &sendBuffer,
2656 TEUCHOS_COMM_TIME_MONITOR(
2657 "Teuchos::CommHelpers: isend<"
2658 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2661 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2662 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2663 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2664 charSendBuffer.getCharBufferView(), destRank );
2669template<
typename Ordinal,
typename Packet>
2672 const Comm<Ordinal>& comm,
2673 const ArrayRCP<Packet> &recvBuffer,
2674 const int sourceRank
2677 TEUCHOS_COMM_TIME_MONITOR(
2678 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2679 ValueTypeSerializationBuffer<Ordinal,Packet>
2680 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2681 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2682 charRecvBuffer.getCharBufferView(), sourceRank );
2687template<
typename Ordinal,
typename Packet>
2690 const int sourceRank,
2694 TEUCHOS_COMM_TIME_MONITOR(
2695 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2696 ValueTypeSerializationBuffer<int, Packet>
2697 charRecvBuffer (recvBuffer.
size (), recvBuffer.
getRawPtr ());
2698 RCP<CommRequest<int> > commRequest =
2699 comm.
ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2704template<
typename Ordinal,
typename Packet>
2707 const Comm<Ordinal>& comm,
2708 const RCP<Packet> &recv,
2709 const int sourceRank
2712 const ArrayRCP<Packet> recvBuffer =
2716 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2719template<
typename Ordinal,
typename Packet,
typename Serializer>
2722 const Comm<Ordinal>& comm,
2723 const Serializer& serializer,
2724 const ArrayRCP<Packet> &recvBuffer,
2725 const int sourceRank
2728 TEUCHOS_COMM_TIME_MONITOR(
2729 "Teuchos::CommHelpers: ireceive<"
2730 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2733 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2734 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2735 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2736 charRecvBuffer.getCharBufferView(), sourceRank );
2741template<
typename Ordinal>
2751template<
typename Ordinal>
2757 comm.
waitAll (requests, statuses);
2761template<
typename Ordinal>
2766 return comm.
wait (request);
Templated array class derived from the STL std::vector.
Implementation of Teuchos wrappers for MPI.
Declaration of Teuchos::EReductionType enum, and related functions.
Defines basic traits for the ordinal field type.
Defines basic traits for the scalar field type.
Defines basic traits returning the name of a type in a portable and readable way.
Definition of Teuchos::as, for conversions between types.
Standard logical AND operator for booleans.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Reference-counted smart pointer for managing arrays.
void set_extra_data(const T1 &extra_data, const std::string &name, const Ptr< ArrayRCP< T2 > > &p, EPrePostDestruction destroy_when=POST_DESTROY, bool force_unique=true)
Set extra data associated with a ArrayRCP object.
size_type size() const
The total number of entries in the array.
ArrayRCP< T > arcpWithEmbeddedObj(T *p, typename ArrayRCP< T >::size_type lowerOffset, typename ArrayRCP< T >::size_type size, const Embedded &embedded, bool owns_mem=true)
Create an ArrayRCP with and also put in an embedded object.
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
size_type size() const
The total number of items in the managed array.
T * getRawPtr() const
Return a raw pointer to beginning of array or NULL if unsized.
ArrayView< T > arrayView(T *p, typename ArrayView< T >::size_type size)
Construct a const or non-const view to const or non-const data.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
T * getRawPtr()
Return a raw pointer to beginning of array or NULL if unsized.
void push_back(const value_type &x)
Decorator class that uses a strategy object to convert to and from char[] to typed buffers for object...
Decorator class that uses traits to convert to and from char[] to typed buffers for objects that use ...
Encapsulation of a pending nonblocking communication operation.
Encapsulation of the result of a receive (blocking or nonblocking).
Abstract interface for distributed-memory communication.
virtual void broadcast(const int rootRank, const Ordinal bytes, char buffer[]) const =0
Broadcast values from the root process to the slave processes.
void ssend(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Synchronously send a single object that use values semantics to another process.
virtual void gather(const Ordinal sendBytes, const char sendBuffer[], const Ordinal recvBytes, char recvBuffer[], const int root) const =0
Gather values from all processes to the root process.
RCP< CommRequest< Ordinal > > ireceive(const Comm< Ordinal > &comm, const ArrayRCP< Packet > &recvBuffer, const int sourceRank)
Receive one or more objects (that use values semantics) from another process.
void scan(const Comm< Ordinal > &comm, const Serializer &serializer, const ValueTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet sendBuffer[], Packet scanReducts[])
Scan/Reduce array of objects that use value semantics using a user-defined reduction operator and cus...
virtual void waitAll(const ArrayView< RCP< CommRequest< Ordinal > > > &requests) const =0
Wait on a set of communication requests.
void broadcast(const Comm< Ordinal > &comm, const Serializer< Ordinal, Packet > &serializer, const int rootRank, const Ordinal count, Packet *const buffer[])
Broadcast array of objects that use reference semantics.
int receive(const Comm< Ordinal > &comm, const int sourceRank, const Ordinal count, Packet recvBuffer[])
Receive objects that use values semantics from another process.
virtual void readySend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Ready send of data from this process to another process.
void scan(const Comm< Ordinal > &comm, const EReductionType reductType, const Packet &send, const Ptr< Packet > &scanReduct)
Scan/Reduce single object using value semantics using a predefined reduction type.
virtual RCP< CommRequest< Ordinal > > ireceive(const ArrayView< char > &recvBuffer, const int sourceRank) const =0
Non-blocking receive.
virtual void reduceAll(const ValueTypeReductionOp< Ordinal, char > &reductOp, const Ordinal bytes, const char sendBuffer[], char globalReducts[]) const =0
Global reduction.
void send(const Comm< Ordinal > &comm, const Serializer &serializer, const Ordinal count, const Packet sendBuffer[], const int destRank)
Send objects that use values semantics to another process using customized serializer.
void send(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Send a single object that use values semantics to another process.
virtual int getSize() const =0
Returns the number of processes that make up this communicator.
void reduceAll(const Comm< Ordinal > &comm, const EReductionType reductType, const Ordinal count, const Packet sendBuffer[], Packet globalReducts[])
Collective reduce all of array of objects using value semantics using a pre-defined reduction type.
virtual void gatherAll(const Ordinal sendBytes, const char sendBuffer[], const Ordinal recvBytes, char recvBuffer[]) const =0
Gather values from each process to collect on all processes.
void readySend(const Comm< Ordinal > &comm, const ArrayView< const Packet > &sendBuffer, const int destRank)
Ready-Send an array of objects that use values semantics to another process.
virtual void send(const Ordinal bytes, const char sendBuffer[], const int destRank) const =0
Possibly blocking send of data from this process to another process.
void reduce(const Packet sendBuf[], Packet recvBuf[], const Ordinal count, const EReductionType reductType, const Ordinal root, const Comm< Ordinal > &comm)
Wrapper for MPI_Reduce; reduction to one process, using a built-in reduction operator selected by enu...
virtual RCP< CommStatus< Ordinal > > wait(const Ptr< RCP< CommRequest< Ordinal > > > &request) const =0
Wait on a single communication request, and return its status.
virtual void scan(const ValueTypeReductionOp< Ordinal, char > &reductOp, const Ordinal bytes, const char sendBuffer[], char scanReducts[]) const =0
Scan reduction.
int rank(const Comm< Ordinal > &comm)
Get the process rank.
void readySend(const Comm< Ordinal > &comm, const Serializer &serializer, const ArrayView< const Packet > &sendBuffer, const int destRank)
Ready-Send an array of objects that use values semantics to another process using customized serializ...
int receive(const Comm< Ordinal > &comm, const int sourceRank, Packet *recv)
Receive a single object that use values semantics from another process.
RCP< CommStatus< Ordinal > > wait(const Comm< Ordinal > &comm, const Ptr< RCP< CommRequest< Ordinal > > > &request)
Wait on a single communication request, and return its status.
void broadcast(const Comm< Ordinal > &comm, const int rootRank, const ArrayView< Packet > &buffer)
Broadcast array of objects that use value semantics.
void gather(const Packet sendBuf[], const Ordinal sendCount, Packet recvBuf[], const Ordinal recvCount, const int root, const Comm< Ordinal > &comm)
Gather values from each process to the root process.
virtual int receive(const int sourceRank, const Ordinal bytes, char recvBuffer[]) const =0
Blocking receive of data from this process to another process.
void scatter(const Packet sendBuf[], const Ordinal sendCount, Packet recvBuf[], const Ordinal recvCount, const Ordinal root, const Comm< Ordinal > &comm)
Wrapper for MPI_Scatter; scatter collective.
void broadcast(const Comm< Ordinal > &comm, const Serializer< Ordinal, Packet > &serializer, const int rootRank, const ArrayView< const Ptr< Packet > > &buffer)
Broadcast array of objects that use reference semantics.
virtual void ssend(const Ordinal bytes, const char sendBuffer[], const int destRank) const =0
Always blocking send of data from this process to another process.
RCP< CommRequest< Ordinal > > ireceive(const Comm< Ordinal > &comm, const RCP< Packet > &recv, const int sourceRank)
Receive one object (that uses values semantics) from another process.
void reduceAll(const Comm< Ordinal > &comm, const Serializer< Ordinal, Packet > &serializer, const ReferenceTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet *const sendBuffer[], Packet *const globalReducts[])
Collective reduce all for array of objects using reference semantics.
void waitAll(const Comm< Ordinal > &comm, const ArrayView< RCP< CommRequest< Ordinal > > > &requests, const ArrayView< RCP< CommStatus< Ordinal > > > &statuses)
Wait on one or more communication requests, and return their statuses.
void scan(const Comm< Ordinal > &comm, const Serializer &serializer, const EReductionType reductType, const Ordinal count, const Packet sendBuffer[], Packet scanReducts[])
Scan/Reduce array of objects using value semantics using a predefined reduction type and customized s...
virtual int getRank() const =0
Returns the rank of this process.
void scan(const Comm< Ordinal > &comm, const Serializer< Ordinal, Packet > &serializer, const ReferenceTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet *const sendBuffer[], Packet *const scanReducts[])
Scan/Reduce array of objects that use reference semantics using a user-defined reduction operator.
void gatherv(const Packet sendBuf[], const Ordinal sendCount, Packet recvBuf[], const Ordinal recvCounts[], const Ordinal displs[], const int root, const Comm< Ordinal > &comm)
Gather arrays of possibly different lengths from each process to the root process.
RCP< CommRequest< Ordinal > > isend(const Comm< Ordinal > &comm, const Serializer &serializer, const ArrayRCP< const Packet > &sendBuffer, const int destRank)
Send objects that use values semantics to another process using customized serializer.
void broadcast(const Comm< Ordinal > &comm, const int rootRank, const Ptr< Packet > &object)
Broadcast single object that use value semantics.
RCP< CommRequest< Ordinal > > isend(const Comm< Ordinal > &comm, const RCP< const Packet > &send, const int destRank)
Send a single object that use values semantics to another process.
RCP< CommRequest< Ordinal > > isend(const Comm< Ordinal > &comm, const ArrayRCP< const Packet > &sendBuffer, const int destRank)
Send objects that use values semantics to another process.
void gatherAll(const Comm< Ordinal > &comm, const Serializer< Ordinal, Packet > &serializer, const Ordinal sendCount, const Packet *const sendBuffer[], const Ordinal recvCount, Packet *const recvBuffer[])
Gather array of objects that use reference semantics from every process to every process.
void gatherAll(const Comm< Ordinal > &comm, const Ordinal sendCount, const Packet sendBuffer[], const Ordinal recvCount, Packet recvBuffer[])
Gather array of objects that use value semantics from every process to every process.
void readySend(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Ready-Send a single object that use values semantics to another process.
void gatherAll(const Comm< Ordinal > &comm, const Serializer &serializer, const Ordinal sendCount, const Packet sendBuffer[], const Ordinal recvCount, Packet recvBuffer[])
Gather array of objects that use value semantics from every process to every process using customized...
void ssend(const Comm< Ordinal > &comm, const Ordinal count, const Packet sendBuffer[], const int destRank)
Synchronously send objects that use values semantics to another process.
RCP< CommRequest< Ordinal > > ireceive(const Comm< Ordinal > &comm, const Serializer &serializer, const ArrayRCP< Packet > &recvBuffer, const int sourceRank)
Send objects that use values semantics to another process using customized serializer.
void scan(const Comm< Ordinal > &comm, const ValueTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet sendBuffer[], Packet scanReducts[])
Scan/Reduce array of objects that use value semantics using a user-defined reduction operator.
void reduceAll(const Comm< Ordinal > &comm, const Serializer &serializer, const ValueTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet sendBuffer[], Packet globalReducts[])
Collective reduce all of array of objects using value semantics using a user-defined reduction operat...
virtual void barrier() const =0
Pause every process in *this communicator until all the processes reach this point.
void broadcast(const Comm< Ordinal > &comm, const int rootRank, Packet *object)
Broadcast single object that use value semantics.
int receive(const Comm< Ordinal > &comm, const Serializer< Ordinal, Packet > &serializer, const int sourceRank, const Ordinal count, Packet *const recvBuffer[])
Receive objects that use reference semantics from another process.
void reduceAll(const Comm< Ordinal > &comm, const EReductionType reductType, const Packet &send, const Ptr< Packet > &globalReduct)
Collective reduce all for single object using value semantics using a pre-defined reduction type.
void send(const Comm< Ordinal > &comm, const Serializer< Ordinal, Packet > &serializer, const Ordinal count, const Packet *const sendBuffer[], const int destRank)
Send objects that use reference semantics to another process.
void scan(const Comm< Ordinal > &comm, const EReductionType reductType, const Ordinal count, const Packet sendBuffer[], Packet scanReducts[])
Scan/Reduce array of objects using value semantics using a predefined reduction type.
void broadcast(const Comm< Ordinal > &comm, const Serializer &serializer, const int rootRank, const Ordinal count, Packet buffer[])
Broadcast array of objects that use value semantics using customized serializer.
void send(const Comm< OrdinalType > &comm, const OrdinalType count, const Packet sendBuffer[], const int destRank)
void broadcast(const Comm< Ordinal > &comm, const int rootRank, const Ordinal count, Packet buffer[])
Broadcast array of objects that use value semantics.
int size(const Comm< Ordinal > &comm)
Get the number of processes in the communicator.
virtual RCP< CommRequest< Ordinal > > isend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Non-blocking send.
void reduceAll(const Comm< Ordinal > &comm, const ValueTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet sendBuffer[], Packet globalReducts[])
Wrapper for MPI_Allreduce that takes a custom reduction operator.
int receive(const Comm< Ordinal > &comm, const Serializer &serializer, const int sourceRank, const Ordinal count, Packet recvBuffer[])
Receive objects that use values semantics from another process using customized serializer.
void reduceAll(const Comm< Ordinal > &comm, const Serializer &serializer, const EReductionType reductType, const Ordinal count, const Packet sendBuffer[], Packet globalReducts[])
Collective reduce all of array of objects using value semantics using a pre-defined reduction type an...
void waitAll(const Comm< Ordinal > &comm, const ArrayView< RCP< CommRequest< Ordinal > > > &requests)
Wait for an array of Teuchos::CommRequest objects.
void barrier(const Comm< Ordinal > &comm)
Barrier.
Encapsulate how an array of const objects with reference sematics is serialized into a char[] array.
const char * getCharBuffer() const
Encapsulate how an array of const objects with value sematics is serialized into a const char[] array...
Standard Max operator for types with value semantics.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Standard min operator for types with value semantics.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Ptr< T > inOutArg(T &arg)
create a non-persisting (required or optional) input/output argument for a function call.
Smart reference counting pointer class for automatic garbage collection.
Base interface class for user-defined reduction operations for objects that use reference semantics.
Encapsulate how an array of non-const objects with reference sematics is serialized into a char[] arr...
char * getCharBuffer() const
Strategy interface for the indirect serializing and deserializing objects of a given type handled usi...
Standard summation operator for types with value semantics.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
static std::string name()
Base interface class for user-defined reduction operations for objects that use value semantics.
Encapsulate how an array of non-const objects with value sematics is serialized into a char[] array.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
void ssend(const Packet sendBuffer[], const Ordinal count, const int destRank, const int tag, const Comm< Ordinal > &comm)
Variant of ssend() that takes a tag (and restores the correct order of arguments).
void readySend(const Packet sendBuffer[], const Ordinal count, const int destRank, const int tag, const Comm< Ordinal > &comm)
Variant of readySend() that accepts a message tag.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
RCP< CommRequest< Ordinal > > ireceive(const ArrayRCP< Packet > &recvBuffer, const int sourceRank, const int tag, const Comm< Ordinal > &comm)
Variant of ireceive that takes a tag argument (and restores the correct order of arguments).
void send(const Packet sendBuffer[], const Ordinal count, const int destRank, const int tag, const Comm< Ordinal > &comm)
Variant of send() that takes a tag (and restores the correct order of arguments).
static std::string name()
Returns name of this ordinal type.