42#ifndef TEUCHOS_COMM_HELPERS_HPP
43#define TEUCHOS_COMM_HELPERS_HPP
45#include "Teuchos_Comm.hpp"
46#include "Teuchos_CommUtilities.hpp"
47#include "Teuchos_SerializationTraitsHelpers.hpp"
48#include "Teuchos_ReductionOpHelpers.hpp"
49#include "Teuchos_SerializerHelpers.hpp"
54#include "Teuchos_Workspace.hpp"
57#ifdef HAVE_TEUCHOS_MPI
60#include "Teuchos_DefaultSerialComm.hpp"
69#ifdef HAVE_TEUCHOS_MPI
78std::string getMpiErrorString (
const int errCode);
87template<
typename Ordinal>
94template<
typename Ordinal>
101template<
typename Ordinal>
108template<
typename Ordinal,
typename Packet>
112 const Ordinal count, Packet buffer[]
119template<
typename Ordinal,
typename Packet>
130template<
typename Ordinal,
typename Packet>
133 const int rootRank, Packet *
object
140template<
typename Ordinal,
typename Packet>
150template<
typename Ordinal,
typename Packet>
153 const int rootRank,
const Ordinal count, Packet*
const buffer[]
160template<
typename Ordinal,
typename Packet>
171template<
typename Ordinal,
typename Packet,
typename Serializer>
176 const Ordinal count, Packet buffer[]
183template<
typename Ordinal,
typename Packet>
186 const Ordinal sendCount,
188 const Ordinal recvCount,
196template<
typename Ordinal,
typename Packet>
199 const Ordinal sendCount,
201 const Ordinal recvCounts[],
202 const Ordinal displs[],
211template<
typename Ordinal,
typename Packet>
214 const Ordinal sendCount,
const Packet sendBuffer[],
215 const Ordinal recvCount, Packet recvBuffer[]
223template<
typename Ordinal,
typename Packet>
226 const Ordinal sendCount,
const Packet*
const sendBuffer[],
227 const Ordinal recvCount, Packet*
const recvBuffer[]
235template<
typename Ordinal,
typename Packet,
typename Serializer>
239 const Ordinal sendCount,
const Packet sendBuffer[],
240 const Ordinal recvCount, Packet recvBuffer[]
269template<
typename Ordinal,
typename Packet>
272 const Ordinal sendCount,
274 const Ordinal recvCount,
282 (
true, std::logic_error,
"Teuchos::scatter<" <<
284 <<
">: Generic version is not yet implemented. This function currently "
285 "only has an implementtion for Ordinal = int and Packet = int. "
286 "See Bug 6375 and Bug 6336.");
316template<
typename Ordinal,
typename Packet>
347template<
typename Ordinal,
typename Packet>
350 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
358template<
typename Ordinal,
typename Packet>
361 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
369template<
typename Ordinal,
typename Packet>
380template<
typename Ordinal,
typename Packet>
384 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
392template<
typename Ordinal,
typename Packet,
typename Serializer>
397 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
405template<
typename Ordinal,
typename Packet,
typename Serializer>
410 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
418template<
typename Ordinal,
typename Packet>
421 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
429template<
typename Ordinal,
typename Packet>
432 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
440template<
typename Ordinal,
typename Packet>
451template<
typename Ordinal,
typename Packet>
455 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
463template<
typename Ordinal,
typename Packet,
typename Serializer>
468 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
476template<
typename Ordinal,
typename Packet,
typename Serializer>
481 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
488template<
typename Ordinal,
typename Packet>
491 const Ordinal count,
const Packet sendBuffer[],
const int destRank
495template<
typename Ordinal,
typename Packet>
497send (
const Packet sendBuffer[],
507template<
typename Ordinal,
typename Packet>
510 const Ordinal count,
const Packet sendBuffer[],
const int destRank
514template<
typename Ordinal,
typename Packet>
516ssend (
const Packet sendBuffer[],
526template<
typename Ordinal,
typename Packet>
529 const Packet &
send,
const int destRank
536template<
typename Ordinal,
typename Packet>
539 const Packet &
send,
const int destRank
548template<
typename Ordinal,
typename Packet>
551 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
559template<
typename Ordinal,
typename Packet,
typename Serializer>
563 const Ordinal count,
const Packet sendBuffer[],
const int destRank
570template<
typename Ordinal,
typename Packet>
573 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
580template<
typename Ordinal,
typename Packet>
583 const int sourceRank, Packet *recv
590template<
typename Ordinal,
typename Packet>
593 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
601template<
typename Ordinal,
typename Packet,
typename Serializer>
605 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
613template<
typename Ordinal,
typename Packet>
621template<
typename Ordinal,
typename Packet>
633template<
typename Ordinal,
typename Packet>
645template<
typename Ordinal,
typename Packet,
typename Serializer>
657template<
typename Ordinal,
typename Packet>
665template<
typename Ordinal,
typename Packet>
676template<
typename Ordinal,
typename Packet>
688template<
typename Ordinal,
typename Packet,
typename Serializer>
709template<
typename Ordinal,
typename Packet>
717template<
typename Ordinal,
typename Packet>
720 const int sourceRank,
735template<
typename Ordinal,
typename Packet>
747template<
typename Ordinal,
typename Packet,
typename Serializer>
766template<
typename Ordinal>
801template<
typename Ordinal>
830template<
typename Ordinal>
843template<
typename Ordinal,
typename Packet>
850 const Packet inBuffer[],
864template<
typename Ordinal,
typename Packet>
871 const Packet inBuffer[],
885template<
typename Ordinal,
typename Packet>
892 const Packet inBuffer[],
902template<
typename Ordinal,
typename Packet>
909 const Packet inBuffer[],
924namespace MixMaxUtilities {
927template<
bool isComparable,
typename Ordinal,
typename Packet>
931template<
typename Ordinal,
typename Packet>
932class Min<true,Ordinal,Packet> {
936 const Packet inBuffer[],
940 for(
int i = 0; i < count; ++i )
941 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
946template<
typename Ordinal,
typename Packet>
947class Min<false,Ordinal,Packet> {
956 true,std::logic_error,
958 <<
" does not support comparison operations!"
964template<
bool isComparable,
typename Ordinal,
typename Packet>
968template<
typename Ordinal,
typename Packet>
969class Max<true,Ordinal,Packet> {
973 const Packet inBuffer[],
977 for(
int i = 0; i < count; ++i )
978 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
983template<
typename Ordinal,
typename Packet>
984class Max<false,Ordinal,Packet> {
993 true,std::logic_error,
995 <<
" does not support comparison operations!"
1001template<
bool isComparable,
typename Ordinal,
typename Packet>
1005template<
typename Ordinal,
typename Packet>
1006class AND<true,Ordinal,Packet> {
1009 const Ordinal count,
1010 const Packet inBuffer[],
1011 Packet inoutBuffer[]
1014 for(
int i = 0; i < count; ++i )
1015 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1020template<
typename Ordinal,
typename Packet>
1021class AND<false,Ordinal,Packet> {
1030 true,std::logic_error,
1032 <<
" does not support logical AND operations!"
1041template<
typename Ordinal,
typename Packet>
1043 const Ordinal count,
1044 const Packet inBuffer[],
1045 Packet inoutBuffer[]
1048 for(
int i = 0; i < count; ++i )
1049 inoutBuffer[i] += inBuffer[i];
1053template<
typename Ordinal,
typename Packet>
1055 const Ordinal count,
1056 const Packet inBuffer[],
1057 Packet inoutBuffer[]
1060 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal, Packet> min_type;
1061 min_type::min (count, inBuffer, inoutBuffer);
1065template<
typename Ordinal,
typename Packet>
1067 const Ordinal count,
1068 const Packet inBuffer[],
1069 Packet inoutBuffer[]
1072 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal, Packet> max_type;
1073 max_type::max (count,inBuffer,inoutBuffer);
1077template<
typename Ordinal,
typename Packet>
1079 const Ordinal count,
1080 const Packet inBuffer[],
1081 Packet inoutBuffer[]
1084 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal, Packet> and_type;
1085 and_type::andOp (count, inBuffer, inoutBuffer);
1115template<
typename Ordinal,
typename Packet>
1116ValueTypeReductionOp<Ordinal,Packet>*
1117createOp (
const EReductionType reductType)
1119 typedef ScalarTraits<Packet> ST;
1120 switch (reductType) {
1122 return new SumValueReductionOp<Ordinal,Packet> ();
1125 if (ST::isComparable) {
1130 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1132 <<
" is not less-than comparable, so it does not make sense to do a "
1133 "MIN reduction with it.");
1137 if (ST::isComparable) {
1142 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1144 <<
" is not less-than comparable, so it does not make sense to do a "
1145 "MAX reduction with it.");
1153 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1154 "Invalid EReductionType value " << reductType <<
". Valid values "
1155 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1168template<
typename Ordinal>
1175template<
typename Ordinal>
1182template<
typename Ordinal>
1185 TEUCHOS_COMM_TIME_MONITOR(
1186 "Teuchos::CommHelpers: barrier<"
1194template<
typename Ordinal,
typename Packet>
1197 const int rootRank,
const Ordinal count, Packet buffer[]
1200 TEUCHOS_COMM_TIME_MONITOR(
1201 "Teuchos::CommHelpers: broadcast<"
1206 charBuffer(count,buffer);
1208 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1213template<
typename Ordinal,
typename Packet>
1224template<
typename Ordinal,
typename Packet>
1227 const int rootRank, Packet *
object
1234template<
typename Ordinal,
typename Packet>
1244template<
typename Ordinal,
typename Packet>
1247 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1250 TEUCHOS_COMM_TIME_MONITOR(
1251 "Teuchos::CommHelpers: broadcast<"
1253 <<
">( reference type )"
1256 charBuffer(serializer, count, buffer);
1263template<
typename Ordinal,
typename Packet>
1270 for (
int i = 0; i < buffer.size(); ++i) {
1271 bufferPtrArray.
push_back(buffer[i].getRawPtr());
1274 buffer.size(), bufferPtrArray.
getRawPtr());
1277template<
typename Ordinal,
typename Packet,
typename Serializer>
1281 const int rootRank,
const Ordinal count, Packet buffer[]
1284 TEUCHOS_COMM_TIME_MONITOR(
1285 "Teuchos::CommHelpers: broadcast<"
1290 charBuffer(count,buffer,
rcp(&serializer,
false));
1292 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1297template<
typename Ordinal,
typename Packet>
1300 const Ordinal sendCount,
const Packet sendBuffer[],
1301 const Ordinal recvCount, Packet recvBuffer[]
1304 TEUCHOS_COMM_TIME_MONITOR(
1305 "Teuchos::CommHelpers: gatherAll<"
1310 charSendBuffer(sendCount,sendBuffer);
1312 charRecvBuffer(recvCount,recvBuffer);
1314 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1315 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1319template<
typename Ordinal,
typename Packet>
1322 const Ordinal sendCount,
1324 const Ordinal recvCount,
1328 TEUCHOS_COMM_TIME_MONITOR(
1329 "Teuchos::CommHelpers: gather<"
1334 charSendBuffer (sendCount, sendBuf);
1336 charRecvBuffer (recvCount, recvBuf);
1337 comm.
gather (charSendBuffer.getBytes (),
1338 charSendBuffer.getCharBuffer (),
1339 charRecvBuffer.getBytes (),
1340 charRecvBuffer.getCharBuffer (),
1344template<
typename Ordinal,
typename Packet>
1347 const Ordinal sendCount,
1349 const Ordinal recvCounts[],
1350 const Ordinal displs[],
1375 "Teuchos::gatherv: The general case is not implemented.");
1378template<
typename Ordinal,
typename Packet>
1381 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1382 const Ordinal recvCount, Packet*
const recvBuffer[]
1388template<
typename Ordinal,
typename Packet,
typename Serializer>
1392 const Ordinal sendCount,
const Packet sendBuffer[],
1393 const Ordinal recvCount, Packet recvBuffer[]
1396 TEUCHOS_COMM_TIME_MONITOR(
1397 "Teuchos::CommHelpers: gatherAll<"
1402 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1404 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1406 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1407 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1412template<
typename Ordinal,
typename Packet>
1416 const Ordinal count,
1425 (
true, std::logic_error,
"Teuchos::reduce<" <<
1427 <<
">: Generic version not implemented. We only implement this function "
1428 "for Ordinal = int and Packet = specific types.");
1432template<
typename Ordinal,
typename Packet>
1435 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1438 TEUCHOS_COMM_TIME_MONITOR(
1439 "Teuchos::CommHelpers: reduceAll<"
1441 <<
">( value type, user-defined op )"
1444 charSendBuffer(count,sendBuffer);
1446 charGlobalReducts(count,globalReducts);
1448 charReductOp(
rcp(&reductOp,
false));
1450 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1451 ,charGlobalReducts.getCharBuffer()
1456template<
typename Ordinal,
typename Packet>
1459 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1462 TEUCHOS_COMM_TIME_MONITOR(
1463 "Teuchos::CommHelpers: reduceAll<"
1465 <<
">( value type, "<<toString(reductType)<<
" )"
1469 createOp<Ordinal, Packet> (reductType);
1471 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1473 catch (std::exception& e) {
1489#ifdef HAVE_TEUCHOS_COMPLEX
1492TEUCHOSCOMM_LIB_DLL_EXPORT
void
1494 const EReductionType reductType,
1496 const std::complex<double> sendBuffer[],
1497 std::complex<double> globalReducts[]);
1502 const int sourceRank);
1506 const int sourceRank,
1510TEUCHOSCOMM_LIB_DLL_EXPORT
void
1513 const std::complex<double> sendBuffer[],
1514 const int destRank);
1516TEUCHOSCOMM_LIB_DLL_EXPORT
void
1531TEUCHOSCOMM_LIB_DLL_EXPORT
void
1533 const EReductionType reductType,
1535 const std::complex<float> sendBuffer[],
1536 std::complex<float> globalReducts[]);
1541 const int sourceRank);
1545 const int sourceRank,
1549TEUCHOSCOMM_LIB_DLL_EXPORT
void
1552 const std::complex<float> sendBuffer[],
1553 const int destRank);
1555TEUCHOSCOMM_LIB_DLL_EXPORT
void
1572TEUCHOSCOMM_LIB_DLL_EXPORT
void
1574 const EReductionType reductType,
1576 const double sendBuffer[],
1577 double globalReducts[]);
1582 const int sourceRank);
1586 const int sourceRank,
1590TEUCHOSCOMM_LIB_DLL_EXPORT
void
1593 const double sendBuffer[],
1594 const int destRank);
1596TEUCHOSCOMM_LIB_DLL_EXPORT
void
1611TEUCHOSCOMM_LIB_DLL_EXPORT
void
1613 const EReductionType reductType,
1615 const float sendBuffer[],
1616 float globalReducts[]);
1621 const int sourceRank);
1625 const int sourceRank,
1629TEUCHOSCOMM_LIB_DLL_EXPORT
void
1632 const float sendBuffer[],
1633 const int destRank);
1635TEUCHOSCOMM_LIB_DLL_EXPORT
void
1650TEUCHOSCOMM_LIB_DLL_EXPORT
void
1652 const int sendCount,
1653 long long recvBuf[],
1654 const int recvCount,
1658TEUCHOSCOMM_LIB_DLL_EXPORT
void
1660 const int sendCount,
1661 long long recvBuf[],
1662 const int recvCounts[],
1667TEUCHOSCOMM_LIB_DLL_EXPORT
void
1669 const EReductionType reductType,
1671 const long long sendBuffer[],
1672 long long globalReducts[]);
1677 const int sourceRank);
1681 const int sourceRank,
1685TEUCHOSCOMM_LIB_DLL_EXPORT
void
1688 const long long sendBuffer[],
1689 const int destRank);
1691TEUCHOSCOMM_LIB_DLL_EXPORT
void
1706TEUCHOSCOMM_LIB_DLL_EXPORT
void
1708 const int sendCount,
1709 unsigned long long recvBuf[],
1710 const int recvCount,
1714TEUCHOSCOMM_LIB_DLL_EXPORT
void
1716 const int sendCount,
1717 unsigned long long recvBuf[],
1718 const int recvCounts[],
1723TEUCHOSCOMM_LIB_DLL_EXPORT
void
1725 const EReductionType reductType,
1727 const unsigned long long sendBuffer[],
1728 unsigned long long globalReducts[]);
1733 const int sourceRank);
1737 const int sourceRank,
1741TEUCHOSCOMM_LIB_DLL_EXPORT
void
1744 const unsigned long long sendBuffer[],
1745 const int destRank);
1747TEUCHOSCOMM_LIB_DLL_EXPORT
void
1762TEUCHOSCOMM_LIB_DLL_EXPORT
void
1764 const int sendCount,
1766 const int recvCount,
1770TEUCHOSCOMM_LIB_DLL_EXPORT
void
1772 const int sendCount,
1774 const int recvCounts[],
1779TEUCHOSCOMM_LIB_DLL_EXPORT
void
1781 const EReductionType reductType,
1783 const long sendBuffer[],
1784 long globalReducts[]);
1789 const int sourceRank);
1793 const int sourceRank,
1797TEUCHOSCOMM_LIB_DLL_EXPORT
void
1800 const long sendBuffer[],
1801 const int destRank);
1803TEUCHOSCOMM_LIB_DLL_EXPORT
void
1818TEUCHOSCOMM_LIB_DLL_EXPORT
void
1820 const int sendCount,
1821 unsigned long recvBuf[],
1822 const int recvCount,
1826TEUCHOSCOMM_LIB_DLL_EXPORT
void
1828 const int sendCount,
1829 unsigned long recvBuf[],
1830 const int recvCounts[],
1835TEUCHOSCOMM_LIB_DLL_EXPORT
void
1837 const EReductionType reductType,
1839 const unsigned long sendBuffer[],
1840 unsigned long globalReducts[]);
1845 const int sourceRank);
1849 const int sourceRank,
1853TEUCHOSCOMM_LIB_DLL_EXPORT
void
1856 const unsigned long sendBuffer[],
1857 const int destRank);
1859TEUCHOSCOMM_LIB_DLL_EXPORT
void
1874TEUCHOSCOMM_LIB_DLL_EXPORT
void
1876 const int sendCount,
1878 const int recvCount,
1882TEUCHOSCOMM_LIB_DLL_EXPORT
void
1884 const int sendCount,
1886 const int recvCounts[],
1891TEUCHOSCOMM_LIB_DLL_EXPORT
void
1892scatter (
const int sendBuf[],
1893 const int sendCount,
1895 const int recvCount,
1899TEUCHOSCOMM_LIB_DLL_EXPORT
void
1903 const EReductionType reductType,
1907TEUCHOSCOMM_LIB_DLL_EXPORT
void
1911 const EReductionType reductType,
1915TEUCHOSCOMM_LIB_DLL_EXPORT
void
1917 unsigned long recvBuf[],
1919 const EReductionType reductType,
1923TEUCHOSCOMM_LIB_DLL_EXPORT
void
1925 unsigned long long recvBuf[],
1927 const EReductionType reductType,
1931TEUCHOSCOMM_LIB_DLL_EXPORT
void
1935 const EReductionType reductType,
1939TEUCHOSCOMM_LIB_DLL_EXPORT
void
1941 const EReductionType reductType,
1943 const int sendBuffer[],
1944 int globalReducts[]);
1950 const int sourceRank);
1954 const int sourceRank,
1958TEUCHOSCOMM_LIB_DLL_EXPORT
void
1961 const int sendBuffer[],
1962 const int destRank);
1964TEUCHOSCOMM_LIB_DLL_EXPORT
void
1979TEUCHOSCOMM_LIB_DLL_EXPORT
void
1981 const int sendCount,
1982 unsigned int recvBuf[],
1983 const int recvCount,
1987TEUCHOSCOMM_LIB_DLL_EXPORT
void
1989 const int sendCount,
1990 unsigned int recvBuf[],
1991 const int recvCounts[],
1996TEUCHOSCOMM_LIB_DLL_EXPORT
void
1998 const EReductionType reductType,
2000 const unsigned int sendBuffer[],
2001 unsigned int globalReducts[]);
2006 const int sourceRank);
2010 const int sourceRank,
2014TEUCHOSCOMM_LIB_DLL_EXPORT
void
2017 const unsigned int sendBuffer[],
2018 const int destRank);
2020TEUCHOSCOMM_LIB_DLL_EXPORT
void
2035TEUCHOSCOMM_LIB_DLL_EXPORT
void
2037 const int sendCount,
2039 const int recvCount,
2043TEUCHOSCOMM_LIB_DLL_EXPORT
void
2045 const int sendCount,
2047 const int recvCounts[],
2052TEUCHOSCOMM_LIB_DLL_EXPORT
void
2054 const EReductionType reductType,
2056 const short sendBuffer[],
2057 short globalReducts[]);
2062 const int sourceRank);
2066 const int sourceRank,
2070TEUCHOSCOMM_LIB_DLL_EXPORT
void
2073 const short sendBuffer[],
2074 const int destRank);
2076TEUCHOSCOMM_LIB_DLL_EXPORT
void
2100TEUCHOSCOMM_LIB_DLL_EXPORT
void
2102 const EReductionType reductType,
2104 const char sendBuffer[],
2105 char globalReducts[]);
2110template<
typename Ordinal,
typename Packet>
2122template<
typename Ordinal,
typename Packet>
2126 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2129 TEUCHOS_COMM_TIME_MONITOR(
2130 "Teuchos::CommHelpers: reduceAll<"
2132 <<
">( reference type )"
2135 charSendBuffer(serializer,count,sendBuffer);
2137 charGlobalReducts(serializer,count,globalReducts);
2139 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2146template<
typename Ordinal,
typename Packet,
typename Serializer>
2151 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2154 TEUCHOS_COMM_TIME_MONITOR(
2155 "Teuchos::CommHelpers: reduceAll<"
2157 <<
">( value type, user-defined op )"
2160 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2162 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2164 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2166 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2167 ,charGlobalReducts.getCharBuffer()
2172template<
typename Ordinal,
typename Packet,
typename Serializer>
2177 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2180 TEUCHOS_COMM_TIME_MONITOR(
2181 "Teuchos::CommHelpers: reduceAll<"
2183 <<
">( value type, "<<toString(reductType)<<
" )"
2187 createOp<Ordinal, Packet> (reductType);
2189 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2191 catch (std::exception& e) {
2199template<
typename Ordinal,
typename Packet>
2202 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2205 TEUCHOS_COMM_TIME_MONITOR(
2206 "Teuchos::CommHelpers: scan<"
2208 <<
">( value type, user-defined op )"
2211 charSendBuffer(count,sendBuffer);
2213 charScanReducts(count,scanReducts);
2215 charReductOp(
rcp(&reductOp,
false));
2217 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2218 ,charScanReducts.getCharBuffer()
2223template<
typename Ordinal,
typename Packet>
2226 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2229 TEUCHOS_COMM_TIME_MONITOR(
2230 "Teuchos::CommHelpers: scan<"
2232 <<
">( value type, "<<toString(reductType)<<
" )"
2236 createOp<Ordinal, Packet> (reductType);
2238 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2240 catch (std::exception& e) {
2248template<
typename Ordinal,
typename Packet>
2258template<
typename Ordinal,
typename Packet>
2262 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2268template<
typename Ordinal,
typename Packet,
typename Serializer>
2273 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2276 TEUCHOS_COMM_TIME_MONITOR(
2277 "Teuchos::CommHelpers: scan<"
2279 <<
">( value type, user-defined op )"
2282 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2284 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2286 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2288 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2289 ,charScanReducts.getCharBuffer()
2294template<
typename Ordinal,
typename Packet,
typename Serializer>
2299 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2302 TEUCHOS_COMM_TIME_MONITOR(
2303 "Teuchos::CommHelpers: scan<"
2305 <<
">( value type, "<<toString(reductType)<<
" )"
2309 createOp<Ordinal, Packet> (reductType);
2311 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2313 catch (std::exception& e) {
2320template<
typename Ordinal,
typename Packet>
2323 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2326 TEUCHOS_COMM_TIME_MONITOR(
2327 "Teuchos::CommHelpers: send<"
2332 charSendBuffer(count,sendBuffer);
2334 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2339template<
typename Ordinal,
typename Packet>
2342 const Ordinal count,
2347 TEUCHOS_COMM_TIME_MONITOR(
2348 "Teuchos::CommHelpers: send<"
2353 comm.
send (charSendBuffer.getBytes (), charSendBuffer.getCharBuffer (), destRank, tag);
2356template<
typename Ordinal,
typename Packet>
2359 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2362 TEUCHOS_COMM_TIME_MONITOR(
2363 "Teuchos::CommHelpers: ssend<"
2368 charSendBuffer(count,sendBuffer);
2370 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2375template<
typename Ordinal,
typename Packet>
2378 const Ordinal count,
2383 TEUCHOS_COMM_TIME_MONITOR(
2384 "Teuchos::CommHelpers: ssend<"
2389 buf_type charSendBuffer (count, sendBuffer);
2390 comm.
ssend (charSendBuffer.getBytes (),
2391 charSendBuffer.getCharBuffer (),
2395template<
typename Ordinal,
typename Packet>
2398 const Packet &
send,
const int destRank
2404template<
typename Ordinal,
typename Packet>
2407 const Packet &
send,
const int destRank
2413template<
typename Ordinal,
typename Packet>
2416 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2422template<
typename Ordinal,
typename Packet,
typename Serializer>
2426 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2429 TEUCHOS_COMM_TIME_MONITOR(
2430 "Teuchos::CommHelpers: send<"
2435 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2437 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2442template<
typename Ordinal,
typename Packet>
2445 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2448 TEUCHOS_COMM_TIME_MONITOR(
2449 "Teuchos::CommHelpers: receive<"
2454 charRecvBuffer(count,recvBuffer);
2457 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2462template<
typename Ordinal,
typename Packet>
2465 const int sourceRank, Packet *recv
2472template<
typename Ordinal,
typename Packet>
2475 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2481template<
typename Ordinal,
typename Packet,
typename Serializer>
2485 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2488 TEUCHOS_COMM_TIME_MONITOR(
2489 "Teuchos::CommHelpers: receive<"
2494 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2497 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2501template<
typename Ordinal,
typename Packet>
2508 TEUCHOS_COMM_TIME_MONITOR(
2509 "Teuchos::CommHelpers: readySend<"
2515 comm.
readySend( charSendBuffer.getCharBufferView(), destRank );
2518template<
typename Ordinal,
typename Packet>
2521 const Ordinal count,
2526 TEUCHOS_COMM_TIME_MONITOR(
2527 "Teuchos::CommHelpers: readySend<"
2532 buf_type charSendBuffer (count, sendBuffer);
2533 comm.
readySend (charSendBuffer.getBytes (),
2534 charSendBuffer.getCharBuffer (),
2538template<
typename Ordinal,
typename Packet>
2548template<
typename Ordinal,
typename Packet,
typename Serializer>
2556 TEUCHOS_COMM_TIME_MONITOR(
2557 "Teuchos::CommHelpers: readySend<"
2562 charSendBuffer(sendBuffer.
size(), sendBuffer.
getRawPtr(), serializer);
2563 comm.
readySend( charSendBuffer.getCharBufferView(), destRank );
2566template<
typename Ordinal,
typename Packet>
2574 TEUCHOS_COMM_TIME_MONITOR(
2575 "Teuchos::CommHelpers: isend<"
2582 charSendBuffer.getCharBufferView(), destRank );
2587template<
typename Ordinal,
typename Packet>
2589Teuchos::isend (
const ArrayRCP<const Packet> &sendBuffer,
2592 const Comm<Ordinal>& comm)
2594 TEUCHOS_COMM_TIME_MONITOR(
2595 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2596 << TypeNameTraits<Packet>::name () <<
">");
2597 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2598 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2599 RCP<CommRequest<Ordinal> > commRequest =
2600 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2601 set_extra_data (sendBuffer,
"buffer", inOutArg (commRequest));
2605template<
typename Ordinal,
typename Packet>
2608 const Comm<Ordinal>& comm,
2609 const RCP<const Packet> &send,
2613 const ArrayRCP<const Packet> sendBuffer =
2617 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2620template<
typename Ordinal,
typename Packet,
typename Serializer>
2623 const Comm<Ordinal>& comm,
2624 const Serializer& serializer,
2625 const ArrayRCP<const Packet> &sendBuffer,
2629 TEUCHOS_COMM_TIME_MONITOR(
2630 "Teuchos::CommHelpers: isend<"
2631 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2634 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2635 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2636 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2637 charSendBuffer.getCharBufferView(), destRank );
2642template<
typename Ordinal,
typename Packet>
2645 const Comm<Ordinal>& comm,
2646 const ArrayRCP<Packet> &recvBuffer,
2647 const int sourceRank
2650 TEUCHOS_COMM_TIME_MONITOR(
2651 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2652 ValueTypeSerializationBuffer<Ordinal,Packet>
2653 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2654 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2655 charRecvBuffer.getCharBufferView(), sourceRank );
2660template<
typename Ordinal,
typename Packet>
2663 const int sourceRank,
2667 TEUCHOS_COMM_TIME_MONITOR(
2668 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2669 ValueTypeSerializationBuffer<int, Packet>
2670 charRecvBuffer (recvBuffer.
size (), recvBuffer.
getRawPtr ());
2671 RCP<CommRequest<int> > commRequest =
2672 comm.
ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2677template<
typename Ordinal,
typename Packet>
2680 const Comm<Ordinal>& comm,
2681 const RCP<Packet> &recv,
2682 const int sourceRank
2685 const ArrayRCP<Packet> recvBuffer =
2689 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2692template<
typename Ordinal,
typename Packet,
typename Serializer>
2695 const Comm<Ordinal>& comm,
2696 const Serializer& serializer,
2697 const ArrayRCP<Packet> &recvBuffer,
2698 const int sourceRank
2701 TEUCHOS_COMM_TIME_MONITOR(
2702 "Teuchos::CommHelpers: ireceive<"
2703 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2706 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2707 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2708 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2709 charRecvBuffer.getCharBufferView(), sourceRank );
2714template<
typename Ordinal>
2724template<
typename Ordinal>
2730 comm.
waitAll (requests, statuses);
2734template<
typename Ordinal>
2739 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.