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>
140template<
typename Ordinal,
typename Packet,
typename Serializer>
152template<
typename Ordinal,
typename Packet>
165template<
typename Ordinal,
typename Packet>
180template<
typename Ordinal,
typename Packet>
192template<
typename Ordinal,
typename Packet>
204template<
typename Ordinal,
typename Packet,
typename Serializer>
238template<
typename Ordinal,
typename Packet>
251 (
true, std::logic_error,
"Teuchos::scatter<" <<
253 <<
">: Generic version is not yet implemented. This function currently "
254 "only has an implementtion for Ordinal = int and Packet = int. "
255 "See Bug 6375 and Bug 6336.");
258template<
typename Ordinal,
typename Packet>
272 (
true, std::logic_error,
"Teuchos::scatterv<" <<
274 <<
">: Generic version is not yet implemented. This function currently "
275 "only has an implementtion for Ordinal = int and Packet = int. "
276 "See Bug 6375 and Bug 6336.");
306template<
typename Ordinal,
typename Packet>
337template<
typename Ordinal,
typename Packet>
348template<
typename Ordinal,
typename Packet>
359template<
typename Ordinal,
typename Packet>
370template<
typename Ordinal,
typename Packet>
382template<
typename Ordinal,
typename Packet,
typename Serializer>
395template<
typename Ordinal,
typename Packet,
typename Serializer>
408template<
typename Ordinal,
typename Packet>
419template<
typename Ordinal,
typename Packet>
430template<
typename Ordinal,
typename Packet>
441template<
typename Ordinal,
typename Packet>
453template<
typename Ordinal,
typename Packet,
typename Serializer>
466template<
typename Ordinal,
typename Packet,
typename Serializer>
478template<
typename Ordinal,
typename Packet>
485template<
typename Ordinal,
typename Packet>
497template<
typename Ordinal,
typename Packet>
504template<
typename Ordinal,
typename Packet>
516template<
typename Ordinal,
typename Packet>
526template<
typename Ordinal,
typename Packet>
538template<
typename Ordinal,
typename Packet>
549template<
typename Ordinal,
typename Packet,
typename Serializer>
560template<
typename Ordinal,
typename Packet>
570template<
typename Ordinal,
typename Packet>
580template<
typename Ordinal,
typename Packet>
591template<
typename Ordinal,
typename Packet,
typename Serializer>
603template<
typename Ordinal,
typename Packet>
611template<
typename Ordinal,
typename Packet>
623template<
typename Ordinal,
typename Packet>
635template<
typename Ordinal,
typename Packet,
typename Serializer>
647template<
typename Ordinal,
typename Packet>
655template<
typename Ordinal,
typename Packet>
666template<
typename Ordinal,
typename Packet>
678template<
typename Ordinal,
typename Packet,
typename Serializer>
699template<
typename Ordinal,
typename Packet>
707template<
typename Ordinal,
typename Packet>
725template<
typename Ordinal,
typename Packet>
737template<
typename Ordinal,
typename Packet,
typename Serializer>
756template<
typename Ordinal>
791template<
typename Ordinal>
820template<
typename Ordinal>
833template<
typename Ordinal,
typename Packet>
854template<
typename Ordinal,
typename Packet>
875template<
typename Ordinal,
typename Packet>
892template<
typename Ordinal,
typename Packet>
914namespace MixMaxUtilities {
917template<
bool isComparable,
typename Ordinal,
typename Packet>
921template<
typename Ordinal,
typename Packet>
922class Min<true,Ordinal,Packet> {
926 const Packet inBuffer[],
930 for(
int i = 0; i < count; ++i )
931 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
936template<
typename Ordinal,
typename Packet>
937class Min<false,Ordinal,Packet> {
946 true,std::logic_error,
948 <<
" does not support comparison operations!"
954template<
bool isComparable,
typename Ordinal,
typename Packet>
958template<
typename Ordinal,
typename Packet>
959class Max<true,Ordinal,Packet> {
963 const Packet inBuffer[],
967 for(
int i = 0; i < count; ++i )
968 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
973template<
typename Ordinal,
typename Packet>
974class Max<false,Ordinal,Packet> {
983 true,std::logic_error,
985 <<
" does not support comparison operations!"
991template<
bool isComparable,
typename Ordinal,
typename Packet>
995template<
typename Ordinal,
typename Packet>
996class AND<true,Ordinal,Packet> {
1000 const Packet inBuffer[],
1001 Packet inoutBuffer[]
1004 for(
int i = 0; i < count; ++i )
1005 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1010template<
typename Ordinal,
typename Packet>
1011class AND<false,Ordinal,Packet> {
1020 true,std::logic_error,
1022 <<
" does not support logical AND operations!"
1031template<
typename Ordinal,
typename Packet>
1033 const Ordinal count,
1038 for(
int i = 0;
i < count; ++
i )
1043template<
typename Ordinal,
typename Packet>
1045 const Ordinal count,
1050 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
min_type;
1055template<
typename Ordinal,
typename Packet>
1057 const Ordinal count,
1062 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
max_type;
1067template<
typename Ordinal,
typename Packet>
1069 const Ordinal count,
1074 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
and_type;
1105template<
typename Ordinal,
typename Packet>
1106ValueTypeReductionOp<Ordinal,Packet>*
1107createOp (
const EReductionType reductType)
1109 typedef ScalarTraits<Packet> ST;
1110 switch (reductType) {
1112 return new SumValueReductionOp<Ordinal,Packet> ();
1115 if (ST::isComparable) {
1116 return new MinValueReductionOp<Ordinal,Packet> ();
1120 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1122 <<
" is not less-than comparable, so it does not make sense to do a "
1123 "MIN reduction with it.");
1128 if (ST::isComparable) {
1129 return new MaxValueReductionOp<Ordinal,Packet> ();
1133 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1135 <<
" is not less-than comparable, so it does not make sense to do a "
1136 "MAX reduction with it.");
1141 return new ANDValueReductionOp<Ordinal, Packet> ();
1145 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1146 "Invalid EReductionType value " << reductType <<
". Valid values "
1147 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1160template<
typename Ordinal>
1161int Teuchos::rank(
const Comm<Ordinal>& comm)
1163 return comm.getRank();
1167template<
typename Ordinal>
1168int Teuchos::size(
const Comm<Ordinal>& comm)
1170 return comm.getSize();
1174template<
typename Ordinal>
1175void Teuchos::barrier(
const Comm<Ordinal>& comm)
1177 TEUCHOS_COMM_TIME_MONITOR(
1178 "Teuchos::CommHelpers: barrier<"
1179 <<OrdinalTraits<Ordinal>::name()
1186template<
typename Ordinal,
typename Packet>
1187void Teuchos::broadcast(
1188 const Comm<Ordinal>& comm,
1189 const int rootRank,
const Ordinal count, Packet buffer[]
1192 TEUCHOS_COMM_TIME_MONITOR(
1193 "Teuchos::CommHelpers: broadcast<"
1194 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1197 ValueTypeSerializationBuffer<Ordinal,Packet>
1198 charBuffer(count,buffer);
1200 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1205template<
typename Ordinal,
typename Packet>
1206void Teuchos::broadcast(
1207 const Comm<Ordinal>& comm,
1209 const ArrayView<Packet> &buffer
1212 broadcast<Ordinal, Packet>(comm, rootRank, buffer.size(), buffer.getRawPtr() );
1216template<
typename Ordinal,
typename Packet>
1217void Teuchos::broadcast(
1218 const Comm<Ordinal>& comm,
1219 const int rootRank, Packet *
object
1222 broadcast<Ordinal,Packet>(comm,rootRank,1,
object);
1226template<
typename Ordinal,
typename Packet>
1227void Teuchos::broadcast(
1228 const Comm<Ordinal>& comm,
1229 const int rootRank,
const Ptr<Packet> &
object
1232 broadcast<Ordinal,Packet>(comm,rootRank,1,
object.getRawPtr());
1236template<
typename Ordinal,
typename Packet>
1237void Teuchos::broadcast(
1238 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1239 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1242 TEUCHOS_COMM_TIME_MONITOR(
1243 "Teuchos::CommHelpers: broadcast<"
1244 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1245 <<
">( reference type )"
1247 ReferenceTypeSerializationBuffer<Ordinal,Packet>
1248 charBuffer(serializer, count, buffer);
1250 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1255template<
typename Ordinal,
typename Packet>
1256void Teuchos::broadcast(
1257 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1258 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
1261 Array<Packet*> bufferPtrArray;
1262 for (
int i = 0; i < buffer.size(); ++i) {
1263 bufferPtrArray.push_back(buffer[i].getRawPtr());
1265 broadcast<Ordinal,Packet>(comm, serializer, rootRank,
1266 buffer.size(), bufferPtrArray.getRawPtr());
1269template<
typename Ordinal,
typename Packet,
typename Serializer>
1270void Teuchos::broadcast(
1271 const Comm<Ordinal>& comm,
1272 const Serializer& serializer,
1273 const int rootRank,
const Ordinal count, Packet buffer[]
1276 TEUCHOS_COMM_TIME_MONITOR(
1277 "Teuchos::CommHelpers: broadcast<"
1278 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1281 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1282 charBuffer(count,buffer,
rcp(&serializer,
false));
1284 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1289template<
typename Ordinal,
typename Packet>
1290void Teuchos::gatherAll(
1291 const Comm<Ordinal>& comm,
1292 const Ordinal sendCount,
const Packet sendBuffer[],
1293 const Ordinal recvCount, Packet recvBuffer[]
1296 TEUCHOS_COMM_TIME_MONITOR(
1297 "Teuchos::CommHelpers: gatherAll<"
1298 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1301 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1302 charSendBuffer(sendCount,sendBuffer);
1303 ValueTypeSerializationBuffer<Ordinal,Packet>
1304 charRecvBuffer(recvCount,recvBuffer);
1306 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1307 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1311template<
typename Ordinal,
typename Packet>
1313Teuchos::gather (
const Packet sendBuf[],
1314 const Ordinal sendCount,
1316 const Ordinal recvCount,
1318 const Comm<Ordinal>& comm)
1320 TEUCHOS_COMM_TIME_MONITOR(
1321 "Teuchos::CommHelpers: gather<"
1322 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1325 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1326 charSendBuffer (sendCount, sendBuf);
1327 ValueTypeSerializationBuffer<Ordinal,Packet>
1328 charRecvBuffer (recvCount, recvBuf);
1329 comm.gather (charSendBuffer.getBytes (),
1330 charSendBuffer.getCharBuffer (),
1331 charRecvBuffer.getBytes (),
1332 charRecvBuffer.getCharBuffer (),
1336template<
typename Ordinal,
typename Packet>
1338Teuchos::gatherv (
const Packet sendBuf[],
1339 const Ordinal sendCount,
1341 const Ordinal recvCounts[],
1342 const Ordinal displs[],
1344 const Comm<Ordinal>& comm)
1367 "Teuchos::gatherv: The general case is not implemented.");
1370template<
typename Ordinal,
typename Packet>
1371void Teuchos::gatherAll(
1372 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1373 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1374 const Ordinal recvCount, Packet*
const recvBuffer[]
1380template<
typename Ordinal,
typename Packet,
typename Serializer>
1381void Teuchos::gatherAll(
1382 const Comm<Ordinal>& comm,
1383 const Serializer& serializer,
1384 const Ordinal sendCount,
const Packet sendBuffer[],
1385 const Ordinal recvCount, Packet recvBuffer[]
1388 TEUCHOS_COMM_TIME_MONITOR(
1389 "Teuchos::CommHelpers: gatherAll<"
1390 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1393 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1394 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1395 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1396 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1398 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1399 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1404template<
typename Ordinal,
typename Packet>
1406Teuchos::reduce (
const Packet sendBuf[],
1408 const Ordinal count,
1409 const EReductionType reductType,
1411 const Comm<Ordinal>& comm)
1417 (
true, std::logic_error,
"Teuchos::reduce<" <<
1418 TypeNameTraits<Ordinal>::name () <<
"," << TypeNameTraits<Packet>::name ()
1419 <<
">: Generic version not implemented. We only implement this function "
1420 "for Ordinal = int and Packet = specific types.");
1424template<
typename Ordinal,
typename Packet>
1425void Teuchos::reduceAll(
1426 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp
1427 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1430 TEUCHOS_COMM_TIME_MONITOR(
1431 "Teuchos::CommHelpers: reduceAll<"
1432 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1433 <<
">( value type, user-defined op )"
1435 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1436 charSendBuffer(count,sendBuffer);
1437 ValueTypeSerializationBuffer<Ordinal,Packet>
1438 charGlobalReducts(count,globalReducts);
1439 CharToValueTypeReductionOp<Ordinal,Packet>
1440 charReductOp(
rcp(&reductOp,
false));
1442 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1443 ,charGlobalReducts.getCharBuffer()
1448template<
typename Ordinal,
typename Packet>
1449void Teuchos::reduceAll(
1450 const Comm<Ordinal>& comm,
const EReductionType reductType,
1451 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1454 TEUCHOS_COMM_TIME_MONITOR(
1455 "Teuchos::CommHelpers: reduceAll<"
1456 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1457 <<
">( value type, "<<toString(reductType)<<
" )"
1460 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
1461 createOp<Ordinal, Packet> (reductType);
1463 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1465 catch (std::exception& e) {
1481#ifdef HAVE_TEUCHOS_COMPLEX
1484TEUCHOSCOMM_LIB_DLL_EXPORT
void
1485reduceAll<int, std::complex<double> > (
const Comm<int>& comm,
1486 const EReductionType reductType,
1488 const std::complex<double> sendBuffer[],
1489 std::complex<double> globalReducts[]);
1491TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1492ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1493 const ArrayRCP<std::complex<double> >& recvBuffer,
1494 const int sourceRank);
1496TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1497ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1498 const int sourceRank,
1500 const Comm<int>& comm);
1502TEUCHOSCOMM_LIB_DLL_EXPORT
void
1503send<int, std::complex<double> > (
const Comm<int>& comm,
1505 const std::complex<double> sendBuffer[],
1506 const int destRank);
1508TEUCHOSCOMM_LIB_DLL_EXPORT
void
1509send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1513 const Comm<int>& comm);
1515TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1516isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1519 const Comm<int>& comm);
1523TEUCHOSCOMM_LIB_DLL_EXPORT
void
1524reduceAll<int, std::complex<float> > (
const Comm<int>& comm,
1525 const EReductionType reductType,
1527 const std::complex<float> sendBuffer[],
1528 std::complex<float> globalReducts[]);
1530TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1531ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1532 const ArrayRCP<std::complex<float> >& recvBuffer,
1533 const int sourceRank);
1535TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1536ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1537 const int sourceRank,
1539 const Comm<int>& comm);
1541TEUCHOSCOMM_LIB_DLL_EXPORT
void
1542send<int, std::complex<float> > (
const Comm<int>& comm,
1544 const std::complex<float> sendBuffer[],
1545 const int destRank);
1547TEUCHOSCOMM_LIB_DLL_EXPORT
void
1548send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1552 const Comm<int>& comm);
1554TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1555isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1558 const Comm<int>& comm);
1564TEUCHOSCOMM_LIB_DLL_EXPORT
void
1565reduceAll<int, double> (
const Comm<int>& comm,
1566 const EReductionType reductType,
1568 const double sendBuffer[],
1569 double globalReducts[]);
1571TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1572ireceive<int, double> (
const Comm<int>& comm,
1573 const ArrayRCP<double>& recvBuffer,
1574 const int sourceRank);
1576TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1577ireceive<int, double> (
const ArrayRCP<double> &recvBuffer,
1578 const int sourceRank,
1580 const Comm<int>& comm);
1582TEUCHOSCOMM_LIB_DLL_EXPORT
void
1583send<int, double> (
const Comm<int>& comm,
1585 const double sendBuffer[],
1586 const int destRank);
1588TEUCHOSCOMM_LIB_DLL_EXPORT
void
1589send<int, double> (
const double sendBuffer[],
1593 const Comm<int>& comm);
1595TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1596isend<int, double> (
const ArrayRCP<const double>& sendBuffer,
1599 const Comm<int>& comm);
1602TEUCHOSCOMM_LIB_DLL_EXPORT
void
1603gatherv<int, double> (
const double sendBuf[],
1604 const int sendCount,
1606 const int recvCounts[],
1609 const Comm<int>& comm);
1613TEUCHOSCOMM_LIB_DLL_EXPORT
void
1614reduceAll<int, float> (
const Comm<int>& comm,
1615 const EReductionType reductType,
1617 const float sendBuffer[],
1618 float globalReducts[]);
1620TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1621ireceive<int, float> (
const Comm<int>& comm,
1622 const ArrayRCP<float>& recvBuffer,
1623 const int sourceRank);
1625TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1626ireceive<int, float> (
const ArrayRCP<float> &recvBuffer,
1627 const int sourceRank,
1629 const Comm<int>& comm);
1631TEUCHOSCOMM_LIB_DLL_EXPORT
void
1632send<int, float> (
const Comm<int>& comm,
1634 const float sendBuffer[],
1635 const int destRank);
1637TEUCHOSCOMM_LIB_DLL_EXPORT
void
1638send<int, float> (
const float sendBuffer[],
1642 const Comm<int>& comm);
1644TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1645isend<int, float> (
const ArrayRCP<const float>& sendBuffer,
1648 const Comm<int>& comm);
1651TEUCHOSCOMM_LIB_DLL_EXPORT
void
1652gatherv<int, float> (
const float sendBuf[],
1653 const int sendCount,
1655 const int recvCounts[],
1658 const Comm<int>& comm);
1662TEUCHOSCOMM_LIB_DLL_EXPORT
void
1663gather<int, long long> (
const long long sendBuf[],
1664 const int sendCount,
1665 long long recvBuf[],
1666 const int recvCount,
1668 const Comm<int>& comm);
1670TEUCHOSCOMM_LIB_DLL_EXPORT
void
1671gatherv<int, long long> (
const long long sendBuf[],
1672 const int sendCount,
1673 long long recvBuf[],
1674 const int recvCounts[],
1677 const Comm<int>& comm);
1679TEUCHOSCOMM_LIB_DLL_EXPORT
void
1680reduceAll<int, long long> (
const Comm<int>& comm,
1681 const EReductionType reductType,
1683 const long long sendBuffer[],
1684 long long globalReducts[]);
1686TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1687ireceive<int, long long> (
const Comm<int>& comm,
1688 const ArrayRCP<long long>& recvBuffer,
1689 const int sourceRank);
1691TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1692ireceive<int, long long> (
const ArrayRCP<long long> &recvBuffer,
1693 const int sourceRank,
1695 const Comm<int>& comm);
1697TEUCHOSCOMM_LIB_DLL_EXPORT
void
1698send<int, long long> (
const Comm<int>& comm,
1700 const long long sendBuffer[],
1701 const int destRank);
1703TEUCHOSCOMM_LIB_DLL_EXPORT
void
1704send<int, long long> (
const long long sendBuffer[],
1708 const Comm<int>& comm);
1710TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1711isend<int, long long> (
const ArrayRCP<const long long>& sendBuffer,
1714 const Comm<int>& comm);
1718TEUCHOSCOMM_LIB_DLL_EXPORT
void
1719gather<int, unsigned long long> (
const unsigned long long sendBuf[],
1720 const int sendCount,
1721 unsigned long long recvBuf[],
1722 const int recvCount,
1724 const Comm<int>& comm);
1726TEUCHOSCOMM_LIB_DLL_EXPORT
void
1727gatherv<int, unsigned long long> (
const unsigned long long sendBuf[],
1728 const int sendCount,
1729 unsigned long long recvBuf[],
1730 const int recvCounts[],
1733 const Comm<int>& comm);
1735TEUCHOSCOMM_LIB_DLL_EXPORT
void
1736reduceAll<int, unsigned long long> (
const Comm<int>& comm,
1737 const EReductionType reductType,
1739 const unsigned long long sendBuffer[],
1740 unsigned long long globalReducts[]);
1742TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1743ireceive<int, unsigned long long> (
const Comm<int>& comm,
1744 const ArrayRCP<unsigned long long>& recvBuffer,
1745 const int sourceRank);
1747TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1748ireceive<int, unsigned long long> (
const ArrayRCP<unsigned long long> &recvBuffer,
1749 const int sourceRank,
1751 const Comm<int>& comm);
1753TEUCHOSCOMM_LIB_DLL_EXPORT
void
1754send<int, unsigned long long> (
const Comm<int>& comm,
1756 const unsigned long long sendBuffer[],
1757 const int destRank);
1759TEUCHOSCOMM_LIB_DLL_EXPORT
void
1760send<int, unsigned long long> (
const unsigned long long sendBuffer[],
1764 const Comm<int>& comm);
1766TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1767isend<int, unsigned long long> (
const ArrayRCP<const unsigned long long>& sendBuffer,
1770 const Comm<int>& comm);
1774TEUCHOSCOMM_LIB_DLL_EXPORT
void
1775gather<int, long> (
const long sendBuf[],
1776 const int sendCount,
1778 const int recvCount,
1780 const Comm<int>& comm);
1782TEUCHOSCOMM_LIB_DLL_EXPORT
void
1783gatherv<int, long> (
const long sendBuf[],
1784 const int sendCount,
1786 const int recvCounts[],
1789 const Comm<int>& comm);
1791TEUCHOSCOMM_LIB_DLL_EXPORT
void
1792reduceAll<int, long> (
const Comm<int>& comm,
1793 const EReductionType reductType,
1795 const long sendBuffer[],
1796 long globalReducts[]);
1798TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1799ireceive<int, long> (
const Comm<int>& comm,
1800 const ArrayRCP<long>& recvBuffer,
1801 const int sourceRank);
1803TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1804ireceive<int, long> (
const ArrayRCP<long> &recvBuffer,
1805 const int sourceRank,
1807 const Comm<int>& comm);
1809TEUCHOSCOMM_LIB_DLL_EXPORT
void
1810send<int, long> (
const Comm<int>& comm,
1812 const long sendBuffer[],
1813 const int destRank);
1815TEUCHOSCOMM_LIB_DLL_EXPORT
void
1816send<int, long> (
const long sendBuffer[],
1820 const Comm<int>& comm);
1822TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1823isend<int, long> (
const ArrayRCP<const long>& sendBuffer,
1826 const Comm<int>& comm);
1830TEUCHOSCOMM_LIB_DLL_EXPORT
void
1831gather<int, unsigned long> (
const unsigned long sendBuf[],
1832 const int sendCount,
1833 unsigned long recvBuf[],
1834 const int recvCount,
1836 const Comm<int>& comm);
1838TEUCHOSCOMM_LIB_DLL_EXPORT
void
1839gatherv<int, unsigned long> (
const unsigned long sendBuf[],
1840 const int sendCount,
1841 unsigned long recvBuf[],
1842 const int recvCounts[],
1845 const Comm<int>& comm);
1847TEUCHOSCOMM_LIB_DLL_EXPORT
void
1848reduceAll<int, unsigned long> (
const Comm<int>& comm,
1849 const EReductionType reductType,
1851 const unsigned long sendBuffer[],
1852 unsigned long globalReducts[]);
1854TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1855ireceive<int, unsigned long> (
const Comm<int>& comm,
1856 const ArrayRCP<unsigned long>& recvBuffer,
1857 const int sourceRank);
1859TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1860ireceive<int, unsigned long> (
const ArrayRCP<unsigned long> &recvBuffer,
1861 const int sourceRank,
1863 const Comm<int>& comm);
1865TEUCHOSCOMM_LIB_DLL_EXPORT
void
1866send<int, unsigned long> (
const Comm<int>& comm,
1868 const unsigned long sendBuffer[],
1869 const int destRank);
1871TEUCHOSCOMM_LIB_DLL_EXPORT
void
1872send<int, unsigned long> (
const unsigned long sendBuffer[],
1876 const Comm<int>& comm);
1878TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1879isend<int, unsigned long> (
const ArrayRCP<const unsigned long>& sendBuffer,
1882 const Comm<int>& comm);
1886TEUCHOSCOMM_LIB_DLL_EXPORT
void
1887gather<int, int> (
const int sendBuf[],
1888 const int sendCount,
1890 const int recvCount,
1892 const Comm<int>& comm);
1894TEUCHOSCOMM_LIB_DLL_EXPORT
void
1895gatherv<int, int> (
const int sendBuf[],
1896 const int sendCount,
1898 const int recvCounts[],
1901 const Comm<int>& comm);
1903TEUCHOSCOMM_LIB_DLL_EXPORT
void
1904scatter (
const int sendBuf[],
1905 const int sendCount,
1907 const int recvCount,
1909 const Comm<int>& comm);
1911TEUCHOSCOMM_LIB_DLL_EXPORT
void
1912scatterv (
const double sendBuf[],
1913 const int sendCounts[],
1916 const int recvCount,
1918 const Comm<int>& comm);
1920TEUCHOSCOMM_LIB_DLL_EXPORT
void
1921scatterv (
const float sendBuf[],
1922 const int sendCounts[],
1925 const int recvCount,
1927 const Comm<int>& comm);
1929TEUCHOSCOMM_LIB_DLL_EXPORT
void
1930reduce<int, int> (
const int sendBuf[],
1933 const EReductionType reductType,
1935 const Comm<int>& comm);
1937TEUCHOSCOMM_LIB_DLL_EXPORT
void
1938reduce<int, long> (
const long sendBuf[],
1941 const EReductionType reductType,
1943 const Comm<int>& comm);
1945TEUCHOSCOMM_LIB_DLL_EXPORT
void
1946reduce<int, unsigned long> (
const unsigned long sendBuf[],
1947 unsigned long recvBuf[],
1949 const EReductionType reductType,
1951 const Comm<int>& comm);
1953TEUCHOSCOMM_LIB_DLL_EXPORT
void
1954reduce<int, unsigned long long > (
const unsigned long long sendBuf[],
1955 unsigned long long recvBuf[],
1957 const EReductionType reductType,
1959 const Comm<int>& comm);
1961TEUCHOSCOMM_LIB_DLL_EXPORT
void
1962reduce<int, double> (
const double sendBuf[],
1965 const EReductionType reductType,
1967 const Comm<int>& comm);
1969TEUCHOSCOMM_LIB_DLL_EXPORT
void
1970reduceAll<int, int> (
const Comm<int>& comm,
1971 const EReductionType reductType,
1973 const int sendBuffer[],
1974 int globalReducts[]);
1977TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1978ireceive<int, int> (
const Comm<int>& comm,
1979 const ArrayRCP<int>& recvBuffer,
1980 const int sourceRank);
1982TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1983ireceive<int, int> (
const ArrayRCP<int> &recvBuffer,
1984 const int sourceRank,
1986 const Comm<int>& comm);
1988TEUCHOSCOMM_LIB_DLL_EXPORT
void
1989send<int, int> (
const Comm<int>& comm,
1991 const int sendBuffer[],
1992 const int destRank);
1994TEUCHOSCOMM_LIB_DLL_EXPORT
void
1995send<int, int> (
const int sendBuffer[],
1999 const Comm<int>& comm);
2001TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2002isend<int, int> (
const ArrayRCP<const int>& sendBuffer,
2005 const Comm<int>& comm);
2009TEUCHOSCOMM_LIB_DLL_EXPORT
void
2010gather<int, unsigned int> (
const unsigned int sendBuf[],
2011 const int sendCount,
2012 unsigned int recvBuf[],
2013 const int recvCount,
2015 const Comm<int>& comm);
2017TEUCHOSCOMM_LIB_DLL_EXPORT
void
2018gatherv<int, unsigned int> (
const unsigned int sendBuf[],
2019 const int sendCount,
2020 unsigned int recvBuf[],
2021 const int recvCounts[],
2024 const Comm<int>& comm);
2026TEUCHOSCOMM_LIB_DLL_EXPORT
void
2027reduceAll<int, unsigned int> (
const Comm<int>& comm,
2028 const EReductionType reductType,
2030 const unsigned int sendBuffer[],
2031 unsigned int globalReducts[]);
2033TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2034ireceive<int, unsigned int> (
const Comm<int>& comm,
2035 const ArrayRCP<unsigned int>& recvBuffer,
2036 const int sourceRank);
2038TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2039ireceive<int, unsigned int> (
const ArrayRCP<unsigned int> &recvBuffer,
2040 const int sourceRank,
2042 const Comm<int>& comm);
2044TEUCHOSCOMM_LIB_DLL_EXPORT
void
2045send<int, unsigned int> (
const Comm<int>& comm,
2047 const unsigned int sendBuffer[],
2048 const int destRank);
2050TEUCHOSCOMM_LIB_DLL_EXPORT
void
2051send<int, unsigned int> (
const unsigned int sendBuffer[],
2055 const Comm<int>& comm);
2057TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2058isend<int, unsigned int> (
const ArrayRCP<const unsigned int>& sendBuffer,
2061 const Comm<int>& comm);
2065TEUCHOSCOMM_LIB_DLL_EXPORT
void
2066gather<int, short> (
const short sendBuf[],
2067 const int sendCount,
2069 const int recvCount,
2071 const Comm<int>& comm);
2073TEUCHOSCOMM_LIB_DLL_EXPORT
void
2074gatherv<int, short> (
const short sendBuf[],
2075 const int sendCount,
2077 const int recvCounts[],
2080 const Comm<int>& comm);
2082TEUCHOSCOMM_LIB_DLL_EXPORT
void
2083reduceAll<int, short> (
const Comm<int>& comm,
2084 const EReductionType reductType,
2086 const short sendBuffer[],
2087 short globalReducts[]);
2089TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2090ireceive<int, short> (
const Comm<int>& comm,
2091 const ArrayRCP<short>& recvBuffer,
2092 const int sourceRank);
2094TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2095ireceive<int, short> (
const ArrayRCP<short> &recvBuffer,
2096 const int sourceRank,
2098 const Comm<int>& comm);
2100TEUCHOSCOMM_LIB_DLL_EXPORT
void
2101send<int, short> (
const Comm<int>& comm,
2103 const short sendBuffer[],
2104 const int destRank);
2106TEUCHOSCOMM_LIB_DLL_EXPORT
void
2107send<int, short> (
const short sendBuffer[],
2111 const Comm<int>& comm);
2113TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2114isend<int, short> (
const ArrayRCP<const short>& sendBuffer,
2117 const Comm<int>& comm);
2130TEUCHOSCOMM_LIB_DLL_EXPORT
void
2131reduceAll<int, char> (
const Comm<int>& comm,
2132 const EReductionType reductType,
2134 const char sendBuffer[],
2135 char globalReducts[]);
2140template<
typename Ordinal,
typename Packet>
2141void Teuchos::reduceAll(
2142 const Comm<Ordinal>& comm,
const EReductionType reductType
2143 ,
const Packet &send,
const Ptr<Packet> &globalReduct
2148 reduceAll<Ordinal,Packet>(comm, reductType, 1, &send, &*globalReduct);
2152template<
typename Ordinal,
typename Packet>
2153void Teuchos::reduceAll(
2154 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2155 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2156 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2159 TEUCHOS_COMM_TIME_MONITOR(
2160 "Teuchos::CommHelpers: reduceAll<"
2161 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2162 <<
">( reference type )"
2164 ConstReferenceTypeSerializationBuffer<Ordinal,Packet>
2165 charSendBuffer(serializer,count,sendBuffer);
2166 ReferenceTypeSerializationBuffer<Ordinal,Packet>
2167 charGlobalReducts(serializer,count,globalReducts);
2168 CharToReferenceTypeReductionOp<Ordinal,Packet>
2169 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2171 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2172 ,charGlobalReducts.getCharBuffer()
2176template<
typename Ordinal,
typename Packet,
typename Serializer>
2177void Teuchos::reduceAll(
2178 const Comm<Ordinal>& comm,
2179 const Serializer& serializer,
2180 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2181 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2184 TEUCHOS_COMM_TIME_MONITOR(
2185 "Teuchos::CommHelpers: reduceAll<"
2186 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2187 <<
">( value type, user-defined op )"
2189 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2190 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2191 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2192 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2193 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2194 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2196 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2197 ,charGlobalReducts.getCharBuffer()
2202template<
typename Ordinal,
typename Packet,
typename Serializer>
2203void Teuchos::reduceAll(
2204 const Comm<Ordinal>& comm,
2205 const Serializer& serializer,
2206 const EReductionType reductType,
2207 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2210 TEUCHOS_COMM_TIME_MONITOR(
2211 "Teuchos::CommHelpers: reduceAll<"
2212 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2213 <<
">( value type, "<<toString(reductType)<<
" )"
2216 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2217 createOp<Ordinal, Packet> (reductType);
2219 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2221 catch (std::exception& e) {
2229template<
typename Ordinal,
typename Packet>
2231 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2232 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2235 TEUCHOS_COMM_TIME_MONITOR(
2236 "Teuchos::CommHelpers: scan<"
2237 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2238 <<
">( value type, user-defined op )"
2240 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2241 charSendBuffer(count,sendBuffer);
2242 ValueTypeSerializationBuffer<Ordinal,Packet>
2243 charScanReducts(count,scanReducts);
2244 CharToValueTypeReductionOp<Ordinal,Packet>
2245 charReductOp(
rcp(&reductOp,
false));
2247 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2248 ,charScanReducts.getCharBuffer()
2253template<
typename Ordinal,
typename Packet>
2255 const Comm<Ordinal>& comm,
const EReductionType reductType,
2256 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2259 TEUCHOS_COMM_TIME_MONITOR(
2260 "Teuchos::CommHelpers: scan<"
2261 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2262 <<
">( value type, "<<toString(reductType)<<
" )"
2265 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2266 createOp<Ordinal, Packet> (reductType);
2268 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2270 catch (std::exception& e) {
2278template<
typename Ordinal,
typename Packet>
2280 const Comm<Ordinal>& comm,
const EReductionType reductType,
2281 const Packet &send,
const Ptr<Packet> &scanReduct
2284 scan<Ordinal,Packet>(comm, reductType, 1, &send, &*scanReduct);
2288template<
typename Ordinal,
typename Packet>
2290 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2291 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2292 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2298template<
typename Ordinal,
typename Packet,
typename Serializer>
2300 const Comm<Ordinal>& comm,
2301 const Serializer& serializer,
2302 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2303 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2306 TEUCHOS_COMM_TIME_MONITOR(
2307 "Teuchos::CommHelpers: scan<"
2308 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2309 <<
">( value type, user-defined op )"
2311 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2312 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2313 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2314 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2315 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2316 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2318 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2319 ,charScanReducts.getCharBuffer()
2324template<
typename Ordinal,
typename Packet,
typename Serializer>
2326 const Comm<Ordinal>& comm,
2327 const Serializer& serializer,
2328 const EReductionType reductType,
2329 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2332 TEUCHOS_COMM_TIME_MONITOR(
2333 "Teuchos::CommHelpers: scan<"
2334 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2335 <<
">( value type, "<<toString(reductType)<<
" )"
2338 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2339 createOp<Ordinal, Packet> (reductType);
2341 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2343 catch (std::exception& e) {
2350template<
typename Ordinal,
typename Packet>
2352 const Comm<Ordinal>& comm,
2353 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2356 TEUCHOS_COMM_TIME_MONITOR(
2357 "Teuchos::CommHelpers: send<"
2358 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2361 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2362 charSendBuffer(count,sendBuffer);
2364 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2369template<
typename Ordinal,
typename Packet>
2372 const Ordinal count,
2377 TEUCHOS_COMM_TIME_MONITOR(
2378 "Teuchos::CommHelpers: send<"
2386template<
typename Ordinal,
typename Packet>
2388 const Comm<Ordinal>& comm,
2389 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2392 TEUCHOS_COMM_TIME_MONITOR(
2393 "Teuchos::CommHelpers: ssend<"
2394 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2397 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2398 charSendBuffer(count,sendBuffer);
2400 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2405template<
typename Ordinal,
typename Packet>
2408 const Ordinal count,
2413 TEUCHOS_COMM_TIME_MONITOR(
2414 "Teuchos::CommHelpers: ssend<"
2425template<
typename Ordinal,
typename Packet>
2427 const Comm<Ordinal>& comm,
2428 const Packet &send,
const int destRank
2434template<
typename Ordinal,
typename Packet>
2436 const Comm<Ordinal>& comm,
2437 const Packet &send,
const int destRank
2443template<
typename Ordinal,
typename Packet>
2445 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2446 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2452template<
typename Ordinal,
typename Packet,
typename Serializer>
2454 const Comm<Ordinal>& comm,
2455 const Serializer& serializer,
2456 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2459 TEUCHOS_COMM_TIME_MONITOR(
2460 "Teuchos::CommHelpers: send<"
2461 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2464 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2465 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2467 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2472template<
typename Ordinal,
typename Packet>
2473int Teuchos::receive(
2474 const Comm<Ordinal>& comm,
2475 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2478 TEUCHOS_COMM_TIME_MONITOR(
2479 "Teuchos::CommHelpers: receive<"
2480 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2483 ValueTypeSerializationBuffer<Ordinal,Packet>
2484 charRecvBuffer(count,recvBuffer);
2485 return comm.receive(
2487 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2492template<
typename Ordinal,
typename Packet>
2493int Teuchos::receive(
2494 const Comm<Ordinal>& comm,
2495 const int sourceRank, Packet *recv
2502template<
typename Ordinal,
typename Packet>
2503int Teuchos::receive(
2504 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2505 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2511template<
typename Ordinal,
typename Packet,
typename Serializer>
2512int Teuchos::receive(
2513 const Comm<Ordinal>& comm,
2514 const Serializer& serializer,
2515 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2518 TEUCHOS_COMM_TIME_MONITOR(
2519 "Teuchos::CommHelpers: receive<"
2520 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2523 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2524 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2525 return comm.receive(
2527 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2531template<
typename Ordinal,
typename Packet>
2533 const Comm<Ordinal>& comm,
2534 const ArrayView<const Packet> &sendBuffer,
2538 TEUCHOS_COMM_TIME_MONITOR(
2539 "Teuchos::CommHelpers: readySend<"
2540 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2543 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2544 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2545 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2548template<
typename Ordinal,
typename Packet>
2551 const Ordinal count,
2556 TEUCHOS_COMM_TIME_MONITOR(
2557 "Teuchos::CommHelpers: readySend<"
2568template<
typename Ordinal,
typename Packet>
2570 const Comm<Ordinal>& comm,
2575 readySend<Ordinal, Packet>( comm, arrayView(&send,1), destRank );
2578template<
typename Ordinal,
typename Packet,
typename Serializer>
2580 const Comm<Ordinal>& comm,
2581 const Serializer& serializer,
2582 const ArrayView<const Packet> &sendBuffer,
2586 TEUCHOS_COMM_TIME_MONITOR(
2587 "Teuchos::CommHelpers: readySend<"
2588 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2591 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2592 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2593 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2596template<
typename Ordinal,
typename Packet>
2599 const Comm<Ordinal>& comm,
2600 const ArrayRCP<const Packet> &sendBuffer,
2604 TEUCHOS_COMM_TIME_MONITOR(
2605 "Teuchos::CommHelpers: isend<"
2606 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2609 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2610 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2611 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2612 charSendBuffer.getCharBufferView(), destRank );
2613 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2617template<
typename Ordinal,
typename Packet>
2619Teuchos::isend (
const ArrayRCP<const Packet> &sendBuffer,
2622 const Comm<Ordinal>& comm)
2624 TEUCHOS_COMM_TIME_MONITOR(
2625 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2626 << TypeNameTraits<Packet>::name () <<
">");
2627 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2628 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2629 RCP<CommRequest<Ordinal> > commRequest =
2630 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2631 set_extra_data (sendBuffer,
"buffer", inOutArg (commRequest));
2635template<
typename Ordinal,
typename Packet>
2638 const Comm<Ordinal>& comm,
2639 const RCP<const Packet> &send,
2643 const ArrayRCP<const Packet> sendBuffer =
2644 arcpWithEmbeddedObj(
send.
get(), 0, 1, send,
false );
2647 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2650template<
typename Ordinal,
typename Packet,
typename Serializer>
2653 const Comm<Ordinal>& comm,
2654 const Serializer& serializer,
2655 const ArrayRCP<const Packet> &sendBuffer,
2659 TEUCHOS_COMM_TIME_MONITOR(
2660 "Teuchos::CommHelpers: isend<"
2661 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2664 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2665 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2666 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2667 charSendBuffer.getCharBufferView(), destRank );
2668 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2672template<
typename Ordinal,
typename Packet>
2675 const Comm<Ordinal>& comm,
2676 const ArrayRCP<Packet> &recvBuffer,
2677 const int sourceRank
2680 TEUCHOS_COMM_TIME_MONITOR(
2681 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2682 ValueTypeSerializationBuffer<Ordinal,Packet>
2683 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2684 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2685 charRecvBuffer.getCharBufferView(), sourceRank );
2686 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2690template<
typename Ordinal,
typename Packet>
2693 const int sourceRank,
2697 TEUCHOS_COMM_TIME_MONITOR(
2698 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2699 ValueTypeSerializationBuffer<int, Packet>
2700 charRecvBuffer (recvBuffer.size (), recvBuffer.
getRawPtr ());
2701 RCP<CommRequest<int> > commRequest =
2702 comm.ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2703 set_extra_data (recvBuffer,
"buffer", inOutArg (commRequest));
2707template<
typename Ordinal,
typename Packet>
2710 const Comm<Ordinal>& comm,
2711 const RCP<Packet> &recv,
2712 const int sourceRank
2715 const ArrayRCP<Packet> recvBuffer =
2716 arcpWithEmbeddedObj( recv.get(), 0, 1, recv,
false );
2719 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2722template<
typename Ordinal,
typename Packet,
typename Serializer>
2725 const Comm<Ordinal>& comm,
2726 const Serializer& serializer,
2727 const ArrayRCP<Packet> &recvBuffer,
2728 const int sourceRank
2731 TEUCHOS_COMM_TIME_MONITOR(
2732 "Teuchos::CommHelpers: ireceive<"
2733 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2736 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2737 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2738 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2739 charRecvBuffer.getCharBufferView(), sourceRank );
2740 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2744template<
typename Ordinal>
2745void Teuchos::waitAll(
2746 const Comm<Ordinal>& comm,
2747 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
2750 comm.waitAll(requests);
2754template<
typename Ordinal>
2756Teuchos::waitAll (
const Comm<Ordinal>& comm,
2757 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
2758 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses)
2760 comm.waitAll (requests, statuses);
2764template<
typename Ordinal>
2766Teuchos::wait (
const Comm<Ordinal>& comm,
2767 const Ptr<RCP<CommRequest<Ordinal> > > &request)
2769 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.
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.
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.