42#ifndef TEUCHOS_COMM_HELPERS_HPP
43#define TEUCHOS_COMM_HELPERS_HPP
45#include "Teuchos_Comm.hpp"
46#include "Teuchos_CommUtilities.hpp"
47#include "Teuchos_SerializationTraitsHelpers.hpp"
48#include "Teuchos_ReductionOpHelpers.hpp"
49#include "Teuchos_SerializerHelpers.hpp"
54#include "Teuchos_Workspace.hpp"
57#ifdef HAVE_TEUCHOS_MPI
60#include "Teuchos_DefaultSerialComm.hpp"
69#ifdef HAVE_TEUCHOS_MPI
78std::string getMpiErrorString (
const int errCode);
87template<
typename Ordinal>
94template<
typename Ordinal>
101template<
typename Ordinal>
108template<
typename Ordinal,
typename Packet>
119template<
typename Ordinal,
typename Packet>
130template<
typename Ordinal,
typename Packet>
140template<
typename Ordinal,
typename Packet>
150template<
typename Ordinal,
typename Packet>
160template<
typename Ordinal,
typename Packet>
171template<
typename Ordinal,
typename Packet,
typename Serializer>
183template<
typename Ordinal,
typename Packet>
196template<
typename Ordinal,
typename Packet>
211template<
typename Ordinal,
typename Packet>
223template<
typename Ordinal,
typename Packet>
235template<
typename Ordinal,
typename Packet,
typename Serializer>
269template<
typename Ordinal,
typename Packet>
282 (
true, std::logic_error,
"Teuchos::scatter<" <<
284 <<
">: Generic version is not yet implemented. This function currently "
285 "only has an implementtion for Ordinal = int and Packet = int. "
286 "See Bug 6375 and Bug 6336.");
316template<
typename Ordinal,
typename Packet>
347template<
typename Ordinal,
typename Packet>
358template<
typename Ordinal,
typename Packet>
369template<
typename Ordinal,
typename Packet>
380template<
typename Ordinal,
typename Packet>
392template<
typename Ordinal,
typename Packet,
typename Serializer>
405template<
typename Ordinal,
typename Packet,
typename Serializer>
418template<
typename Ordinal,
typename Packet>
429template<
typename Ordinal,
typename Packet>
440template<
typename Ordinal,
typename Packet>
451template<
typename Ordinal,
typename Packet>
463template<
typename Ordinal,
typename Packet,
typename Serializer>
476template<
typename Ordinal,
typename Packet,
typename Serializer>
488template<
typename Ordinal,
typename Packet>
495template<
typename Ordinal,
typename Packet>
507template<
typename Ordinal,
typename Packet>
514template<
typename Ordinal,
typename Packet>
526template<
typename Ordinal,
typename Packet>
536template<
typename Ordinal,
typename Packet>
548template<
typename Ordinal,
typename Packet>
559template<
typename Ordinal,
typename Packet,
typename Serializer>
570template<
typename Ordinal,
typename Packet>
580template<
typename Ordinal,
typename Packet>
590template<
typename Ordinal,
typename Packet>
601template<
typename Ordinal,
typename Packet,
typename Serializer>
613template<
typename Ordinal,
typename Packet>
621template<
typename Ordinal,
typename Packet>
633template<
typename Ordinal,
typename Packet>
645template<
typename Ordinal,
typename Packet,
typename Serializer>
657template<
typename Ordinal,
typename Packet>
665template<
typename Ordinal,
typename Packet>
676template<
typename Ordinal,
typename Packet>
688template<
typename Ordinal,
typename Packet,
typename Serializer>
709template<
typename Ordinal,
typename Packet>
717template<
typename Ordinal,
typename Packet>
735template<
typename Ordinal,
typename Packet>
747template<
typename Ordinal,
typename Packet,
typename Serializer>
766template<
typename Ordinal>
801template<
typename Ordinal>
830template<
typename Ordinal>
843template<
typename Ordinal,
typename Packet>
864template<
typename Ordinal,
typename Packet>
885template<
typename Ordinal,
typename Packet>
902template<
typename Ordinal,
typename Packet>
924namespace MixMaxUtilities {
927template<
bool isComparable,
typename Ordinal,
typename Packet>
931template<
typename Ordinal,
typename Packet>
932class Min<true,Ordinal,Packet> {
936 const Packet inBuffer[],
940 for(
int i = 0; i < count; ++i )
941 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
946template<
typename Ordinal,
typename Packet>
947class Min<false,Ordinal,Packet> {
956 true,std::logic_error,
958 <<
" does not support comparison operations!"
964template<
bool isComparable,
typename Ordinal,
typename Packet>
968template<
typename Ordinal,
typename Packet>
969class Max<true,Ordinal,Packet> {
973 const Packet inBuffer[],
977 for(
int i = 0; i < count; ++i )
978 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
983template<
typename Ordinal,
typename Packet>
984class Max<false,Ordinal,Packet> {
993 true,std::logic_error,
995 <<
" does not support comparison operations!"
1001template<
bool isComparable,
typename Ordinal,
typename Packet>
1005template<
typename Ordinal,
typename Packet>
1006class AND<true,Ordinal,Packet> {
1009 const Ordinal count,
1010 const Packet inBuffer[],
1011 Packet inoutBuffer[]
1014 for(
int i = 0; i < count; ++i )
1015 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1020template<
typename Ordinal,
typename Packet>
1021class AND<false,Ordinal,Packet> {
1030 true,std::logic_error,
1032 <<
" does not support logical AND operations!"
1041template<
typename Ordinal,
typename Packet>
1043 const Ordinal count,
1048 for(
int i = 0;
i < count; ++
i )
1053template<
typename Ordinal,
typename Packet>
1055 const Ordinal count,
1060 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
min_type;
1065template<
typename Ordinal,
typename Packet>
1067 const Ordinal count,
1072 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
max_type;
1077template<
typename Ordinal,
typename Packet>
1079 const Ordinal count,
1084 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
and_type;
1115template<
typename Ordinal,
typename Packet>
1116ValueTypeReductionOp<Ordinal,Packet>*
1117createOp (
const EReductionType reductType)
1119 typedef ScalarTraits<Packet> ST;
1120 switch (reductType) {
1122 return new SumValueReductionOp<Ordinal,Packet> ();
1125 if (ST::isComparable) {
1126 return new MinValueReductionOp<Ordinal,Packet> ();
1130 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1132 <<
" is not less-than comparable, so it does not make sense to do a "
1133 "MIN reduction with it.");
1137 if (ST::isComparable) {
1138 return new MaxValueReductionOp<Ordinal,Packet> ();
1142 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1144 <<
" is not less-than comparable, so it does not make sense to do a "
1145 "MAX reduction with it.");
1149 return new ANDValueReductionOp<Ordinal, Packet> ();
1153 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1154 "Invalid EReductionType value " << reductType <<
". Valid values "
1155 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1168template<
typename Ordinal>
1169int Teuchos::rank(
const Comm<Ordinal>& comm)
1171 return comm.getRank();
1175template<
typename Ordinal>
1176int Teuchos::size(
const Comm<Ordinal>& comm)
1178 return comm.getSize();
1182template<
typename Ordinal>
1183void Teuchos::barrier(
const Comm<Ordinal>& comm)
1185 TEUCHOS_COMM_TIME_MONITOR(
1186 "Teuchos::CommHelpers: barrier<"
1187 <<OrdinalTraits<Ordinal>::name()
1194template<
typename Ordinal,
typename Packet>
1195void Teuchos::broadcast(
1196 const Comm<Ordinal>& comm,
1197 const int rootRank,
const Ordinal count, Packet buffer[]
1200 TEUCHOS_COMM_TIME_MONITOR(
1201 "Teuchos::CommHelpers: broadcast<"
1202 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1205 ValueTypeSerializationBuffer<Ordinal,Packet>
1206 charBuffer(count,buffer);
1208 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1213template<
typename Ordinal,
typename Packet>
1214void Teuchos::broadcast(
1215 const Comm<Ordinal>& comm,
1217 const ArrayView<Packet> &buffer
1220 broadcast<Ordinal, Packet>(comm, rootRank, buffer.size(), buffer.getRawPtr() );
1224template<
typename Ordinal,
typename Packet>
1225void Teuchos::broadcast(
1226 const Comm<Ordinal>& comm,
1227 const int rootRank, Packet *
object
1230 broadcast<Ordinal,Packet>(comm,rootRank,1,
object);
1234template<
typename Ordinal,
typename Packet>
1235void Teuchos::broadcast(
1236 const Comm<Ordinal>& comm,
1237 const int rootRank,
const Ptr<Packet> &
object
1240 broadcast<Ordinal,Packet>(comm,rootRank,1,
object.getRawPtr());
1244template<
typename Ordinal,
typename Packet>
1245void Teuchos::broadcast(
1246 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1247 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1250 TEUCHOS_COMM_TIME_MONITOR(
1251 "Teuchos::CommHelpers: broadcast<"
1252 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1253 <<
">( reference type )"
1255 ReferenceTypeSerializationBuffer<Ordinal,Packet>
1256 charBuffer(serializer, count, buffer);
1258 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1263template<
typename Ordinal,
typename Packet>
1264void Teuchos::broadcast(
1265 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1266 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
1269 Array<Packet*> bufferPtrArray;
1270 for (
int i = 0; i < buffer.size(); ++i) {
1271 bufferPtrArray.push_back(buffer[i].getRawPtr());
1273 broadcast<Ordinal,Packet>(comm, serializer, rootRank,
1274 buffer.size(), bufferPtrArray.getRawPtr());
1277template<
typename Ordinal,
typename Packet,
typename Serializer>
1278void Teuchos::broadcast(
1279 const Comm<Ordinal>& comm,
1280 const Serializer& serializer,
1281 const int rootRank,
const Ordinal count, Packet buffer[]
1284 TEUCHOS_COMM_TIME_MONITOR(
1285 "Teuchos::CommHelpers: broadcast<"
1286 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1289 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1290 charBuffer(count,buffer,
rcp(&serializer,
false));
1292 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1297template<
typename Ordinal,
typename Packet>
1298void Teuchos::gatherAll(
1299 const Comm<Ordinal>& comm,
1300 const Ordinal sendCount,
const Packet sendBuffer[],
1301 const Ordinal recvCount, Packet recvBuffer[]
1304 TEUCHOS_COMM_TIME_MONITOR(
1305 "Teuchos::CommHelpers: gatherAll<"
1306 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1309 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1310 charSendBuffer(sendCount,sendBuffer);
1311 ValueTypeSerializationBuffer<Ordinal,Packet>
1312 charRecvBuffer(recvCount,recvBuffer);
1314 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1315 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1319template<
typename Ordinal,
typename Packet>
1321Teuchos::gather (
const Packet sendBuf[],
1322 const Ordinal sendCount,
1324 const Ordinal recvCount,
1326 const Comm<Ordinal>& comm)
1328 TEUCHOS_COMM_TIME_MONITOR(
1329 "Teuchos::CommHelpers: gather<"
1330 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1333 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1334 charSendBuffer (sendCount, sendBuf);
1335 ValueTypeSerializationBuffer<Ordinal,Packet>
1336 charRecvBuffer (recvCount, recvBuf);
1337 comm.gather (charSendBuffer.getBytes (),
1338 charSendBuffer.getCharBuffer (),
1339 charRecvBuffer.getBytes (),
1340 charRecvBuffer.getCharBuffer (),
1344template<
typename Ordinal,
typename Packet>
1346Teuchos::gatherv (
const Packet sendBuf[],
1347 const Ordinal sendCount,
1349 const Ordinal recvCounts[],
1350 const Ordinal displs[],
1352 const Comm<Ordinal>& comm)
1375 "Teuchos::gatherv: The general case is not implemented.");
1378template<
typename Ordinal,
typename Packet>
1379void Teuchos::gatherAll(
1380 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1381 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1382 const Ordinal recvCount, Packet*
const recvBuffer[]
1388template<
typename Ordinal,
typename Packet,
typename Serializer>
1389void Teuchos::gatherAll(
1390 const Comm<Ordinal>& comm,
1391 const Serializer& serializer,
1392 const Ordinal sendCount,
const Packet sendBuffer[],
1393 const Ordinal recvCount, Packet recvBuffer[]
1396 TEUCHOS_COMM_TIME_MONITOR(
1397 "Teuchos::CommHelpers: gatherAll<"
1398 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1401 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1402 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1403 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1404 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1406 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1407 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1412template<
typename Ordinal,
typename Packet>
1414Teuchos::reduce (
const Packet sendBuf[],
1416 const Ordinal count,
1417 const EReductionType reductType,
1419 const Comm<Ordinal>& comm)
1425 (
true, std::logic_error,
"Teuchos::reduce<" <<
1426 TypeNameTraits<Ordinal>::name () <<
"," << TypeNameTraits<Packet>::name ()
1427 <<
">: Generic version not implemented. We only implement this function "
1428 "for Ordinal = int and Packet = specific types.");
1432template<
typename Ordinal,
typename Packet>
1433void Teuchos::reduceAll(
1434 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp
1435 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1438 TEUCHOS_COMM_TIME_MONITOR(
1439 "Teuchos::CommHelpers: reduceAll<"
1440 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1441 <<
">( value type, user-defined op )"
1443 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1444 charSendBuffer(count,sendBuffer);
1445 ValueTypeSerializationBuffer<Ordinal,Packet>
1446 charGlobalReducts(count,globalReducts);
1447 CharToValueTypeReductionOp<Ordinal,Packet>
1448 charReductOp(
rcp(&reductOp,
false));
1450 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1451 ,charGlobalReducts.getCharBuffer()
1456template<
typename Ordinal,
typename Packet>
1457void Teuchos::reduceAll(
1458 const Comm<Ordinal>& comm,
const EReductionType reductType,
1459 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1462 TEUCHOS_COMM_TIME_MONITOR(
1463 "Teuchos::CommHelpers: reduceAll<"
1464 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1465 <<
">( value type, "<<toString(reductType)<<
" )"
1468 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
1469 createOp<Ordinal, Packet> (reductType);
1471 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1473 catch (std::exception& e) {
1489#ifdef HAVE_TEUCHOS_COMPLEX
1492TEUCHOSCOMM_LIB_DLL_EXPORT
void
1493reduceAll<int, std::complex<double> > (
const Comm<int>& comm,
1494 const EReductionType reductType,
1496 const std::complex<double> sendBuffer[],
1497 std::complex<double> globalReducts[]);
1499TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1500ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1501 const ArrayRCP<std::complex<double> >& recvBuffer,
1502 const int sourceRank);
1504TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1505ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1506 const int sourceRank,
1508 const Comm<int>& comm);
1510TEUCHOSCOMM_LIB_DLL_EXPORT
void
1511send<int, std::complex<double> > (
const Comm<int>& comm,
1513 const std::complex<double> sendBuffer[],
1514 const int destRank);
1516TEUCHOSCOMM_LIB_DLL_EXPORT
void
1517send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1521 const Comm<int>& comm);
1523TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1524isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1527 const Comm<int>& comm);
1531TEUCHOSCOMM_LIB_DLL_EXPORT
void
1532reduceAll<int, std::complex<float> > (
const Comm<int>& comm,
1533 const EReductionType reductType,
1535 const std::complex<float> sendBuffer[],
1536 std::complex<float> globalReducts[]);
1538TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1539ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1540 const ArrayRCP<std::complex<float> >& recvBuffer,
1541 const int sourceRank);
1543TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1544ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1545 const int sourceRank,
1547 const Comm<int>& comm);
1549TEUCHOSCOMM_LIB_DLL_EXPORT
void
1550send<int, std::complex<float> > (
const Comm<int>& comm,
1552 const std::complex<float> sendBuffer[],
1553 const int destRank);
1555TEUCHOSCOMM_LIB_DLL_EXPORT
void
1556send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1560 const Comm<int>& comm);
1562TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1563isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1566 const Comm<int>& comm);
1572TEUCHOSCOMM_LIB_DLL_EXPORT
void
1573reduceAll<int, double> (
const Comm<int>& comm,
1574 const EReductionType reductType,
1576 const double sendBuffer[],
1577 double globalReducts[]);
1579TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1580ireceive<int, double> (
const Comm<int>& comm,
1581 const ArrayRCP<double>& recvBuffer,
1582 const int sourceRank);
1584TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1585ireceive<int, double> (
const ArrayRCP<double> &recvBuffer,
1586 const int sourceRank,
1588 const Comm<int>& comm);
1590TEUCHOSCOMM_LIB_DLL_EXPORT
void
1591send<int, double> (
const Comm<int>& comm,
1593 const double sendBuffer[],
1594 const int destRank);
1596TEUCHOSCOMM_LIB_DLL_EXPORT
void
1597send<int, double> (
const double sendBuffer[],
1601 const Comm<int>& comm);
1603TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1604isend<int, double> (
const ArrayRCP<const double>& sendBuffer,
1607 const Comm<int>& comm);
1611TEUCHOSCOMM_LIB_DLL_EXPORT
void
1612reduceAll<int, float> (
const Comm<int>& comm,
1613 const EReductionType reductType,
1615 const float sendBuffer[],
1616 float globalReducts[]);
1618TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1619ireceive<int, float> (
const Comm<int>& comm,
1620 const ArrayRCP<float>& recvBuffer,
1621 const int sourceRank);
1623TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1624ireceive<int, float> (
const ArrayRCP<float> &recvBuffer,
1625 const int sourceRank,
1627 const Comm<int>& comm);
1629TEUCHOSCOMM_LIB_DLL_EXPORT
void
1630send<int, float> (
const Comm<int>& comm,
1632 const float sendBuffer[],
1633 const int destRank);
1635TEUCHOSCOMM_LIB_DLL_EXPORT
void
1636send<int, float> (
const float sendBuffer[],
1640 const Comm<int>& comm);
1642TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1643isend<int, float> (
const ArrayRCP<const float>& sendBuffer,
1646 const Comm<int>& comm);
1650TEUCHOSCOMM_LIB_DLL_EXPORT
void
1651gather<int, long long> (
const long long sendBuf[],
1652 const int sendCount,
1653 long long recvBuf[],
1654 const int recvCount,
1656 const Comm<int>& comm);
1658TEUCHOSCOMM_LIB_DLL_EXPORT
void
1659gatherv<int, long long> (
const long long sendBuf[],
1660 const int sendCount,
1661 long long recvBuf[],
1662 const int recvCounts[],
1665 const Comm<int>& comm);
1667TEUCHOSCOMM_LIB_DLL_EXPORT
void
1668reduceAll<int, long long> (
const Comm<int>& comm,
1669 const EReductionType reductType,
1671 const long long sendBuffer[],
1672 long long globalReducts[]);
1674TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1675ireceive<int, long long> (
const Comm<int>& comm,
1676 const ArrayRCP<long long>& recvBuffer,
1677 const int sourceRank);
1679TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1680ireceive<int, long long> (
const ArrayRCP<long long> &recvBuffer,
1681 const int sourceRank,
1683 const Comm<int>& comm);
1685TEUCHOSCOMM_LIB_DLL_EXPORT
void
1686send<int, long long> (
const Comm<int>& comm,
1688 const long long sendBuffer[],
1689 const int destRank);
1691TEUCHOSCOMM_LIB_DLL_EXPORT
void
1692send<int, long long> (
const long long sendBuffer[],
1696 const Comm<int>& comm);
1698TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1699isend<int, long long> (
const ArrayRCP<const long long>& sendBuffer,
1702 const Comm<int>& comm);
1706TEUCHOSCOMM_LIB_DLL_EXPORT
void
1707gather<int, unsigned long long> (
const unsigned long long sendBuf[],
1708 const int sendCount,
1709 unsigned long long recvBuf[],
1710 const int recvCount,
1712 const Comm<int>& comm);
1714TEUCHOSCOMM_LIB_DLL_EXPORT
void
1715gatherv<int, unsigned long long> (
const unsigned long long sendBuf[],
1716 const int sendCount,
1717 unsigned long long recvBuf[],
1718 const int recvCounts[],
1721 const Comm<int>& comm);
1723TEUCHOSCOMM_LIB_DLL_EXPORT
void
1724reduceAll<int, unsigned long long> (
const Comm<int>& comm,
1725 const EReductionType reductType,
1727 const unsigned long long sendBuffer[],
1728 unsigned long long globalReducts[]);
1730TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1731ireceive<int, unsigned long long> (
const Comm<int>& comm,
1732 const ArrayRCP<unsigned long long>& recvBuffer,
1733 const int sourceRank);
1735TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1736ireceive<int, unsigned long long> (
const ArrayRCP<unsigned long long> &recvBuffer,
1737 const int sourceRank,
1739 const Comm<int>& comm);
1741TEUCHOSCOMM_LIB_DLL_EXPORT
void
1742send<int, unsigned long long> (
const Comm<int>& comm,
1744 const unsigned long long sendBuffer[],
1745 const int destRank);
1747TEUCHOSCOMM_LIB_DLL_EXPORT
void
1748send<int, unsigned long long> (
const unsigned long long sendBuffer[],
1752 const Comm<int>& comm);
1754TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1755isend<int, unsigned long long> (
const ArrayRCP<const unsigned long long>& sendBuffer,
1758 const Comm<int>& comm);
1762TEUCHOSCOMM_LIB_DLL_EXPORT
void
1763gather<int, long> (
const long sendBuf[],
1764 const int sendCount,
1766 const int recvCount,
1768 const Comm<int>& comm);
1770TEUCHOSCOMM_LIB_DLL_EXPORT
void
1771gatherv<int, long> (
const long sendBuf[],
1772 const int sendCount,
1774 const int recvCounts[],
1777 const Comm<int>& comm);
1779TEUCHOSCOMM_LIB_DLL_EXPORT
void
1780reduceAll<int, long> (
const Comm<int>& comm,
1781 const EReductionType reductType,
1783 const long sendBuffer[],
1784 long globalReducts[]);
1786TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1787ireceive<int, long> (
const Comm<int>& comm,
1788 const ArrayRCP<long>& recvBuffer,
1789 const int sourceRank);
1791TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1792ireceive<int, long> (
const ArrayRCP<long> &recvBuffer,
1793 const int sourceRank,
1795 const Comm<int>& comm);
1797TEUCHOSCOMM_LIB_DLL_EXPORT
void
1798send<int, long> (
const Comm<int>& comm,
1800 const long sendBuffer[],
1801 const int destRank);
1803TEUCHOSCOMM_LIB_DLL_EXPORT
void
1804send<int, long> (
const long sendBuffer[],
1808 const Comm<int>& comm);
1810TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1811isend<int, long> (
const ArrayRCP<const long>& sendBuffer,
1814 const Comm<int>& comm);
1818TEUCHOSCOMM_LIB_DLL_EXPORT
void
1819gather<int, unsigned long> (
const unsigned long sendBuf[],
1820 const int sendCount,
1821 unsigned long recvBuf[],
1822 const int recvCount,
1824 const Comm<int>& comm);
1826TEUCHOSCOMM_LIB_DLL_EXPORT
void
1827gatherv<int, unsigned long> (
const unsigned long sendBuf[],
1828 const int sendCount,
1829 unsigned long recvBuf[],
1830 const int recvCounts[],
1833 const Comm<int>& comm);
1835TEUCHOSCOMM_LIB_DLL_EXPORT
void
1836reduceAll<int, unsigned long> (
const Comm<int>& comm,
1837 const EReductionType reductType,
1839 const unsigned long sendBuffer[],
1840 unsigned long globalReducts[]);
1842TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1843ireceive<int, unsigned long> (
const Comm<int>& comm,
1844 const ArrayRCP<unsigned long>& recvBuffer,
1845 const int sourceRank);
1847TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1848ireceive<int, unsigned long> (
const ArrayRCP<unsigned long> &recvBuffer,
1849 const int sourceRank,
1851 const Comm<int>& comm);
1853TEUCHOSCOMM_LIB_DLL_EXPORT
void
1854send<int, unsigned long> (
const Comm<int>& comm,
1856 const unsigned long sendBuffer[],
1857 const int destRank);
1859TEUCHOSCOMM_LIB_DLL_EXPORT
void
1860send<int, unsigned long> (
const unsigned long sendBuffer[],
1864 const Comm<int>& comm);
1866TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1867isend<int, unsigned long> (
const ArrayRCP<const unsigned long>& sendBuffer,
1870 const Comm<int>& comm);
1874TEUCHOSCOMM_LIB_DLL_EXPORT
void
1875gather<int, int> (
const int sendBuf[],
1876 const int sendCount,
1878 const int recvCount,
1880 const Comm<int>& comm);
1882TEUCHOSCOMM_LIB_DLL_EXPORT
void
1883gatherv<int, int> (
const int sendBuf[],
1884 const int sendCount,
1886 const int recvCounts[],
1889 const Comm<int>& comm);
1891TEUCHOSCOMM_LIB_DLL_EXPORT
void
1892scatter (
const int sendBuf[],
1893 const int sendCount,
1895 const int recvCount,
1897 const Comm<int>& comm);
1899TEUCHOSCOMM_LIB_DLL_EXPORT
void
1900reduce<int, int> (
const int sendBuf[],
1903 const EReductionType reductType,
1905 const Comm<int>& comm);
1907TEUCHOSCOMM_LIB_DLL_EXPORT
void
1908reduce<int, long> (
const long sendBuf[],
1911 const EReductionType reductType,
1913 const Comm<int>& comm);
1915TEUCHOSCOMM_LIB_DLL_EXPORT
void
1916reduce<int, unsigned long> (
const unsigned long sendBuf[],
1917 unsigned long recvBuf[],
1919 const EReductionType reductType,
1921 const Comm<int>& comm);
1923TEUCHOSCOMM_LIB_DLL_EXPORT
void
1924reduce<int, unsigned long long > (
const unsigned long long sendBuf[],
1925 unsigned long long recvBuf[],
1927 const EReductionType reductType,
1929 const Comm<int>& comm);
1931TEUCHOSCOMM_LIB_DLL_EXPORT
void
1932reduce<int, double> (
const double sendBuf[],
1935 const EReductionType reductType,
1937 const Comm<int>& comm);
1939TEUCHOSCOMM_LIB_DLL_EXPORT
void
1940reduceAll<int, int> (
const Comm<int>& comm,
1941 const EReductionType reductType,
1943 const int sendBuffer[],
1944 int globalReducts[]);
1947TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1948ireceive<int, int> (
const Comm<int>& comm,
1949 const ArrayRCP<int>& recvBuffer,
1950 const int sourceRank);
1952TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1953ireceive<int, int> (
const ArrayRCP<int> &recvBuffer,
1954 const int sourceRank,
1956 const Comm<int>& comm);
1958TEUCHOSCOMM_LIB_DLL_EXPORT
void
1959send<int, int> (
const Comm<int>& comm,
1961 const int sendBuffer[],
1962 const int destRank);
1964TEUCHOSCOMM_LIB_DLL_EXPORT
void
1965send<int, int> (
const int sendBuffer[],
1969 const Comm<int>& comm);
1971TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1972isend<int, int> (
const ArrayRCP<const int>& sendBuffer,
1975 const Comm<int>& comm);
1979TEUCHOSCOMM_LIB_DLL_EXPORT
void
1980gather<int, unsigned int> (
const unsigned int sendBuf[],
1981 const int sendCount,
1982 unsigned int recvBuf[],
1983 const int recvCount,
1985 const Comm<int>& comm);
1987TEUCHOSCOMM_LIB_DLL_EXPORT
void
1988gatherv<int, unsigned int> (
const unsigned int sendBuf[],
1989 const int sendCount,
1990 unsigned int recvBuf[],
1991 const int recvCounts[],
1994 const Comm<int>& comm);
1996TEUCHOSCOMM_LIB_DLL_EXPORT
void
1997reduceAll<int, unsigned int> (
const Comm<int>& comm,
1998 const EReductionType reductType,
2000 const unsigned int sendBuffer[],
2001 unsigned int globalReducts[]);
2003TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2004ireceive<int, unsigned int> (
const Comm<int>& comm,
2005 const ArrayRCP<unsigned int>& recvBuffer,
2006 const int sourceRank);
2008TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2009ireceive<int, unsigned int> (
const ArrayRCP<unsigned int> &recvBuffer,
2010 const int sourceRank,
2012 const Comm<int>& comm);
2014TEUCHOSCOMM_LIB_DLL_EXPORT
void
2015send<int, unsigned int> (
const Comm<int>& comm,
2017 const unsigned int sendBuffer[],
2018 const int destRank);
2020TEUCHOSCOMM_LIB_DLL_EXPORT
void
2021send<int, unsigned int> (
const unsigned int sendBuffer[],
2025 const Comm<int>& comm);
2027TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2028isend<int, unsigned int> (
const ArrayRCP<const unsigned int>& sendBuffer,
2031 const Comm<int>& comm);
2035TEUCHOSCOMM_LIB_DLL_EXPORT
void
2036gather<int, short> (
const short sendBuf[],
2037 const int sendCount,
2039 const int recvCount,
2041 const Comm<int>& comm);
2043TEUCHOSCOMM_LIB_DLL_EXPORT
void
2044gatherv<int, short> (
const short sendBuf[],
2045 const int sendCount,
2047 const int recvCounts[],
2050 const Comm<int>& comm);
2052TEUCHOSCOMM_LIB_DLL_EXPORT
void
2053reduceAll<int, short> (
const Comm<int>& comm,
2054 const EReductionType reductType,
2056 const short sendBuffer[],
2057 short globalReducts[]);
2059TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2060ireceive<int, short> (
const Comm<int>& comm,
2061 const ArrayRCP<short>& recvBuffer,
2062 const int sourceRank);
2064TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2065ireceive<int, short> (
const ArrayRCP<short> &recvBuffer,
2066 const int sourceRank,
2068 const Comm<int>& comm);
2070TEUCHOSCOMM_LIB_DLL_EXPORT
void
2071send<int, short> (
const Comm<int>& comm,
2073 const short sendBuffer[],
2074 const int destRank);
2076TEUCHOSCOMM_LIB_DLL_EXPORT
void
2077send<int, short> (
const short sendBuffer[],
2081 const Comm<int>& comm);
2083TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2084isend<int, short> (
const ArrayRCP<const short>& sendBuffer,
2087 const Comm<int>& comm);
2100TEUCHOSCOMM_LIB_DLL_EXPORT
void
2101reduceAll<int, char> (
const Comm<int>& comm,
2102 const EReductionType reductType,
2104 const char sendBuffer[],
2105 char globalReducts[]);
2110template<
typename Ordinal,
typename Packet>
2111void Teuchos::reduceAll(
2112 const Comm<Ordinal>& comm,
const EReductionType reductType
2113 ,
const Packet &send,
const Ptr<Packet> &globalReduct
2118 reduceAll<Ordinal,Packet>(comm, reductType, 1, &send, &*globalReduct);
2122template<
typename Ordinal,
typename Packet>
2123void Teuchos::reduceAll(
2124 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2125 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2126 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2129 TEUCHOS_COMM_TIME_MONITOR(
2130 "Teuchos::CommHelpers: reduceAll<"
2131 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2132 <<
">( reference type )"
2134 ConstReferenceTypeSerializationBuffer<Ordinal,Packet>
2135 charSendBuffer(serializer,count,sendBuffer);
2136 ReferenceTypeSerializationBuffer<Ordinal,Packet>
2137 charGlobalReducts(serializer,count,globalReducts);
2138 CharToReferenceTypeReductionOp<Ordinal,Packet>
2139 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2141 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2142 ,charGlobalReducts.getCharBuffer()
2146template<
typename Ordinal,
typename Packet,
typename Serializer>
2147void Teuchos::reduceAll(
2148 const Comm<Ordinal>& comm,
2149 const Serializer& serializer,
2150 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2151 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2154 TEUCHOS_COMM_TIME_MONITOR(
2155 "Teuchos::CommHelpers: reduceAll<"
2156 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2157 <<
">( value type, user-defined op )"
2159 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2160 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2161 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2162 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2163 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2164 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2166 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2167 ,charGlobalReducts.getCharBuffer()
2172template<
typename Ordinal,
typename Packet,
typename Serializer>
2173void Teuchos::reduceAll(
2174 const Comm<Ordinal>& comm,
2175 const Serializer& serializer,
2176 const EReductionType reductType,
2177 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2180 TEUCHOS_COMM_TIME_MONITOR(
2181 "Teuchos::CommHelpers: reduceAll<"
2182 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2183 <<
">( value type, "<<toString(reductType)<<
" )"
2186 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2187 createOp<Ordinal, Packet> (reductType);
2189 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2191 catch (std::exception& e) {
2199template<
typename Ordinal,
typename Packet>
2201 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2202 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2205 TEUCHOS_COMM_TIME_MONITOR(
2206 "Teuchos::CommHelpers: scan<"
2207 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2208 <<
">( value type, user-defined op )"
2210 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2211 charSendBuffer(count,sendBuffer);
2212 ValueTypeSerializationBuffer<Ordinal,Packet>
2213 charScanReducts(count,scanReducts);
2214 CharToValueTypeReductionOp<Ordinal,Packet>
2215 charReductOp(
rcp(&reductOp,
false));
2217 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2218 ,charScanReducts.getCharBuffer()
2223template<
typename Ordinal,
typename Packet>
2225 const Comm<Ordinal>& comm,
const EReductionType reductType,
2226 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2229 TEUCHOS_COMM_TIME_MONITOR(
2230 "Teuchos::CommHelpers: scan<"
2231 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2232 <<
">( value type, "<<toString(reductType)<<
" )"
2235 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2236 createOp<Ordinal, Packet> (reductType);
2238 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2240 catch (std::exception& e) {
2248template<
typename Ordinal,
typename Packet>
2250 const Comm<Ordinal>& comm,
const EReductionType reductType,
2251 const Packet &send,
const Ptr<Packet> &scanReduct
2254 scan<Ordinal,Packet>(comm, reductType, 1, &send, &*scanReduct);
2258template<
typename Ordinal,
typename Packet>
2260 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2261 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2262 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2268template<
typename Ordinal,
typename Packet,
typename Serializer>
2270 const Comm<Ordinal>& comm,
2271 const Serializer& serializer,
2272 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2273 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2276 TEUCHOS_COMM_TIME_MONITOR(
2277 "Teuchos::CommHelpers: scan<"
2278 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2279 <<
">( value type, user-defined op )"
2281 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2282 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2283 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2284 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2285 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2286 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2288 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2289 ,charScanReducts.getCharBuffer()
2294template<
typename Ordinal,
typename Packet,
typename Serializer>
2296 const Comm<Ordinal>& comm,
2297 const Serializer& serializer,
2298 const EReductionType reductType,
2299 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2302 TEUCHOS_COMM_TIME_MONITOR(
2303 "Teuchos::CommHelpers: scan<"
2304 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2305 <<
">( value type, "<<toString(reductType)<<
" )"
2308 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2309 createOp<Ordinal, Packet> (reductType);
2311 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2313 catch (std::exception& e) {
2320template<
typename Ordinal,
typename Packet>
2322 const Comm<Ordinal>& comm,
2323 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2326 TEUCHOS_COMM_TIME_MONITOR(
2327 "Teuchos::CommHelpers: send<"
2328 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2331 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2332 charSendBuffer(count,sendBuffer);
2334 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2339template<
typename Ordinal,
typename Packet>
2342 const Ordinal count,
2347 TEUCHOS_COMM_TIME_MONITOR(
2348 "Teuchos::CommHelpers: send<"
2356template<
typename Ordinal,
typename Packet>
2358 const Comm<Ordinal>& comm,
2359 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2362 TEUCHOS_COMM_TIME_MONITOR(
2363 "Teuchos::CommHelpers: ssend<"
2364 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2367 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2368 charSendBuffer(count,sendBuffer);
2370 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2375template<
typename Ordinal,
typename Packet>
2378 const Ordinal count,
2383 TEUCHOS_COMM_TIME_MONITOR(
2384 "Teuchos::CommHelpers: ssend<"
2395template<
typename Ordinal,
typename Packet>
2397 const Comm<Ordinal>& comm,
2398 const Packet &send,
const int destRank
2404template<
typename Ordinal,
typename Packet>
2406 const Comm<Ordinal>& comm,
2407 const Packet &send,
const int destRank
2413template<
typename Ordinal,
typename Packet>
2415 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2416 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2422template<
typename Ordinal,
typename Packet,
typename Serializer>
2424 const Comm<Ordinal>& comm,
2425 const Serializer& serializer,
2426 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2429 TEUCHOS_COMM_TIME_MONITOR(
2430 "Teuchos::CommHelpers: send<"
2431 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2434 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2435 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2437 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2442template<
typename Ordinal,
typename Packet>
2443int Teuchos::receive(
2444 const Comm<Ordinal>& comm,
2445 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2448 TEUCHOS_COMM_TIME_MONITOR(
2449 "Teuchos::CommHelpers: receive<"
2450 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2453 ValueTypeSerializationBuffer<Ordinal,Packet>
2454 charRecvBuffer(count,recvBuffer);
2455 return comm.receive(
2457 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2462template<
typename Ordinal,
typename Packet>
2463int Teuchos::receive(
2464 const Comm<Ordinal>& comm,
2465 const int sourceRank, Packet *recv
2472template<
typename Ordinal,
typename Packet>
2473int Teuchos::receive(
2474 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2475 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2481template<
typename Ordinal,
typename Packet,
typename Serializer>
2482int Teuchos::receive(
2483 const Comm<Ordinal>& comm,
2484 const Serializer& serializer,
2485 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2488 TEUCHOS_COMM_TIME_MONITOR(
2489 "Teuchos::CommHelpers: receive<"
2490 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2493 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2494 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2495 return comm.receive(
2497 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2501template<
typename Ordinal,
typename Packet>
2503 const Comm<Ordinal>& comm,
2504 const ArrayView<const Packet> &sendBuffer,
2508 TEUCHOS_COMM_TIME_MONITOR(
2509 "Teuchos::CommHelpers: readySend<"
2510 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2513 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2514 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2515 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2518template<
typename Ordinal,
typename Packet>
2521 const Ordinal count,
2526 TEUCHOS_COMM_TIME_MONITOR(
2527 "Teuchos::CommHelpers: readySend<"
2538template<
typename Ordinal,
typename Packet>
2540 const Comm<Ordinal>& comm,
2545 readySend<Ordinal, Packet>( comm, arrayView(&send,1), destRank );
2548template<
typename Ordinal,
typename Packet,
typename Serializer>
2550 const Comm<Ordinal>& comm,
2551 const Serializer& serializer,
2552 const ArrayView<const Packet> &sendBuffer,
2556 TEUCHOS_COMM_TIME_MONITOR(
2557 "Teuchos::CommHelpers: readySend<"
2558 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2561 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2562 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2563 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2566template<
typename Ordinal,
typename Packet>
2569 const Comm<Ordinal>& comm,
2570 const ArrayRCP<const Packet> &sendBuffer,
2574 TEUCHOS_COMM_TIME_MONITOR(
2575 "Teuchos::CommHelpers: isend<"
2576 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2579 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2580 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2581 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2582 charSendBuffer.getCharBufferView(), destRank );
2583 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2587template<
typename Ordinal,
typename Packet>
2589Teuchos::isend (
const ArrayRCP<const Packet> &sendBuffer,
2592 const Comm<Ordinal>& comm)
2594 TEUCHOS_COMM_TIME_MONITOR(
2595 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2596 << TypeNameTraits<Packet>::name () <<
">");
2597 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2598 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2599 RCP<CommRequest<Ordinal> > commRequest =
2600 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2601 set_extra_data (sendBuffer,
"buffer", inOutArg (commRequest));
2605template<
typename Ordinal,
typename Packet>
2608 const Comm<Ordinal>& comm,
2609 const RCP<const Packet> &send,
2613 const ArrayRCP<const Packet> sendBuffer =
2614 arcpWithEmbeddedObj(
send.
get(), 0, 1, send,
false );
2617 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2620template<
typename Ordinal,
typename Packet,
typename Serializer>
2623 const Comm<Ordinal>& comm,
2624 const Serializer& serializer,
2625 const ArrayRCP<const Packet> &sendBuffer,
2629 TEUCHOS_COMM_TIME_MONITOR(
2630 "Teuchos::CommHelpers: isend<"
2631 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2634 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2635 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2636 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2637 charSendBuffer.getCharBufferView(), destRank );
2638 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2642template<
typename Ordinal,
typename Packet>
2645 const Comm<Ordinal>& comm,
2646 const ArrayRCP<Packet> &recvBuffer,
2647 const int sourceRank
2650 TEUCHOS_COMM_TIME_MONITOR(
2651 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2652 ValueTypeSerializationBuffer<Ordinal,Packet>
2653 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2654 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2655 charRecvBuffer.getCharBufferView(), sourceRank );
2656 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2660template<
typename Ordinal,
typename Packet>
2663 const int sourceRank,
2667 TEUCHOS_COMM_TIME_MONITOR(
2668 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2669 ValueTypeSerializationBuffer<int, Packet>
2670 charRecvBuffer (recvBuffer.size (), recvBuffer.
getRawPtr ());
2671 RCP<CommRequest<int> > commRequest =
2672 comm.ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2673 set_extra_data (recvBuffer,
"buffer", inOutArg (commRequest));
2677template<
typename Ordinal,
typename Packet>
2680 const Comm<Ordinal>& comm,
2681 const RCP<Packet> &recv,
2682 const int sourceRank
2685 const ArrayRCP<Packet> recvBuffer =
2686 arcpWithEmbeddedObj( recv.get(), 0, 1, recv,
false );
2689 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2692template<
typename Ordinal,
typename Packet,
typename Serializer>
2695 const Comm<Ordinal>& comm,
2696 const Serializer& serializer,
2697 const ArrayRCP<Packet> &recvBuffer,
2698 const int sourceRank
2701 TEUCHOS_COMM_TIME_MONITOR(
2702 "Teuchos::CommHelpers: ireceive<"
2703 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2706 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2707 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2708 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2709 charRecvBuffer.getCharBufferView(), sourceRank );
2710 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2714template<
typename Ordinal>
2715void Teuchos::waitAll(
2716 const Comm<Ordinal>& comm,
2717 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
2720 comm.waitAll(requests);
2724template<
typename Ordinal>
2726Teuchos::waitAll (
const Comm<Ordinal>& comm,
2727 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
2728 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses)
2730 comm.waitAll (requests, statuses);
2734template<
typename Ordinal>
2736Teuchos::wait (
const Comm<Ordinal>& comm,
2737 const Ptr<RCP<CommRequest<Ordinal> > > &request)
2739 return comm.wait (request);
Templated array class derived from the STL std::vector.
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.
RCP(ENull null_arg=null)
Initialize RCP<T> to NULL.
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.
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.