42#ifndef TEUCHOS_COMM_HELPERS_HPP
43#define TEUCHOS_COMM_HELPERS_HPP
57#ifdef HAVE_TEUCHOS_MPI
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>
372 const Packet &send,
const Ptr<Packet> &globalReduct
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[]
1061 min_type::min (count, inBuffer, inoutBuffer);
1065template<
typename Ordinal,
typename Packet>
1067 const Ordinal count,
1068 const Packet inBuffer[],
1069 Packet inoutBuffer[]
1073 max_type::max (count,inBuffer,inoutBuffer);
1077template<
typename Ordinal,
typename Packet>
1079 const Ordinal count,
1080 const Packet inBuffer[],
1081 Packet inoutBuffer[]
1085 and_type::andOp (count, inBuffer, inoutBuffer);
1115template<
typename Ordinal,
typename Packet>
1116ValueTypeReductionOp<Ordinal,Packet>*
1120 switch (reductType) {
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>
1169int Teuchos::rank(
const Comm<Ordinal>& comm)
1171 return comm.getRank();
1175template<
typename Ordinal>
1176int Teuchos::size(
const Comm<Ordinal>& comm)
1178 return comm.getSize();
1182template<
typename Ordinal>
1183void Teuchos::barrier(
const Comm<Ordinal>& comm)
1186 "Teuchos::CommHelpers: barrier<"
1187 <<OrdinalTraits<Ordinal>::name()
1194template<
typename Ordinal,
typename Packet>
1195void Teuchos::broadcast(
1196 const Comm<Ordinal>& comm,
1197 const int rootRank,
const Ordinal count, Packet buffer[]
1201 "Teuchos::CommHelpers: broadcast<"
1202 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1205 ValueTypeSerializationBuffer<Ordinal,Packet>
1206 charBuffer(count,buffer);
1208 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1213template<
typename Ordinal,
typename Packet>
1214void Teuchos::broadcast(
1215 const Comm<Ordinal>& comm,
1217 const ArrayView<Packet> &buffer
1220 broadcast<Ordinal, Packet>(comm, rootRank, buffer.size(), buffer.getRawPtr() );
1224template<
typename Ordinal,
typename Packet>
1225void Teuchos::broadcast(
1226 const Comm<Ordinal>& comm,
1227 const int rootRank, Packet *
object
1230 broadcast<Ordinal,Packet>(comm,rootRank,1,
object);
1234template<
typename Ordinal,
typename Packet>
1235void Teuchos::broadcast(
1236 const Comm<Ordinal>& comm,
1237 const int rootRank,
const Ptr<Packet> &
object
1240 broadcast<Ordinal,Packet>(comm,rootRank,1,
object.
getRawPtr());
1244template<
typename Ordinal,
typename Packet>
1245void Teuchos::broadcast(
1246 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1247 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1251 "Teuchos::CommHelpers: broadcast<"
1252 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1253 <<
">( reference type )"
1255 ReferenceTypeSerializationBuffer<Ordinal,Packet>
1256 charBuffer(serializer, count, buffer);
1258 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1263template<
typename Ordinal,
typename Packet>
1264void Teuchos::broadcast(
1265 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1266 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
1269 Array<Packet*> bufferPtrArray;
1270 for (
int i = 0; i < buffer.size(); ++i) {
1271 bufferPtrArray.push_back(buffer[i].
getRawPtr());
1273 broadcast<Ordinal,Packet>(comm, serializer, rootRank,
1274 buffer.size(), bufferPtrArray.getRawPtr());
1277template<
typename Ordinal,
typename Packet,
typename Serializer>
1278void Teuchos::broadcast(
1279 const Comm<Ordinal>& comm,
1280 const Serializer& serializer,
1281 const int rootRank,
const Ordinal count, Packet buffer[]
1285 "Teuchos::CommHelpers: broadcast<"
1286 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1289 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1290 charBuffer(count,buffer,
rcp(&serializer,
false));
1292 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1297template<
typename Ordinal,
typename Packet>
1298void Teuchos::gatherAll(
1299 const Comm<Ordinal>& comm,
1300 const Ordinal sendCount,
const Packet sendBuffer[],
1301 const Ordinal recvCount, Packet recvBuffer[]
1305 "Teuchos::CommHelpers: gatherAll<"
1306 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1309 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1310 charSendBuffer(sendCount,sendBuffer);
1311 ValueTypeSerializationBuffer<Ordinal,Packet>
1312 charRecvBuffer(recvCount,recvBuffer);
1314 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1315 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1319template<
typename Ordinal,
typename Packet>
1321Teuchos::gather (
const Packet sendBuf[],
1322 const Ordinal sendCount,
1324 const Ordinal recvCount,
1326 const Comm<Ordinal>& comm)
1329 "Teuchos::CommHelpers: gather<"
1330 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1333 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1334 charSendBuffer (sendCount, sendBuf);
1335 ValueTypeSerializationBuffer<Ordinal,Packet>
1336 charRecvBuffer (recvCount, recvBuf);
1337 comm.gather (charSendBuffer.getBytes (),
1338 charSendBuffer.getCharBuffer (),
1339 charRecvBuffer.getBytes (),
1340 charRecvBuffer.getCharBuffer (),
1344template<
typename Ordinal,
typename Packet>
1346Teuchos::gatherv (
const Packet sendBuf[],
1347 const Ordinal sendCount,
1349 const Ordinal recvCounts[],
1350 const Ordinal displs[],
1352 const Comm<Ordinal>& comm)
1375 "Teuchos::gatherv: The general case is not implemented.");
1378template<
typename Ordinal,
typename Packet>
1379void Teuchos::gatherAll(
1380 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1381 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1382 const Ordinal recvCount, Packet*
const recvBuffer[]
1388template<
typename Ordinal,
typename Packet,
typename Serializer>
1389void Teuchos::gatherAll(
1390 const Comm<Ordinal>& comm,
1391 const Serializer& serializer,
1392 const Ordinal sendCount,
const Packet sendBuffer[],
1393 const Ordinal recvCount, Packet recvBuffer[]
1397 "Teuchos::CommHelpers: gatherAll<"
1398 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1401 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1402 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1403 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1404 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1406 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1407 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1412template<
typename Ordinal,
typename Packet>
1414Teuchos::reduce (
const Packet sendBuf[],
1416 const Ordinal count,
1417 const EReductionType reductType,
1419 const Comm<Ordinal>& comm)
1425 (
true, std::logic_error,
"Teuchos::reduce<" <<
1426 TypeNameTraits<Ordinal>::name () <<
"," << TypeNameTraits<Packet>::name ()
1427 <<
">: Generic version not implemented. We only implement this function "
1428 "for Ordinal = int and Packet = specific types.");
1432template<
typename Ordinal,
typename Packet>
1433void Teuchos::reduceAll(
1434 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp
1435 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1439 "Teuchos::CommHelpers: reduceAll<"
1440 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1441 <<
">( value type, user-defined op )"
1443 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1444 charSendBuffer(count,sendBuffer);
1445 ValueTypeSerializationBuffer<Ordinal,Packet>
1446 charGlobalReducts(count,globalReducts);
1447 CharToValueTypeReductionOp<Ordinal,Packet>
1448 charReductOp(
rcp(&reductOp,
false));
1450 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1451 ,charGlobalReducts.getCharBuffer()
1456template<
typename Ordinal,
typename Packet>
1457void Teuchos::reduceAll(
1458 const Comm<Ordinal>& comm,
const EReductionType reductType,
1459 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1463 "Teuchos::CommHelpers: reduceAll<"
1464 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1465 <<
">( value type, "<<
toString(reductType)<<
" )"
1468 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
1469 createOp<Ordinal, Packet> (reductType);
1471 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1473 catch (std::exception& e) {
1489#ifdef HAVE_TEUCHOS_COMPLEX
1493reduceAll<int, std::complex<double> > (
const Comm<int>& comm,
1494 const EReductionType reductType,
1496 const std::complex<double> sendBuffer[],
1497 std::complex<double> globalReducts[]);
1500ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1501 const ArrayRCP<std::complex<double> >& recvBuffer,
1502 const int sourceRank);
1505ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1506 const int sourceRank,
1508 const Comm<int>& comm);
1511send<int, std::complex<double> > (
const Comm<int>& comm,
1513 const std::complex<double> sendBuffer[],
1514 const int destRank);
1517send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1521 const Comm<int>& comm);
1524isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1527 const Comm<int>& comm);
1532reduceAll<int, std::complex<float> > (
const Comm<int>& comm,
1533 const EReductionType reductType,
1535 const std::complex<float> sendBuffer[],
1536 std::complex<float> globalReducts[]);
1539ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1540 const ArrayRCP<std::complex<float> >& recvBuffer,
1541 const int sourceRank);
1544ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1545 const int sourceRank,
1547 const Comm<int>& comm);
1550send<int, std::complex<float> > (
const Comm<int>& comm,
1552 const std::complex<float> sendBuffer[],
1553 const int destRank);
1556send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1560 const Comm<int>& comm);
1563isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1566 const Comm<int>& comm);
1574 const EReductionType reductType,
1576 const double sendBuffer[],
1577 double globalReducts[]);
1581 const ArrayRCP<double>& recvBuffer,
1582 const int sourceRank);
1586 const int sourceRank,
1588 const Comm<int>& comm);
1593 const double sendBuffer[],
1594 const int destRank);
1601 const Comm<int>& comm);
1613 const EReductionType reductType,
1615 const float sendBuffer[],
1616 float globalReducts[]);
1621 const int sourceRank);
1625 const int sourceRank,
1632 const float sendBuffer[],
1633 const int destRank);
1652 const int sendCount,
1653 long long recvBuf[],
1654 const int recvCount,
1660 const int sendCount,
1661 long long recvBuf[],
1662 const int recvCounts[],
1669 const EReductionType reductType,
1671 const long long sendBuffer[],
1672 long long globalReducts[]);
1677 const int sourceRank);
1681 const int sourceRank,
1688 const long long sendBuffer[],
1689 const int destRank);
1708 const int sendCount,
1709 unsigned long long recvBuf[],
1710 const int recvCount,
1716 const int sendCount,
1717 unsigned long long recvBuf[],
1718 const int recvCounts[],
1725 const EReductionType reductType,
1727 const unsigned long long sendBuffer[],
1728 unsigned long long globalReducts[]);
1733 const int sourceRank);
1737 const int sourceRank,
1744 const unsigned long long sendBuffer[],
1745 const int destRank);
1764 const int sendCount,
1766 const int recvCount,
1772 const int sendCount,
1774 const int recvCounts[],
1781 const EReductionType reductType,
1783 const long sendBuffer[],
1784 long globalReducts[]);
1789 const int sourceRank);
1793 const int sourceRank,
1800 const long sendBuffer[],
1801 const int destRank);
1820 const int sendCount,
1821 unsigned long recvBuf[],
1822 const int recvCount,
1828 const int sendCount,
1829 unsigned long recvBuf[],
1830 const int recvCounts[],
1837 const EReductionType reductType,
1839 const unsigned long sendBuffer[],
1840 unsigned long globalReducts[]);
1845 const int sourceRank);
1849 const int sourceRank,
1856 const unsigned long sendBuffer[],
1857 const int destRank);
1876 const int sendCount,
1878 const int recvCount,
1884 const int sendCount,
1886 const int recvCounts[],
1893 const int sendCount,
1895 const int recvCount,
1903 const EReductionType reductType,
1911 const EReductionType reductType,
1917 unsigned long recvBuf[],
1919 const EReductionType reductType,
1925 unsigned long long recvBuf[],
1927 const EReductionType reductType,
1935 const EReductionType reductType,
1941 const EReductionType reductType,
1943 const int sendBuffer[],
1944 int globalReducts[]);
1950 const int sourceRank);
1954 const int sourceRank,
1961 const int sendBuffer[],
1962 const int destRank);
1981 const int sendCount,
1982 unsigned int recvBuf[],
1983 const int recvCount,
1989 const int sendCount,
1990 unsigned int recvBuf[],
1991 const int recvCounts[],
1998 const EReductionType reductType,
2000 const unsigned int sendBuffer[],
2001 unsigned int globalReducts[]);
2006 const int sourceRank);
2010 const int sourceRank,
2017 const unsigned int sendBuffer[],
2018 const int destRank);
2037 const int sendCount,
2039 const int recvCount,
2045 const int sendCount,
2047 const int recvCounts[],
2054 const EReductionType reductType,
2056 const short sendBuffer[],
2057 short globalReducts[]);
2062 const int sourceRank);
2066 const int sourceRank,
2073 const short sendBuffer[],
2074 const int destRank);
2101reduceAll<int, char> (
const Comm<int>& comm,
2102 const EReductionType reductType,
2104 const char sendBuffer[],
2105 char globalReducts[]);
2110template<
typename Ordinal,
typename Packet>
2111void Teuchos::reduceAll(
2112 const Comm<Ordinal>& comm,
const EReductionType reductType
2113 ,
const Packet &send,
const Ptr<Packet> &globalReduct
2118 reduceAll<Ordinal,Packet>(comm, reductType, 1, &send, &*globalReduct);
2122template<
typename Ordinal,
typename Packet>
2123void Teuchos::reduceAll(
2124 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2125 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2126 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2130 "Teuchos::CommHelpers: reduceAll<"
2131 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2132 <<
">( reference type )"
2134 ConstReferenceTypeSerializationBuffer<Ordinal,Packet>
2135 charSendBuffer(serializer,count,sendBuffer);
2136 ReferenceTypeSerializationBuffer<Ordinal,Packet>
2137 charGlobalReducts(serializer,count,globalReducts);
2138 CharToReferenceTypeReductionOp<Ordinal,Packet>
2139 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2141 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2142 ,charGlobalReducts.getCharBuffer()
2146template<
typename Ordinal,
typename Packet,
typename Serializer>
2147void Teuchos::reduceAll(
2148 const Comm<Ordinal>& comm,
2149 const Serializer& serializer,
2150 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2151 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2155 "Teuchos::CommHelpers: reduceAll<"
2156 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2157 <<
">( value type, user-defined op )"
2159 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2160 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2161 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2162 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2163 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2164 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2166 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2167 ,charGlobalReducts.getCharBuffer()
2172template<
typename Ordinal,
typename Packet,
typename Serializer>
2173void Teuchos::reduceAll(
2174 const Comm<Ordinal>& comm,
2175 const Serializer& serializer,
2176 const EReductionType reductType,
2177 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2181 "Teuchos::CommHelpers: reduceAll<"
2182 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2183 <<
">( value type, "<<
toString(reductType)<<
" )"
2186 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2187 createOp<Ordinal, Packet> (reductType);
2189 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2191 catch (std::exception& e) {
2199template<
typename Ordinal,
typename Packet>
2201 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2202 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2206 "Teuchos::CommHelpers: scan<"
2207 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2208 <<
">( value type, user-defined op )"
2210 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2211 charSendBuffer(count,sendBuffer);
2212 ValueTypeSerializationBuffer<Ordinal,Packet>
2213 charScanReducts(count,scanReducts);
2214 CharToValueTypeReductionOp<Ordinal,Packet>
2215 charReductOp(
rcp(&reductOp,
false));
2217 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2218 ,charScanReducts.getCharBuffer()
2223template<
typename Ordinal,
typename Packet>
2225 const Comm<Ordinal>& comm,
const EReductionType reductType,
2226 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2230 "Teuchos::CommHelpers: scan<"
2231 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2232 <<
">( value type, "<<
toString(reductType)<<
" )"
2235 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2236 createOp<Ordinal, Packet> (reductType);
2238 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2240 catch (std::exception& e) {
2248template<
typename Ordinal,
typename Packet>
2250 const Comm<Ordinal>& comm,
const EReductionType reductType,
2251 const Packet &send,
const Ptr<Packet> &scanReduct
2254 scan<Ordinal,Packet>(comm, reductType, 1, &send, &*scanReduct);
2258template<
typename Ordinal,
typename Packet>
2260 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2261 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2262 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2268template<
typename Ordinal,
typename Packet,
typename Serializer>
2270 const Comm<Ordinal>& comm,
2271 const Serializer& serializer,
2272 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2273 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2277 "Teuchos::CommHelpers: scan<"
2278 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2279 <<
">( value type, user-defined op )"
2281 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2282 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2283 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2284 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2285 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2286 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2288 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2289 ,charScanReducts.getCharBuffer()
2294template<
typename Ordinal,
typename Packet,
typename Serializer>
2296 const Comm<Ordinal>& comm,
2297 const Serializer& serializer,
2298 const EReductionType reductType,
2299 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2303 "Teuchos::CommHelpers: scan<"
2304 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2305 <<
">( value type, "<<
toString(reductType)<<
" )"
2308 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2309 createOp<Ordinal, Packet> (reductType);
2311 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2313 catch (std::exception& e) {
2320template<
typename Ordinal,
typename Packet>
2322 const Comm<Ordinal>& comm,
2323 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2327 "Teuchos::CommHelpers: send<"
2328 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2331 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2332 charSendBuffer(count,sendBuffer);
2334 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2339template<
typename Ordinal,
typename Packet>
2342 const Ordinal count,
2348 "Teuchos::CommHelpers: send<"
2353 comm.
send (charSendBuffer.getBytes (), charSendBuffer.getCharBuffer (), destRank, tag);
2356template<
typename Ordinal,
typename Packet>
2358 const Comm<Ordinal>& comm,
2359 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2363 "Teuchos::CommHelpers: ssend<"
2364 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2367 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2368 charSendBuffer(count,sendBuffer);
2370 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2375template<
typename Ordinal,
typename Packet>
2378 const Ordinal count,
2384 "Teuchos::CommHelpers: ssend<"
2389 buf_type charSendBuffer (count, sendBuffer);
2390 comm.
ssend (charSendBuffer.getBytes (),
2391 charSendBuffer.getCharBuffer (),
2395template<
typename Ordinal,
typename Packet>
2397 const Comm<Ordinal>& comm,
2398 const Packet &send,
const int destRank
2401 Teuchos::send<Ordinal,Packet>(comm,1,&send,destRank);
2404template<
typename Ordinal,
typename Packet>
2406 const Comm<Ordinal>& comm,
2407 const Packet &send,
const int destRank
2410 Teuchos::ssend<Ordinal,Packet>(comm,1,&send,destRank);
2413template<
typename Ordinal,
typename Packet>
2415 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2416 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2422template<
typename Ordinal,
typename Packet,
typename Serializer>
2424 const Comm<Ordinal>& comm,
2425 const Serializer& serializer,
2426 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2430 "Teuchos::CommHelpers: send<"
2431 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2434 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2435 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2437 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2442template<
typename Ordinal,
typename Packet>
2443int Teuchos::receive(
2444 const Comm<Ordinal>& comm,
2445 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2449 "Teuchos::CommHelpers: receive<"
2450 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2453 ValueTypeSerializationBuffer<Ordinal,Packet>
2454 charRecvBuffer(count,recvBuffer);
2455 return comm.receive(
2457 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2462template<
typename Ordinal,
typename Packet>
2463int Teuchos::receive(
2464 const Comm<Ordinal>& comm,
2465 const int sourceRank, Packet *recv
2468 return Teuchos::receive<Ordinal,Packet>(comm,sourceRank,1,recv);
2472template<
typename Ordinal,
typename Packet>
2473int Teuchos::receive(
2474 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2475 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2481template<
typename Ordinal,
typename Packet,
typename Serializer>
2482int Teuchos::receive(
2483 const Comm<Ordinal>& comm,
2484 const Serializer& serializer,
2485 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2489 "Teuchos::CommHelpers: receive<"
2490 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2493 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2494 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2495 return comm.receive(
2497 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2501template<
typename Ordinal,
typename Packet>
2503 const Comm<Ordinal>& comm,
2504 const ArrayView<const Packet> &sendBuffer,
2509 "Teuchos::CommHelpers: readySend<"
2510 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2513 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2514 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2515 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2518template<
typename Ordinal,
typename Packet>
2521 const Ordinal count,
2527 "Teuchos::CommHelpers: readySend<"
2532 buf_type charSendBuffer (count, sendBuffer);
2533 comm.
readySend (charSendBuffer.getBytes (),
2534 charSendBuffer.getCharBuffer (),
2538template<
typename Ordinal,
typename Packet>
2540 const Comm<Ordinal>& comm,
2545 readySend<Ordinal, Packet>( comm, arrayView(&send,1), destRank );
2548template<
typename Ordinal,
typename Packet,
typename Serializer>
2550 const Comm<Ordinal>& comm,
2551 const Serializer& serializer,
2552 const ArrayView<const Packet> &sendBuffer,
2557 "Teuchos::CommHelpers: readySend<"
2558 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2561 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2562 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2563 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2566template<
typename Ordinal,
typename Packet>
2569 const Comm<Ordinal>& comm,
2570 const ArrayRCP<const Packet> &sendBuffer,
2575 "Teuchos::CommHelpers: isend<"
2576 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2579 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2580 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2581 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2582 charSendBuffer.getCharBufferView(), destRank );
2583 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2587template<
typename Ordinal,
typename Packet>
2592 const Comm<Ordinal>& comm)
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 =
2614 arcpWithEmbeddedObj(
send.get(), 0, 1, send,
false );
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,
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 );
2638 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2642template<
typename Ordinal,
typename Packet>
2645 const Comm<Ordinal>& comm,
2646 const ArrayRCP<Packet> &recvBuffer,
2647 const int sourceRank
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 );
2656 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2660template<
typename Ordinal,
typename Packet>
2663 const int sourceRank,
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);
2673 set_extra_data (recvBuffer,
"buffer", inOutArg (commRequest));
2677template<
typename Ordinal,
typename Packet>
2680 const Comm<Ordinal>& comm,
2681 const RCP<Packet> &recv,
2682 const int sourceRank
2685 const ArrayRCP<Packet> recvBuffer =
2686 arcpWithEmbeddedObj( recv.get(), 0, 1, recv,
false );
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
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 );
2710 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2714template<
typename Ordinal>
2715void Teuchos::waitAll(
2716 const Comm<Ordinal>& comm,
2717 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
2720 comm.waitAll(requests);
2724template<
typename Ordinal>
2726Teuchos::waitAll (
const Comm<Ordinal>& comm,
2727 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
2728 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses)
2730 comm.waitAll (requests, statuses);
2734template<
typename Ordinal>
2736Teuchos::wait (
const Comm<Ordinal>& comm,
2737 const Ptr<RCP<CommRequest<Ordinal> > > &request)
2739 return comm.wait (request);
Templated array class derived from the STL std::vector.
#define TEUCHOS_COMM_TIME_MONITOR(FUNCNAME)
#define TEUCHOS_MIN(x, y)
#define TEUCHOS_MAX(x, y)
#define TEUCHOSCOMM_LIB_DLL_EXPORT
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.
size_type size() const
The total number of entries in the array.
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
Encapsulation of a pending nonblocking communication operation.
Encapsulation of the result of a receive (blocking or nonblocking).
Abstract interface for distributed-memory communication.
void ssend(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Synchronously send a single object that use values semantics to another 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 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...
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.
virtual void readySend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Ready send of data from this process to another process.
void waitAll(const Comm< Ordinal > &comm, const ArrayView< RCP< CommRequest< Ordinal > > > &requests)
Wait for an array of Teuchos::CommRequest objects.
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 int sourceRank, Packet *recv)
Receive a single object that use values semantics from another process.
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.
virtual RCP< CommRequest< Ordinal > > ireceive(const ArrayView< char > &recvBuffer, const int sourceRank) const =0
Non-blocking receive.
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.
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 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...
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...
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...
int size(const Comm< Ordinal > &comm)
Get the number of processes in the communicator.
int rank(const Comm< Ordinal > &comm)
Get the process rank.
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...
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...
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 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 broadcast(const Comm< Ordinal > &comm, const int rootRank, Packet *object)
Broadcast single object that use value semantics.
void send(const Comm< Ordinal > &comm, const Ordinal count, const Packet sendBuffer[], const int destRank)
Send 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 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 broadcast(const Comm< Ordinal > &comm, const int rootRank, const Ordinal count, Packet buffer[])
Broadcast array of objects that use value 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 ssend(const Comm< Ordinal > &comm, const Ordinal count, const Packet sendBuffer[], const int destRank)
Synchronously send objects that use values semantics to another process.
void barrier(const Comm< Ordinal > &comm)
Barrier.
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 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.
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.
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.
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 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.
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 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.
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.
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 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.
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.
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 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.
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.
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 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...
void broadcast(const Comm< Ordinal > &comm, const int rootRank, const ArrayView< Packet > &buffer)
Broadcast array of objects that use value semantics.
void broadcast(const Comm< Ordinal > &comm, const int rootRank, const Ptr< Packet > &object)
Broadcast single object that use value semantics.
EReductionType
Predefined reduction operations that Teuchos::Comm understands.
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.
int receive(const Comm< Ordinal > &comm, const int sourceRank, const Ordinal count, Packet recvBuffer[])
Receive objects that use values semantics from another 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 readySend(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Ready-Send a single object that use values semantics to another process.
void send(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Send a single object that use values semantics to another process.
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
static void andOp(const Ordinal, const Packet[], Packet[])
static void andOp(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
static void max(const Ordinal, const Packet[], Packet[])
static void max(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
static void min(const Ordinal, const Packet[], Packet[])
static void min(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Smart reference counting pointer class for automatic garbage collection.
Base interface class for user-defined reduction operations for objects that use reference semantics.
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
Default traits class that just returns typeid(T).name().
Base interface class for user-defined reduction operations for objects that use value semantics.
#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.
Namespace of implementation details.
void gather< int, long long >(const long long sendBuf[], const int sendCount, long long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void send< int, unsigned long long >(const Comm< int > &comm, const int count, const unsigned long long sendBuffer[], const int destRank)
void reduceAll< int, unsigned int >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned int sendBuffer[], unsigned int globalReducts[])
RCP< Teuchos::CommRequest< int > > ireceive< int, double >(const Comm< int > &comm, const ArrayRCP< double > &recvBuffer, const int sourceRank)
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 gather< int, unsigned long >(const unsigned long sendBuf[], const int sendCount, unsigned long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void gatherv< int, unsigned long >(const unsigned long sendBuf[], const int sendCount, unsigned long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
void gather< int, int >(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void send< int, double >(const Comm< int > &comm, const int count, const double sendBuffer[], const int destRank)
void gather< int, unsigned int >(const unsigned int sendBuf[], const int sendCount, unsigned int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void send< int, float >(const Comm< int > &comm, const int count, const float sendBuffer[], const int destRank)
void reduceAll< int, unsigned long >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned long sendBuffer[], unsigned long globalReducts[])
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, float >(const ArrayRCP< const float > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, long long >(const Comm< int > &comm, const EReductionType reductType, const int count, const long long sendBuffer[], long long globalReducts[])
void reduceAll< int, double >(const Comm< int > &comm, const EReductionType reductType, const int count, const double sendBuffer[], double globalReducts[])
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.
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, double >(const ArrayRCP< const double > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > isend(const ArrayRCP< const double > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void send< int, unsigned int >(const Comm< int > &comm, const int count, const unsigned int sendBuffer[], const int destRank)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
void reduce< int, int >(const int sendBuf[], int recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned int >(const Comm< int > &comm, const ArrayRCP< unsigned int > &recvBuffer, const int sourceRank)
TEUCHOSCOMM_LIB_DLL_EXPORT void scatter(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void reduce< int, long >(const long sendBuf[], long recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
void reduceAll< int, unsigned long long >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned long long sendBuffer[], unsigned long long globalReducts[])
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned long long >(const ArrayRCP< const unsigned long long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
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 reduceAll< int, long >(const Comm< int > &comm, const EReductionType reductType, const int count, const long sendBuffer[], long globalReducts[])
RawPointerConversionTraits< Container >::Ptr_t getRawPtr(const Container &c)
void send< int, long >(const Comm< int > &comm, const int count, const long sendBuffer[], const int destRank)
void reduceAll< int, float >(const Comm< int > &comm, const EReductionType reductType, const int count, const float sendBuffer[], float globalReducts[])
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned long >(const Comm< int > &comm, const ArrayRCP< unsigned long > &recvBuffer, const int sourceRank)
RCP< Teuchos::CommRequest< int > > ireceive< int, long >(const Comm< int > &comm, const ArrayRCP< long > &recvBuffer, const int sourceRank)
void reduce< int, unsigned long >(const unsigned long sendBuf[], unsigned long recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
void reduceAll< int, int >(const Comm< int > &comm, const EReductionType reductType, const int count, const int sendBuffer[], int globalReducts[])
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned long long >(const Comm< int > &comm, const ArrayRCP< unsigned long long > &recvBuffer, const int sourceRank)
void gatherv< int, long >(const long sendBuf[], const int sendCount, long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned long >(const ArrayRCP< const unsigned long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, short >(const Comm< int > &comm, const EReductionType reductType, const int count, const short sendBuffer[], short globalReducts[])
void reduce< int, double >(const double sendBuf[], double recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
std::string toString(const HashSet< Key > &h)
void gatherv< int, unsigned long long >(const unsigned long long sendBuf[], const int sendCount, unsigned long long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, long >(const ArrayRCP< const long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void gather< int, unsigned long long >(const unsigned long long sendBuf[], const int sendCount, unsigned long long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned int >(const ArrayRCP< const unsigned int > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void gatherv< int, long long >(const long long sendBuf[], const int sendCount, long long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
void reduce< int, unsigned long long >(const unsigned long long sendBuf[], unsigned long long recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
void gather< int, short >(const short sendBuf[], const int sendCount, short recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void gather< int, long >(const long sendBuf[], const int sendCount, long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, short >(const Comm< int > &comm, const ArrayRCP< short > &recvBuffer, const int sourceRank)
void send< int, unsigned long >(const Comm< int > &comm, const int count, const unsigned long sendBuffer[], const int destRank)
ValueTypeReductionOp< Ordinal, Packet > * createOp(const EReductionType reductType)
void send< int, int >(const Comm< int > &comm, const int count, const int sendBuffer[], const int destRank)
void send< int, short >(const Comm< int > &comm, const int count, const short sendBuffer[], const int destRank)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, long long >(const ArrayRCP< const long long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, long long >(const Comm< int > &comm, const ArrayRCP< long long > &recvBuffer, const int sourceRank)
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).
RCP< Teuchos::CommRequest< int > > ireceive< int, float >(const Comm< int > &comm, const ArrayRCP< float > &recvBuffer, const int sourceRank)
void send< int, long long >(const Comm< int > &comm, const int count, const long long sendBuffer[], const int destRank)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, short >(const ArrayRCP< const short > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, int >(const ArrayRCP< const int > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void gatherv< int, short >(const short sendBuf[], const int sendCount, short recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
void gatherv< int, unsigned int >(const unsigned int sendBuf[], const int sendCount, unsigned int recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, int >(const Comm< int > &comm, const ArrayRCP< int > &recvBuffer, const int sourceRank)
void gatherv< int, int >(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
This structure defines some basic traits for the ordinal field type.
This structure defines some basic traits for a scalar field type.