10#ifndef TEUCHOS_COMM_HELPERS_HPP
11#define TEUCHOS_COMM_HELPERS_HPP
13#include "Teuchos_Comm.hpp"
14#include "Teuchos_CommUtilities.hpp"
15#include "Teuchos_CompilerCodeTweakMacros.hpp"
16#include "Teuchos_SerializationTraitsHelpers.hpp"
17#include "Teuchos_ReductionOpHelpers.hpp"
18#include "Teuchos_SerializerHelpers.hpp"
23#include "Teuchos_Workspace.hpp"
26#ifdef HAVE_TEUCHOS_MPI
29#include "Teuchos_DefaultSerialComm.hpp"
38#ifdef HAVE_TEUCHOS_MPI
47std::string getMpiErrorString (
const int errCode);
56template<
typename Ordinal>
63template<
typename Ordinal>
70template<
typename Ordinal>
77template<
typename Ordinal,
typename Packet>
88template<
typename Ordinal,
typename Packet>
99template<
typename Ordinal,
typename Packet>
109template<
typename Ordinal,
typename Packet>
119template<
typename Ordinal,
typename Packet>
129template<
typename Ordinal,
typename Packet>
139template<
typename Ordinal,
typename Packet>
148 (
true, std::logic_error,
"Teuchos::alltoAll<" <<
150 <<
">: Generic version is not yet implemented.");
157template<
typename Ordinal,
typename Packet>
168 (
true, std::logic_error,
"Teuchos::alltoAllv<" <<
170 <<
">: Generic version is not yet implemented.");
178template<
typename Ordinal,
typename Packet,
typename Serializer>
190template<
typename Ordinal,
typename Packet>
203template<
typename Ordinal,
typename Packet>
218template<
typename Ordinal,
typename Packet>
230template<
typename Ordinal,
typename Packet>
242template<
typename Ordinal,
typename Packet,
typename Serializer>
276template<
typename Ordinal,
typename Packet>
289 (
true, std::logic_error,
"Teuchos::scatter<" <<
291 <<
">: Generic version is not yet implemented. This function currently "
292 "only has an implementtion for Ordinal = int and Packet = int. "
293 "See Bug 6375 and Bug 6336.");
296template<
typename Ordinal,
typename Packet>
310 (
true, std::logic_error,
"Teuchos::scatterv<" <<
312 <<
">: Generic version is not yet implemented. This function currently "
313 "only has an implementtion for Ordinal = int and Packet = int. "
314 "See Bug 6375 and Bug 6336.");
344template<
typename Ordinal,
typename Packet>
375template<
typename Ordinal,
typename Packet>
386template<
typename Ordinal,
typename Packet>
397template<
typename Ordinal,
typename Packet>
408template<
typename Ordinal,
typename Packet>
420template<
typename Ordinal,
typename Packet,
typename Serializer>
433template<
typename Ordinal,
typename Packet,
typename Serializer>
446template<
typename Ordinal,
typename Packet>
457template<
typename Ordinal,
typename Packet>
468template<
typename Ordinal,
typename Packet>
479template<
typename Ordinal,
typename Packet>
491template<
typename Ordinal,
typename Packet,
typename Serializer>
504template<
typename Ordinal,
typename Packet,
typename Serializer>
516template<
typename Ordinal,
typename Packet>
523template<
typename Ordinal,
typename Packet>
535template<
typename Ordinal,
typename Packet>
542template<
typename Ordinal,
typename Packet>
554template<
typename Ordinal,
typename Packet>
564template<
typename Ordinal,
typename Packet>
576template<
typename Ordinal,
typename Packet>
587template<
typename Ordinal,
typename Packet,
typename Serializer>
598template<
typename Ordinal,
typename Packet>
608template<
typename Ordinal,
typename Packet>
618template<
typename Ordinal,
typename Packet>
629template<
typename Ordinal,
typename Packet,
typename Serializer>
641template<
typename Ordinal,
typename Packet>
649template<
typename Ordinal,
typename Packet>
661template<
typename Ordinal,
typename Packet>
673template<
typename Ordinal,
typename Packet,
typename Serializer>
685template<
typename Ordinal,
typename Packet>
693template<
typename Ordinal,
typename Packet>
704template<
typename Ordinal,
typename Packet>
716template<
typename Ordinal,
typename Packet,
typename Serializer>
737template<
typename Ordinal,
typename Packet>
745template<
typename Ordinal,
typename Packet>
763template<
typename Ordinal,
typename Packet>
775template<
typename Ordinal,
typename Packet,
typename Serializer>
794template<
typename Ordinal>
829template<
typename Ordinal>
858template<
typename Ordinal>
871template<
typename Ordinal,
typename Packet>
892template<
typename Ordinal,
typename Packet>
913template<
typename Ordinal,
typename Packet>
930template<
typename Ordinal,
typename Packet>
952namespace MixMaxUtilities {
955template<
bool isComparable,
typename Ordinal,
typename Packet>
959template<
typename Ordinal,
typename Packet>
960class Min<true,Ordinal,Packet> {
964 const Packet inBuffer[],
968 for(
int i = 0; i < count; ++i )
969 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
974template<
typename Ordinal,
typename Packet>
975class Min<false,Ordinal,Packet> {
984 true,std::logic_error,
986 <<
" does not support comparison operations!"
992template<
bool isComparable,
typename Ordinal,
typename Packet>
996template<
typename Ordinal,
typename Packet>
997class Max<true,Ordinal,Packet> {
1000 const Ordinal count,
1001 const Packet inBuffer[],
1002 Packet inoutBuffer[]
1005 for(
int i = 0; i < count; ++i )
1006 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
1011template<
typename Ordinal,
typename Packet>
1012class Max<false,Ordinal,Packet> {
1021 true,std::logic_error,
1023 <<
" does not support comparison operations!"
1029template<
bool isComparable,
typename Ordinal,
typename Packet>
1033template<
typename Ordinal,
typename Packet>
1034class AND<true,Ordinal,Packet> {
1037 const Ordinal count,
1038 const Packet inBuffer[],
1039 Packet inoutBuffer[]
1042 for(
int i = 0; i < count; ++i )
1043 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1048template<
typename Ordinal,
typename Packet>
1049class AND<false,Ordinal,Packet> {
1058 true,std::logic_error,
1060 <<
" does not support logical AND operations!"
1069template<
typename Ordinal,
typename Packet>
1071 const Ordinal count,
1076 for(
int i = 0;
i < count; ++
i )
1081template<
typename Ordinal,
typename Packet>
1083 const Ordinal count,
1088 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
min_type;
1093template<
typename Ordinal,
typename Packet>
1095 const Ordinal count,
1100 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
max_type;
1105template<
typename Ordinal,
typename Packet>
1107 const Ordinal count,
1112 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
and_type;
1143template<
typename Ordinal,
typename Packet>
1144ValueTypeReductionOp<Ordinal,Packet>*
1145createOp (
const EReductionType reductType)
1147 typedef ScalarTraits<Packet> ST;
1148 switch (reductType) {
1150 return new SumValueReductionOp<Ordinal,Packet> ();
1153 if (ST::isComparable) {
1154 return new MinValueReductionOp<Ordinal,Packet> ();
1158 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1160 <<
" is not less-than comparable, so it does not make sense to do a "
1161 "MIN reduction with it.");
1166 if (ST::isComparable) {
1167 return new MaxValueReductionOp<Ordinal,Packet> ();
1171 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1173 <<
" is not less-than comparable, so it does not make sense to do a "
1174 "MAX reduction with it.");
1179 return new ANDValueReductionOp<Ordinal, Packet> ();
1183 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1184 "Invalid EReductionType value " << reductType <<
". Valid values "
1185 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1198template<
typename Ordinal>
1199int Teuchos::rank(
const Comm<Ordinal>& comm)
1201 return comm.getRank();
1205template<
typename Ordinal>
1206int Teuchos::size(
const Comm<Ordinal>& comm)
1208 return comm.getSize();
1212template<
typename Ordinal>
1213void Teuchos::barrier(
const Comm<Ordinal>& comm)
1215 TEUCHOS_COMM_TIME_MONITOR(
1216 "Teuchos::CommHelpers: barrier<"
1217 <<OrdinalTraits<Ordinal>::name()
1224template<
typename Ordinal,
typename Packet>
1225void Teuchos::broadcast(
1226 const Comm<Ordinal>& comm,
1227 const int rootRank,
const Ordinal count, Packet buffer[]
1230 TEUCHOS_COMM_TIME_MONITOR(
1231 "Teuchos::CommHelpers: broadcast<"
1232 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1235 ValueTypeSerializationBuffer<Ordinal,Packet>
1236 charBuffer(count,buffer);
1238 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1243template<
typename Ordinal,
typename Packet>
1244void Teuchos::broadcast(
1245 const Comm<Ordinal>& comm,
1247 const ArrayView<Packet> &buffer
1250 broadcast<Ordinal, Packet>(comm, rootRank, buffer.size(), buffer.getRawPtr() );
1254template<
typename Ordinal,
typename Packet>
1255void Teuchos::broadcast(
1256 const Comm<Ordinal>& comm,
1257 const int rootRank, Packet *
object
1260 broadcast<Ordinal,Packet>(comm,rootRank,1,
object);
1264template<
typename Ordinal,
typename Packet>
1265void Teuchos::broadcast(
1266 const Comm<Ordinal>& comm,
1267 const int rootRank,
const Ptr<Packet> &
object
1270 broadcast<Ordinal,Packet>(comm,rootRank,1,
object.getRawPtr());
1274template<
typename Ordinal,
typename Packet>
1275void Teuchos::broadcast(
1276 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1277 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1280 TEUCHOS_COMM_TIME_MONITOR(
1281 "Teuchos::CommHelpers: broadcast<"
1282 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1283 <<
">( reference type )"
1285 ReferenceTypeSerializationBuffer<Ordinal,Packet>
1286 charBuffer(serializer, count, buffer);
1288 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1293template<
typename Ordinal,
typename Packet>
1294void Teuchos::broadcast(
1295 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1296 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
1299 Array<Packet*> bufferPtrArray;
1300 for (
int i = 0; i < buffer.size(); ++i) {
1301 bufferPtrArray.push_back(buffer[i].getRawPtr());
1303 broadcast<Ordinal,Packet>(comm, serializer, rootRank,
1304 buffer.size(), bufferPtrArray.getRawPtr());
1307template<
typename Ordinal,
typename Packet,
typename Serializer>
1308void Teuchos::broadcast(
1309 const Comm<Ordinal>& comm,
1310 const Serializer& serializer,
1311 const int rootRank,
const Ordinal count, Packet buffer[]
1314 TEUCHOS_COMM_TIME_MONITOR(
1315 "Teuchos::CommHelpers: broadcast<"
1316 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1319 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1320 charBuffer(count,buffer,
rcp(&serializer,
false));
1322 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1327template<
typename Ordinal,
typename Packet>
1328void Teuchos::gatherAll(
1329 const Comm<Ordinal>& comm,
1330 const Ordinal sendCount,
const Packet sendBuffer[],
1331 const Ordinal recvCount, Packet recvBuffer[]
1334 TEUCHOS_COMM_TIME_MONITOR(
1335 "Teuchos::CommHelpers: gatherAll<"
1336 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1339 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1340 charSendBuffer(sendCount,sendBuffer);
1341 ValueTypeSerializationBuffer<Ordinal,Packet>
1342 charRecvBuffer(recvCount,recvBuffer);
1344 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1345 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1349template<
typename Ordinal,
typename Packet>
1351Teuchos::gather (
const Packet sendBuf[],
1352 const Ordinal sendCount,
1354 const Ordinal recvCount,
1356 const Comm<Ordinal>& comm)
1358 TEUCHOS_COMM_TIME_MONITOR(
1359 "Teuchos::CommHelpers: gather<"
1360 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1363 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1364 charSendBuffer (sendCount, sendBuf);
1365 ValueTypeSerializationBuffer<Ordinal,Packet>
1366 charRecvBuffer (recvCount, recvBuf);
1367 comm.gather (charSendBuffer.getBytes (),
1368 charSendBuffer.getCharBuffer (),
1369 charRecvBuffer.getBytes (),
1370 charRecvBuffer.getCharBuffer (),
1374template<
typename Ordinal,
typename Packet>
1376Teuchos::gatherv (
const Packet sendBuf[],
1377 const Ordinal sendCount,
1379 const Ordinal recvCounts[],
1380 const Ordinal displs[],
1382 const Comm<Ordinal>& comm)
1405 "Teuchos::gatherv: The general case is not implemented.");
1408template<
typename Ordinal,
typename Packet>
1409void Teuchos::gatherAll(
1410 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1411 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1412 const Ordinal recvCount, Packet*
const recvBuffer[]
1418template<
typename Ordinal,
typename Packet,
typename Serializer>
1419void Teuchos::gatherAll(
1420 const Comm<Ordinal>& comm,
1421 const Serializer& serializer,
1422 const Ordinal sendCount,
const Packet sendBuffer[],
1423 const Ordinal recvCount, Packet recvBuffer[]
1426 TEUCHOS_COMM_TIME_MONITOR(
1427 "Teuchos::CommHelpers: gatherAll<"
1428 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1431 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1432 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1433 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1434 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1436 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1437 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1442template<
typename Ordinal,
typename Packet>
1444Teuchos::reduce (
const Packet sendBuf[],
1446 const Ordinal count,
1447 const EReductionType reductType,
1449 const Comm<Ordinal>& comm)
1455 (
true, std::logic_error,
"Teuchos::reduce<" <<
1456 TypeNameTraits<Ordinal>::name () <<
"," << TypeNameTraits<Packet>::name ()
1457 <<
">: Generic version not implemented. We only implement this function "
1458 "for Ordinal = int and Packet = specific types.");
1462template<
typename Ordinal,
typename Packet>
1463void Teuchos::reduceAll(
1464 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp
1465 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1468 TEUCHOS_COMM_TIME_MONITOR(
1469 "Teuchos::CommHelpers: reduceAll<"
1470 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1471 <<
">( value type, user-defined op )"
1473 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1474 charSendBuffer(count,sendBuffer);
1475 ValueTypeSerializationBuffer<Ordinal,Packet>
1476 charGlobalReducts(count,globalReducts);
1477 CharToValueTypeReductionOp<Ordinal,Packet>
1478 charReductOp(
rcp(&reductOp,
false));
1480 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1481 ,charGlobalReducts.getCharBuffer()
1486template<
typename Ordinal,
typename Packet>
1487void Teuchos::reduceAll(
1488 const Comm<Ordinal>& comm,
const EReductionType reductType,
1489 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1492 TEUCHOS_COMM_TIME_MONITOR(
1493 "Teuchos::CommHelpers: reduceAll<"
1494 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1495 <<
">( value type, "<<toString(reductType)<<
" )"
1498 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
1499 createOp<Ordinal, Packet> (reductType);
1501 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1503 catch (std::exception& e) {
1519#ifdef HAVE_TEUCHOS_COMPLEX
1522TEUCHOSCOMM_LIB_DLL_EXPORT
void
1523reduceAll<int, std::complex<double> > (
const Comm<int>& comm,
1524 const EReductionType reductType,
1526 const std::complex<double> sendBuffer[],
1527 std::complex<double> globalReducts[]);
1529TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1530ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1531 const ArrayRCP<std::complex<double> >& recvBuffer,
1532 const int sourceRank);
1534TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1535ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1536 const int sourceRank,
1538 const Comm<int>& comm);
1540TEUCHOSCOMM_LIB_DLL_EXPORT
void
1541send<int, std::complex<double> > (
const Comm<int>& comm,
1543 const std::complex<double> sendBuffer[],
1544 const int destRank);
1546TEUCHOSCOMM_LIB_DLL_EXPORT
void
1547send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1551 const Comm<int>& comm);
1553TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1554isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1557 const Comm<int>& comm);
1561TEUCHOSCOMM_LIB_DLL_EXPORT
void
1562reduceAll<int, std::complex<float> > (
const Comm<int>& comm,
1563 const EReductionType reductType,
1565 const std::complex<float> sendBuffer[],
1566 std::complex<float> globalReducts[]);
1568TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1569ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1570 const ArrayRCP<std::complex<float> >& recvBuffer,
1571 const int sourceRank);
1573TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1574ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1575 const int sourceRank,
1577 const Comm<int>& comm);
1579TEUCHOSCOMM_LIB_DLL_EXPORT
void
1580send<int, std::complex<float> > (
const Comm<int>& comm,
1582 const std::complex<float> sendBuffer[],
1583 const int destRank);
1585TEUCHOSCOMM_LIB_DLL_EXPORT
void
1586send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1590 const Comm<int>& comm);
1592TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1593isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1596 const Comm<int>& comm);
1602TEUCHOSCOMM_LIB_DLL_EXPORT
void
1603alltoAllv<int, double> (
const double sendBuf[],
1604 const int sendCounts[],
1605 const int sendDispls[],
1607 const int recvCounts[],
1608 const int recvDispls[],
1609 const Comm<int>& comm);
1612TEUCHOSCOMM_LIB_DLL_EXPORT
void
1613reduceAll<int, double> (
const Comm<int>& comm,
1614 const EReductionType reductType,
1616 const double sendBuffer[],
1617 double globalReducts[]);
1619TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1620ireceive<int, double> (
const Comm<int>& comm,
1621 const ArrayRCP<double>& recvBuffer,
1622 const int sourceRank);
1624TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1625ireceive<int, double> (
const ArrayRCP<double> &recvBuffer,
1626 const int sourceRank,
1628 const Comm<int>& comm);
1630TEUCHOSCOMM_LIB_DLL_EXPORT
void
1631send<int, double> (
const Comm<int>& comm,
1633 const double sendBuffer[],
1634 const int destRank);
1636TEUCHOSCOMM_LIB_DLL_EXPORT
void
1637send<int, double> (
const double sendBuffer[],
1641 const Comm<int>& comm);
1643TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1644isend<int, double> (
const ArrayRCP<const double>& sendBuffer,
1647 const Comm<int>& comm);
1650TEUCHOSCOMM_LIB_DLL_EXPORT
void
1651gatherv<int, double> (
const double sendBuf[],
1652 const int sendCount,
1654 const int recvCounts[],
1657 const Comm<int>& comm);
1661TEUCHOSCOMM_LIB_DLL_EXPORT
void
1662reduceAll<int, float> (
const Comm<int>& comm,
1663 const EReductionType reductType,
1665 const float sendBuffer[],
1666 float globalReducts[]);
1668TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1669ireceive<int, float> (
const Comm<int>& comm,
1670 const ArrayRCP<float>& recvBuffer,
1671 const int sourceRank);
1673TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1674ireceive<int, float> (
const ArrayRCP<float> &recvBuffer,
1675 const int sourceRank,
1677 const Comm<int>& comm);
1679TEUCHOSCOMM_LIB_DLL_EXPORT
void
1680send<int, float> (
const Comm<int>& comm,
1682 const float sendBuffer[],
1683 const int destRank);
1685TEUCHOSCOMM_LIB_DLL_EXPORT
void
1686send<int, float> (
const float sendBuffer[],
1690 const Comm<int>& comm);
1692TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1693isend<int, float> (
const ArrayRCP<const float>& sendBuffer,
1696 const Comm<int>& comm);
1699TEUCHOSCOMM_LIB_DLL_EXPORT
void
1700gatherv<int, float> (
const float sendBuf[],
1701 const int sendCount,
1703 const int recvCounts[],
1706 const Comm<int>& comm);
1710TEUCHOSCOMM_LIB_DLL_EXPORT
void
1711gather<int, long long> (
const long long sendBuf[],
1712 const int sendCount,
1713 long long recvBuf[],
1714 const int recvCount,
1716 const Comm<int>& comm);
1718TEUCHOSCOMM_LIB_DLL_EXPORT
void
1719gatherv<int, long long> (
const long long sendBuf[],
1720 const int sendCount,
1721 long long recvBuf[],
1722 const int recvCounts[],
1725 const Comm<int>& comm);
1727TEUCHOSCOMM_LIB_DLL_EXPORT
void
1728reduceAll<int, long long> (
const Comm<int>& comm,
1729 const EReductionType reductType,
1731 const long long sendBuffer[],
1732 long long globalReducts[]);
1734TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1735ireceive<int, long long> (
const Comm<int>& comm,
1736 const ArrayRCP<long long>& recvBuffer,
1737 const int sourceRank);
1739TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1740ireceive<int, long long> (
const ArrayRCP<long long> &recvBuffer,
1741 const int sourceRank,
1743 const Comm<int>& comm);
1745TEUCHOSCOMM_LIB_DLL_EXPORT
void
1746send<int, long long> (
const Comm<int>& comm,
1748 const long long sendBuffer[],
1749 const int destRank);
1751TEUCHOSCOMM_LIB_DLL_EXPORT
void
1752send<int, long long> (
const long long sendBuffer[],
1756 const Comm<int>& comm);
1758TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1759isend<int, long long> (
const ArrayRCP<const long long>& sendBuffer,
1762 const Comm<int>& comm);
1766TEUCHOSCOMM_LIB_DLL_EXPORT
void
1767gather<int, unsigned long long> (
const unsigned long long sendBuf[],
1768 const int sendCount,
1769 unsigned long long recvBuf[],
1770 const int recvCount,
1772 const Comm<int>& comm);
1774TEUCHOSCOMM_LIB_DLL_EXPORT
void
1775gatherv<int, unsigned long long> (
const unsigned long long sendBuf[],
1776 const int sendCount,
1777 unsigned long long recvBuf[],
1778 const int recvCounts[],
1781 const Comm<int>& comm);
1783TEUCHOSCOMM_LIB_DLL_EXPORT
void
1784reduceAll<int, unsigned long long> (
const Comm<int>& comm,
1785 const EReductionType reductType,
1787 const unsigned long long sendBuffer[],
1788 unsigned long long globalReducts[]);
1790TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1791ireceive<int, unsigned long long> (
const Comm<int>& comm,
1792 const ArrayRCP<unsigned long long>& recvBuffer,
1793 const int sourceRank);
1795TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1796ireceive<int, unsigned long long> (
const ArrayRCP<unsigned long long> &recvBuffer,
1797 const int sourceRank,
1799 const Comm<int>& comm);
1801TEUCHOSCOMM_LIB_DLL_EXPORT
void
1802send<int, unsigned long long> (
const Comm<int>& comm,
1804 const unsigned long long sendBuffer[],
1805 const int destRank);
1807TEUCHOSCOMM_LIB_DLL_EXPORT
void
1808send<int, unsigned long long> (
const unsigned long long sendBuffer[],
1812 const Comm<int>& comm);
1814TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1815isend<int, unsigned long long> (
const ArrayRCP<const unsigned long long>& sendBuffer,
1818 const Comm<int>& comm);
1822TEUCHOSCOMM_LIB_DLL_EXPORT
void
1823gather<int, long> (
const long sendBuf[],
1824 const int sendCount,
1826 const int recvCount,
1828 const Comm<int>& comm);
1830TEUCHOSCOMM_LIB_DLL_EXPORT
void
1831gatherv<int, long> (
const long sendBuf[],
1832 const int sendCount,
1834 const int recvCounts[],
1837 const Comm<int>& comm);
1839TEUCHOSCOMM_LIB_DLL_EXPORT
void
1840reduceAll<int, long> (
const Comm<int>& comm,
1841 const EReductionType reductType,
1843 const long sendBuffer[],
1844 long globalReducts[]);
1846TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1847ireceive<int, long> (
const Comm<int>& comm,
1848 const ArrayRCP<long>& recvBuffer,
1849 const int sourceRank);
1851TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1852ireceive<int, long> (
const ArrayRCP<long> &recvBuffer,
1853 const int sourceRank,
1855 const Comm<int>& comm);
1857TEUCHOSCOMM_LIB_DLL_EXPORT
void
1858send<int, long> (
const Comm<int>& comm,
1860 const long sendBuffer[],
1861 const int destRank);
1863TEUCHOSCOMM_LIB_DLL_EXPORT
void
1864send<int, long> (
const long sendBuffer[],
1868 const Comm<int>& comm);
1870TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1871isend<int, long> (
const ArrayRCP<const long>& sendBuffer,
1874 const Comm<int>& comm);
1878TEUCHOSCOMM_LIB_DLL_EXPORT
void
1879gather<int, unsigned long> (
const unsigned long sendBuf[],
1880 const int sendCount,
1881 unsigned long recvBuf[],
1882 const int recvCount,
1884 const Comm<int>& comm);
1886TEUCHOSCOMM_LIB_DLL_EXPORT
void
1887gatherv<int, unsigned long> (
const unsigned long sendBuf[],
1888 const int sendCount,
1889 unsigned long recvBuf[],
1890 const int recvCounts[],
1893 const Comm<int>& comm);
1895TEUCHOSCOMM_LIB_DLL_EXPORT
void
1896reduceAll<int, unsigned long> (
const Comm<int>& comm,
1897 const EReductionType reductType,
1899 const unsigned long sendBuffer[],
1900 unsigned long globalReducts[]);
1902TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1903ireceive<int, unsigned long> (
const Comm<int>& comm,
1904 const ArrayRCP<unsigned long>& recvBuffer,
1905 const int sourceRank);
1907TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1908ireceive<int, unsigned long> (
const ArrayRCP<unsigned long> &recvBuffer,
1909 const int sourceRank,
1911 const Comm<int>& comm);
1913TEUCHOSCOMM_LIB_DLL_EXPORT
void
1914send<int, unsigned long> (
const Comm<int>& comm,
1916 const unsigned long sendBuffer[],
1917 const int destRank);
1919TEUCHOSCOMM_LIB_DLL_EXPORT
void
1920send<int, unsigned long> (
const unsigned long sendBuffer[],
1924 const Comm<int>& comm);
1926TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1927isend<int, unsigned long> (
const ArrayRCP<const unsigned long>& sendBuffer,
1930 const Comm<int>& comm);
1934TEUCHOSCOMM_LIB_DLL_EXPORT
void
1935alltoAll<int, int> (
const int sendBuf[],
1936 const int sendCount,
1938 const int recvCount,
1939 const Comm<int>& comm);
1942TEUCHOSCOMM_LIB_DLL_EXPORT
void
1943alltoAllv<int, int> (
const int sendBuf[],
1944 const int sendCounts[],
1945 const int sendDispls[],
1947 const int recvCounts[],
1948 const int recvDispls[],
1949 const Comm<int>& comm);
1952TEUCHOSCOMM_LIB_DLL_EXPORT
void
1953gather<int, int> (
const int sendBuf[],
1954 const int sendCount,
1956 const int recvCount,
1958 const Comm<int>& comm);
1960TEUCHOSCOMM_LIB_DLL_EXPORT
void
1961gatherv<int, int> (
const int sendBuf[],
1962 const int sendCount,
1964 const int recvCounts[],
1967 const Comm<int>& comm);
1969TEUCHOSCOMM_LIB_DLL_EXPORT
void
1970scatter (
const int sendBuf[],
1971 const int sendCount,
1973 const int recvCount,
1975 const Comm<int>& comm);
1977TEUCHOSCOMM_LIB_DLL_EXPORT
void
1978scatterv (
const int sendBuf[],
1979 const int sendCounts[],
1982 const int recvCount,
1984 const Comm<int>& comm);
1986TEUCHOSCOMM_LIB_DLL_EXPORT
void
1987scatterv (
const double sendBuf[],
1988 const int sendCounts[],
1991 const int recvCount,
1993 const Comm<int>& comm);
1995TEUCHOSCOMM_LIB_DLL_EXPORT
void
1996scatterv (
const float sendBuf[],
1997 const int sendCounts[],
2000 const int recvCount,
2002 const Comm<int>& comm);
2004TEUCHOSCOMM_LIB_DLL_EXPORT
void
2005reduce<int, int> (
const int sendBuf[],
2008 const EReductionType reductType,
2010 const Comm<int>& comm);
2012TEUCHOSCOMM_LIB_DLL_EXPORT
void
2013reduce<int, long> (
const long sendBuf[],
2016 const EReductionType reductType,
2018 const Comm<int>& comm);
2020TEUCHOSCOMM_LIB_DLL_EXPORT
void
2021reduce<int, unsigned long> (
const unsigned long sendBuf[],
2022 unsigned long recvBuf[],
2024 const EReductionType reductType,
2026 const Comm<int>& comm);
2028TEUCHOSCOMM_LIB_DLL_EXPORT
void
2029reduce<int, unsigned long long > (
const unsigned long long sendBuf[],
2030 unsigned long long recvBuf[],
2032 const EReductionType reductType,
2034 const Comm<int>& comm);
2036TEUCHOSCOMM_LIB_DLL_EXPORT
void
2037reduce<int, double> (
const double sendBuf[],
2040 const EReductionType reductType,
2042 const Comm<int>& comm);
2044TEUCHOSCOMM_LIB_DLL_EXPORT
void
2045reduceAll<int, int> (
const Comm<int>& comm,
2046 const EReductionType reductType,
2048 const int sendBuffer[],
2049 int globalReducts[]);
2052TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2053ireceive<int, int> (
const Comm<int>& comm,
2054 const ArrayRCP<int>& recvBuffer,
2055 const int sourceRank);
2057TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2058ireceive<int, int> (
const ArrayRCP<int> &recvBuffer,
2059 const int sourceRank,
2061 const Comm<int>& comm);
2063TEUCHOSCOMM_LIB_DLL_EXPORT
void
2064send<int, int> (
const Comm<int>& comm,
2066 const int sendBuffer[],
2067 const int destRank);
2069TEUCHOSCOMM_LIB_DLL_EXPORT
void
2070send<int, int> (
const int sendBuffer[],
2074 const Comm<int>& comm);
2076TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2077isend<int, int> (
const ArrayRCP<const int>& sendBuffer,
2080 const Comm<int>& comm);
2084TEUCHOSCOMM_LIB_DLL_EXPORT
void
2085gather<int, unsigned int> (
const unsigned int sendBuf[],
2086 const int sendCount,
2087 unsigned int recvBuf[],
2088 const int recvCount,
2090 const Comm<int>& comm);
2092TEUCHOSCOMM_LIB_DLL_EXPORT
void
2093gatherv<int, unsigned int> (
const unsigned int sendBuf[],
2094 const int sendCount,
2095 unsigned int recvBuf[],
2096 const int recvCounts[],
2099 const Comm<int>& comm);
2101TEUCHOSCOMM_LIB_DLL_EXPORT
void
2102reduceAll<int, unsigned int> (
const Comm<int>& comm,
2103 const EReductionType reductType,
2105 const unsigned int sendBuffer[],
2106 unsigned int globalReducts[]);
2108TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2109ireceive<int, unsigned int> (
const Comm<int>& comm,
2110 const ArrayRCP<unsigned int>& recvBuffer,
2111 const int sourceRank);
2113TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2114ireceive<int, unsigned int> (
const ArrayRCP<unsigned int> &recvBuffer,
2115 const int sourceRank,
2117 const Comm<int>& comm);
2119TEUCHOSCOMM_LIB_DLL_EXPORT
void
2120send<int, unsigned int> (
const Comm<int>& comm,
2122 const unsigned int sendBuffer[],
2123 const int destRank);
2125TEUCHOSCOMM_LIB_DLL_EXPORT
void
2126send<int, unsigned int> (
const unsigned int sendBuffer[],
2130 const Comm<int>& comm);
2132TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2133isend<int, unsigned int> (
const ArrayRCP<const unsigned int>& sendBuffer,
2136 const Comm<int>& comm);
2140TEUCHOSCOMM_LIB_DLL_EXPORT
void
2141gather<int, short> (
const short sendBuf[],
2142 const int sendCount,
2144 const int recvCount,
2146 const Comm<int>& comm);
2148TEUCHOSCOMM_LIB_DLL_EXPORT
void
2149gatherv<int, short> (
const short sendBuf[],
2150 const int sendCount,
2152 const int recvCounts[],
2155 const Comm<int>& comm);
2157TEUCHOSCOMM_LIB_DLL_EXPORT
void
2158reduceAll<int, short> (
const Comm<int>& comm,
2159 const EReductionType reductType,
2161 const short sendBuffer[],
2162 short globalReducts[]);
2164TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2165ireceive<int, short> (
const Comm<int>& comm,
2166 const ArrayRCP<short>& recvBuffer,
2167 const int sourceRank);
2169TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2170ireceive<int, short> (
const ArrayRCP<short> &recvBuffer,
2171 const int sourceRank,
2173 const Comm<int>& comm);
2175TEUCHOSCOMM_LIB_DLL_EXPORT
void
2176send<int, short> (
const Comm<int>& comm,
2178 const short sendBuffer[],
2179 const int destRank);
2181TEUCHOSCOMM_LIB_DLL_EXPORT
void
2182send<int, short> (
const short sendBuffer[],
2186 const Comm<int>& comm);
2188TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2189isend<int, short> (
const ArrayRCP<const short>& sendBuffer,
2192 const Comm<int>& comm);
2205TEUCHOSCOMM_LIB_DLL_EXPORT
void
2206reduceAll<int, char> (
const Comm<int>& comm,
2207 const EReductionType reductType,
2209 const char sendBuffer[],
2210 char globalReducts[]);
2215template<
typename Ordinal,
typename Packet>
2216void Teuchos::reduceAll(
2217 const Comm<Ordinal>& comm,
const EReductionType reductType
2218 ,
const Packet &send,
const Ptr<Packet> &globalReduct
2223 reduceAll<Ordinal,Packet>(comm, reductType, 1, &send, &*globalReduct);
2227template<
typename Ordinal,
typename Packet>
2228void Teuchos::reduceAll(
2229 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2230 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2231 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2234 TEUCHOS_COMM_TIME_MONITOR(
2235 "Teuchos::CommHelpers: reduceAll<"
2236 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2237 <<
">( reference type )"
2239 ConstReferenceTypeSerializationBuffer<Ordinal,Packet>
2240 charSendBuffer(serializer,count,sendBuffer);
2241 ReferenceTypeSerializationBuffer<Ordinal,Packet>
2242 charGlobalReducts(serializer,count,globalReducts);
2243 CharToReferenceTypeReductionOp<Ordinal,Packet>
2244 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2246 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2247 ,charGlobalReducts.getCharBuffer()
2251template<
typename Ordinal,
typename Packet,
typename Serializer>
2252void Teuchos::reduceAll(
2253 const Comm<Ordinal>& comm,
2254 const Serializer& serializer,
2255 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2256 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2259 TEUCHOS_COMM_TIME_MONITOR(
2260 "Teuchos::CommHelpers: reduceAll<"
2261 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2262 <<
">( value type, user-defined op )"
2264 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2265 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2266 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2267 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2268 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2269 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2271 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2272 ,charGlobalReducts.getCharBuffer()
2277template<
typename Ordinal,
typename Packet,
typename Serializer>
2278void Teuchos::reduceAll(
2279 const Comm<Ordinal>& comm,
2280 const Serializer& serializer,
2281 const EReductionType reductType,
2282 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2285 TEUCHOS_COMM_TIME_MONITOR(
2286 "Teuchos::CommHelpers: reduceAll<"
2287 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2288 <<
">( value type, "<<toString(reductType)<<
" )"
2291 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2292 createOp<Ordinal, Packet> (reductType);
2294 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2296 catch (std::exception& e) {
2304template<
typename Ordinal,
typename Packet>
2306 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2307 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2310 TEUCHOS_COMM_TIME_MONITOR(
2311 "Teuchos::CommHelpers: scan<"
2312 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2313 <<
">( value type, user-defined op )"
2315 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2316 charSendBuffer(count,sendBuffer);
2317 ValueTypeSerializationBuffer<Ordinal,Packet>
2318 charScanReducts(count,scanReducts);
2319 CharToValueTypeReductionOp<Ordinal,Packet>
2320 charReductOp(
rcp(&reductOp,
false));
2322 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2323 ,charScanReducts.getCharBuffer()
2328template<
typename Ordinal,
typename Packet>
2330 const Comm<Ordinal>& comm,
const EReductionType reductType,
2331 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2334 TEUCHOS_COMM_TIME_MONITOR(
2335 "Teuchos::CommHelpers: scan<"
2336 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2337 <<
">( value type, "<<toString(reductType)<<
" )"
2340 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2341 createOp<Ordinal, Packet> (reductType);
2343 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2345 catch (std::exception& e) {
2353template<
typename Ordinal,
typename Packet>
2355 const Comm<Ordinal>& comm,
const EReductionType reductType,
2356 const Packet &send,
const Ptr<Packet> &scanReduct
2359 scan<Ordinal,Packet>(comm, reductType, 1, &send, &*scanReduct);
2363template<
typename Ordinal,
typename Packet>
2365 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2366 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2367 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2373template<
typename Ordinal,
typename Packet,
typename Serializer>
2375 const Comm<Ordinal>& comm,
2376 const Serializer& serializer,
2377 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2378 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2381 TEUCHOS_COMM_TIME_MONITOR(
2382 "Teuchos::CommHelpers: scan<"
2383 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2384 <<
">( value type, user-defined op )"
2386 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2387 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2388 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2389 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2390 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2391 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2393 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2394 ,charScanReducts.getCharBuffer()
2399template<
typename Ordinal,
typename Packet,
typename Serializer>
2401 const Comm<Ordinal>& comm,
2402 const Serializer& serializer,
2403 const EReductionType reductType,
2404 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2407 TEUCHOS_COMM_TIME_MONITOR(
2408 "Teuchos::CommHelpers: scan<"
2409 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2410 <<
">( value type, "<<toString(reductType)<<
" )"
2413 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2414 createOp<Ordinal, Packet> (reductType);
2416 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2418 catch (std::exception& e) {
2425template<
typename Ordinal,
typename Packet>
2427 const Comm<Ordinal>& comm,
2428 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2431 TEUCHOS_COMM_TIME_MONITOR(
2432 "Teuchos::CommHelpers: send<"
2433 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2436 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2437 charSendBuffer(count,sendBuffer);
2439 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2444template<
typename Ordinal,
typename Packet>
2447 const Ordinal count,
2452 TEUCHOS_COMM_TIME_MONITOR(
2453 "Teuchos::CommHelpers: send<"
2461template<
typename Ordinal,
typename Packet>
2463 const Comm<Ordinal>& comm,
2464 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2467 TEUCHOS_COMM_TIME_MONITOR(
2468 "Teuchos::CommHelpers: ssend<"
2469 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2472 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2473 charSendBuffer(count,sendBuffer);
2475 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2480template<
typename Ordinal,
typename Packet>
2483 const Ordinal count,
2488 TEUCHOS_COMM_TIME_MONITOR(
2489 "Teuchos::CommHelpers: ssend<"
2500template<
typename Ordinal,
typename Packet>
2502 const Comm<Ordinal>& comm,
2503 const Packet &send,
const int destRank
2509template<
typename Ordinal,
typename Packet>
2511 const Comm<Ordinal>& comm,
2512 const Packet &send,
const int destRank
2518template<
typename Ordinal,
typename Packet>
2520 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2521 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2527template<
typename Ordinal,
typename Packet,
typename Serializer>
2529 const Comm<Ordinal>& comm,
2530 const Serializer& serializer,
2531 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2534 TEUCHOS_COMM_TIME_MONITOR(
2535 "Teuchos::CommHelpers: send<"
2536 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2539 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2540 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2542 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2547template<
typename Ordinal,
typename Packet>
2548int Teuchos::receive(
2549 const Comm<Ordinal>& comm,
2550 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2553 TEUCHOS_COMM_TIME_MONITOR(
2554 "Teuchos::CommHelpers: receive<"
2555 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2558 ValueTypeSerializationBuffer<Ordinal,Packet>
2559 charRecvBuffer(count,recvBuffer);
2560 return comm.receive(
2562 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2567template<
typename Ordinal,
typename Packet>
2568int Teuchos::receive(
2569 const Comm<Ordinal>& comm,
2570 const int sourceRank, Packet *recv
2577template<
typename Ordinal,
typename Packet>
2578int Teuchos::receive(
2579 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2580 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2586template<
typename Ordinal,
typename Packet,
typename Serializer>
2587int Teuchos::receive(
2588 const Comm<Ordinal>& comm,
2589 const Serializer& serializer,
2590 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2593 TEUCHOS_COMM_TIME_MONITOR(
2594 "Teuchos::CommHelpers: receive<"
2595 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2598 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2599 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2600 return comm.receive(
2602 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2606template<
typename Ordinal,
typename Packet>
2608 const Comm<Ordinal>& comm,
2609 const ArrayView<const Packet> &sendBuffer,
2613 TEUCHOS_COMM_TIME_MONITOR(
2614 "Teuchos::CommHelpers: readySend<"
2615 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2618 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2619 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2620 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2623template<
typename Ordinal,
typename Packet>
2626 const Ordinal count,
2631 TEUCHOS_COMM_TIME_MONITOR(
2632 "Teuchos::CommHelpers: readySend<"
2643template<
typename Ordinal,
typename Packet>
2645 const Comm<Ordinal>& comm,
2650 readySend<Ordinal, Packet>( comm, arrayView(&send,1), destRank );
2653template<
typename Ordinal,
typename Packet,
typename Serializer>
2655 const Comm<Ordinal>& comm,
2656 const Serializer& serializer,
2657 const ArrayView<const Packet> &sendBuffer,
2661 TEUCHOS_COMM_TIME_MONITOR(
2662 "Teuchos::CommHelpers: readySend<"
2663 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2666 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2667 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2668 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2671template<
typename Ordinal,
typename Packet>
2674 const Comm<Ordinal>& comm,
2675 const ArrayRCP<const Packet> &sendBuffer,
2679 TEUCHOS_COMM_TIME_MONITOR(
2680 "Teuchos::CommHelpers: isend<"
2681 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2684 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2685 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2686 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2687 charSendBuffer.getCharBufferView(), destRank );
2688 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2692template<
typename Ordinal,
typename Packet>
2694Teuchos::isend (
const ArrayRCP<const Packet> &sendBuffer,
2697 const Comm<Ordinal>& comm)
2699 TEUCHOS_COMM_TIME_MONITOR(
2700 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2701 << TypeNameTraits<Packet>::name () <<
">");
2702 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2703 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2704 RCP<CommRequest<Ordinal> > commRequest =
2705 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2706 set_extra_data (sendBuffer,
"buffer", inOutArg (commRequest));
2710template<
typename Ordinal,
typename Packet>
2713 const Comm<Ordinal>& comm,
2714 const RCP<const Packet> &send,
2718 const ArrayRCP<const Packet> sendBuffer =
2719 arcpWithEmbeddedObj(
send.
get(), 0, 1, send,
false );
2722 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2725template<
typename Ordinal,
typename Packet,
typename Serializer>
2728 const Comm<Ordinal>& comm,
2729 const Serializer& serializer,
2730 const ArrayRCP<const Packet> &sendBuffer,
2734 TEUCHOS_COMM_TIME_MONITOR(
2735 "Teuchos::CommHelpers: isend<"
2736 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2739 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2740 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2741 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2742 charSendBuffer.getCharBufferView(), destRank );
2743 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2747template<
typename Ordinal,
typename Packet>
2750 const Comm<Ordinal>& comm,
2751 const ArrayRCP<Packet> &recvBuffer,
2752 const int sourceRank
2755 TEUCHOS_COMM_TIME_MONITOR(
2756 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2757 ValueTypeSerializationBuffer<Ordinal,Packet>
2758 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2759 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2760 charRecvBuffer.getCharBufferView(), sourceRank );
2761 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2765template<
typename Ordinal,
typename Packet>
2768 const int sourceRank,
2772 TEUCHOS_COMM_TIME_MONITOR(
2773 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2774 ValueTypeSerializationBuffer<int, Packet>
2775 charRecvBuffer (recvBuffer.size (), recvBuffer.
getRawPtr ());
2776 RCP<CommRequest<int> > commRequest =
2777 comm.ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2778 set_extra_data (recvBuffer,
"buffer", inOutArg (commRequest));
2782template<
typename Ordinal,
typename Packet>
2785 const Comm<Ordinal>& comm,
2786 const RCP<Packet> &recv,
2787 const int sourceRank
2790 const ArrayRCP<Packet> recvBuffer =
2791 arcpWithEmbeddedObj( recv.get(), 0, 1, recv,
false );
2794 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2797template<
typename Ordinal,
typename Packet,
typename Serializer>
2800 const Comm<Ordinal>& comm,
2801 const Serializer& serializer,
2802 const ArrayRCP<Packet> &recvBuffer,
2803 const int sourceRank
2806 TEUCHOS_COMM_TIME_MONITOR(
2807 "Teuchos::CommHelpers: ireceive<"
2808 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2811 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2812 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2813 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2814 charRecvBuffer.getCharBufferView(), sourceRank );
2815 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2819template<
typename Ordinal>
2820void Teuchos::waitAll(
2821 const Comm<Ordinal>& comm,
2822 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
2825 comm.waitAll(requests);
2829template<
typename Ordinal>
2831Teuchos::waitAll (
const Comm<Ordinal>& comm,
2832 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
2833 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses)
2835 comm.waitAll (requests, statuses);
2839template<
typename Ordinal>
2841Teuchos::wait (
const Comm<Ordinal>& comm,
2842 const Ptr<RCP<CommRequest<Ordinal> > > &request)
2844 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
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.
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.
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.
void alltoAll(const Packet sendBuf[], const Ordinal sendCount, Packet recvBuf[], const Ordinal recvCount, const Comm< Ordinal > &comm)
Scatter values from all processes to all processes.
int rank(const Comm< Ordinal > &comm)
Get the process rank.
void alltoAllv(const Packet sendBuf[], const Ordinal sendCounts[], const Ordinal sendDispls[], Packet recvBuf[], const Ordinal recvCounts[], const Ordinal recvDispls[], const Comm< Ordinal > &comm)
Scatter values from all processes to all processes.
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.
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.
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.
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.
Smart reference counting pointer class for automatic garbage collection.
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
T * get() const
Get the raw C++ pointer to the underlying object.
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().
static std::string 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.
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
Avoid warning about unreachable or missing return from function.
Namespace of implementation details.
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).
This structure defines some basic traits for the ordinal field type.