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_SerializationTraitsHelpers.hpp"
16#include "Teuchos_ReductionOpHelpers.hpp"
17#include "Teuchos_SerializerHelpers.hpp"
22#include "Teuchos_Workspace.hpp"
25#ifdef HAVE_TEUCHOS_MPI
28#include "Teuchos_DefaultSerialComm.hpp"
37#ifdef HAVE_TEUCHOS_MPI
46std::string getMpiErrorString (
const int errCode);
55template<
typename Ordinal>
62template<
typename Ordinal>
69template<
typename Ordinal>
76template<
typename Ordinal,
typename Packet>
87template<
typename Ordinal,
typename Packet>
98template<
typename Ordinal,
typename Packet>
108template<
typename Ordinal,
typename Packet>
118template<
typename Ordinal,
typename Packet>
128template<
typename Ordinal,
typename Packet>
139template<
typename Ordinal,
typename Packet,
typename Serializer>
151template<
typename Ordinal,
typename Packet>
164template<
typename Ordinal,
typename Packet>
179template<
typename Ordinal,
typename Packet>
191template<
typename Ordinal,
typename Packet>
203template<
typename Ordinal,
typename Packet,
typename Serializer>
237template<
typename Ordinal,
typename Packet>
250 (
true, std::logic_error,
"Teuchos::scatter<" <<
252 <<
">: Generic version is not yet implemented. This function currently "
253 "only has an implementtion for Ordinal = int and Packet = int. "
254 "See Bug 6375 and Bug 6336.");
257template<
typename Ordinal,
typename Packet>
271 (
true, std::logic_error,
"Teuchos::scatterv<" <<
273 <<
">: Generic version is not yet implemented. This function currently "
274 "only has an implementtion for Ordinal = int and Packet = int. "
275 "See Bug 6375 and Bug 6336.");
305template<
typename Ordinal,
typename Packet>
336template<
typename Ordinal,
typename Packet>
347template<
typename Ordinal,
typename Packet>
358template<
typename Ordinal,
typename Packet>
369template<
typename Ordinal,
typename Packet>
381template<
typename Ordinal,
typename Packet,
typename Serializer>
394template<
typename Ordinal,
typename Packet,
typename Serializer>
407template<
typename Ordinal,
typename Packet>
418template<
typename Ordinal,
typename Packet>
429template<
typename Ordinal,
typename Packet>
440template<
typename Ordinal,
typename Packet>
452template<
typename Ordinal,
typename Packet,
typename Serializer>
465template<
typename Ordinal,
typename Packet,
typename Serializer>
477template<
typename Ordinal,
typename Packet>
484template<
typename Ordinal,
typename Packet>
496template<
typename Ordinal,
typename Packet>
503template<
typename Ordinal,
typename Packet>
515template<
typename Ordinal,
typename Packet>
525template<
typename Ordinal,
typename Packet>
537template<
typename Ordinal,
typename Packet>
548template<
typename Ordinal,
typename Packet,
typename Serializer>
559template<
typename Ordinal,
typename Packet>
569template<
typename Ordinal,
typename Packet>
579template<
typename Ordinal,
typename Packet>
590template<
typename Ordinal,
typename Packet,
typename Serializer>
602template<
typename Ordinal,
typename Packet>
610template<
typename Ordinal,
typename Packet>
622template<
typename Ordinal,
typename Packet>
634template<
typename Ordinal,
typename Packet,
typename Serializer>
646template<
typename Ordinal,
typename Packet>
654template<
typename Ordinal,
typename Packet>
665template<
typename Ordinal,
typename Packet>
677template<
typename Ordinal,
typename Packet,
typename Serializer>
698template<
typename Ordinal,
typename Packet>
706template<
typename Ordinal,
typename Packet>
724template<
typename Ordinal,
typename Packet>
736template<
typename Ordinal,
typename Packet,
typename Serializer>
755template<
typename Ordinal>
790template<
typename Ordinal>
819template<
typename Ordinal>
832template<
typename Ordinal,
typename Packet>
853template<
typename Ordinal,
typename Packet>
874template<
typename Ordinal,
typename Packet>
891template<
typename Ordinal,
typename Packet>
913namespace MixMaxUtilities {
916template<
bool isComparable,
typename Ordinal,
typename Packet>
920template<
typename Ordinal,
typename Packet>
921class Min<true,Ordinal,Packet> {
925 const Packet inBuffer[],
929 for(
int i = 0; i < count; ++i )
930 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
935template<
typename Ordinal,
typename Packet>
936class Min<false,Ordinal,Packet> {
945 true,std::logic_error,
947 <<
" does not support comparison operations!"
953template<
bool isComparable,
typename Ordinal,
typename Packet>
957template<
typename Ordinal,
typename Packet>
958class Max<true,Ordinal,Packet> {
962 const Packet inBuffer[],
966 for(
int i = 0; i < count; ++i )
967 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
972template<
typename Ordinal,
typename Packet>
973class Max<false,Ordinal,Packet> {
982 true,std::logic_error,
984 <<
" does not support comparison operations!"
990template<
bool isComparable,
typename Ordinal,
typename Packet>
994template<
typename Ordinal,
typename Packet>
995class AND<true,Ordinal,Packet> {
999 const Packet inBuffer[],
1000 Packet inoutBuffer[]
1003 for(
int i = 0; i < count; ++i )
1004 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1009template<
typename Ordinal,
typename Packet>
1010class AND<false,Ordinal,Packet> {
1019 true,std::logic_error,
1021 <<
" does not support logical AND operations!"
1030template<
typename Ordinal,
typename Packet>
1032 const Ordinal count,
1037 for(
int i = 0;
i < count; ++
i )
1042template<
typename Ordinal,
typename Packet>
1044 const Ordinal count,
1049 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
min_type;
1054template<
typename Ordinal,
typename Packet>
1056 const Ordinal count,
1061 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
max_type;
1066template<
typename Ordinal,
typename Packet>
1068 const Ordinal count,
1073 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal,
Packet>
and_type;
1104template<
typename Ordinal,
typename Packet>
1105ValueTypeReductionOp<Ordinal,Packet>*
1106createOp (
const EReductionType reductType)
1108 typedef ScalarTraits<Packet> ST;
1109 switch (reductType) {
1111 return new SumValueReductionOp<Ordinal,Packet> ();
1114 if (ST::isComparable) {
1115 return new MinValueReductionOp<Ordinal,Packet> ();
1119 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1121 <<
" is not less-than comparable, so it does not make sense to do a "
1122 "MIN reduction with it.");
1126 if (ST::isComparable) {
1127 return new MaxValueReductionOp<Ordinal,Packet> ();
1131 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1133 <<
" is not less-than comparable, so it does not make sense to do a "
1134 "MAX reduction with it.");
1138 return new ANDValueReductionOp<Ordinal, Packet> ();
1142 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1143 "Invalid EReductionType value " << reductType <<
". Valid values "
1144 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1157template<
typename Ordinal>
1158int Teuchos::rank(
const Comm<Ordinal>& comm)
1160 return comm.getRank();
1164template<
typename Ordinal>
1165int Teuchos::size(
const Comm<Ordinal>& comm)
1167 return comm.getSize();
1171template<
typename Ordinal>
1172void Teuchos::barrier(
const Comm<Ordinal>& comm)
1174 TEUCHOS_COMM_TIME_MONITOR(
1175 "Teuchos::CommHelpers: barrier<"
1176 <<OrdinalTraits<Ordinal>::name()
1183template<
typename Ordinal,
typename Packet>
1184void Teuchos::broadcast(
1185 const Comm<Ordinal>& comm,
1186 const int rootRank,
const Ordinal count, Packet buffer[]
1189 TEUCHOS_COMM_TIME_MONITOR(
1190 "Teuchos::CommHelpers: broadcast<"
1191 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1194 ValueTypeSerializationBuffer<Ordinal,Packet>
1195 charBuffer(count,buffer);
1197 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1202template<
typename Ordinal,
typename Packet>
1203void Teuchos::broadcast(
1204 const Comm<Ordinal>& comm,
1206 const ArrayView<Packet> &buffer
1209 broadcast<Ordinal, Packet>(comm, rootRank, buffer.size(), buffer.getRawPtr() );
1213template<
typename Ordinal,
typename Packet>
1214void Teuchos::broadcast(
1215 const Comm<Ordinal>& comm,
1216 const int rootRank, Packet *
object
1219 broadcast<Ordinal,Packet>(comm,rootRank,1,
object);
1223template<
typename Ordinal,
typename Packet>
1224void Teuchos::broadcast(
1225 const Comm<Ordinal>& comm,
1226 const int rootRank,
const Ptr<Packet> &
object
1229 broadcast<Ordinal,Packet>(comm,rootRank,1,
object.getRawPtr());
1233template<
typename Ordinal,
typename Packet>
1234void Teuchos::broadcast(
1235 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1236 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1239 TEUCHOS_COMM_TIME_MONITOR(
1240 "Teuchos::CommHelpers: broadcast<"
1241 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1242 <<
">( reference type )"
1244 ReferenceTypeSerializationBuffer<Ordinal,Packet>
1245 charBuffer(serializer, count, buffer);
1247 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1252template<
typename Ordinal,
typename Packet>
1253void Teuchos::broadcast(
1254 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1255 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
1258 Array<Packet*> bufferPtrArray;
1259 for (
int i = 0; i < buffer.size(); ++i) {
1260 bufferPtrArray.push_back(buffer[i].getRawPtr());
1262 broadcast<Ordinal,Packet>(comm, serializer, rootRank,
1263 buffer.size(), bufferPtrArray.getRawPtr());
1266template<
typename Ordinal,
typename Packet,
typename Serializer>
1267void Teuchos::broadcast(
1268 const Comm<Ordinal>& comm,
1269 const Serializer& serializer,
1270 const int rootRank,
const Ordinal count, Packet buffer[]
1273 TEUCHOS_COMM_TIME_MONITOR(
1274 "Teuchos::CommHelpers: broadcast<"
1275 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1278 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1279 charBuffer(count,buffer,
rcp(&serializer,
false));
1281 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1286template<
typename Ordinal,
typename Packet>
1287void Teuchos::gatherAll(
1288 const Comm<Ordinal>& comm,
1289 const Ordinal sendCount,
const Packet sendBuffer[],
1290 const Ordinal recvCount, Packet recvBuffer[]
1293 TEUCHOS_COMM_TIME_MONITOR(
1294 "Teuchos::CommHelpers: gatherAll<"
1295 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1298 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1299 charSendBuffer(sendCount,sendBuffer);
1300 ValueTypeSerializationBuffer<Ordinal,Packet>
1301 charRecvBuffer(recvCount,recvBuffer);
1303 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1304 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1308template<
typename Ordinal,
typename Packet>
1310Teuchos::gather (
const Packet sendBuf[],
1311 const Ordinal sendCount,
1313 const Ordinal recvCount,
1315 const Comm<Ordinal>& comm)
1317 TEUCHOS_COMM_TIME_MONITOR(
1318 "Teuchos::CommHelpers: gather<"
1319 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1322 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1323 charSendBuffer (sendCount, sendBuf);
1324 ValueTypeSerializationBuffer<Ordinal,Packet>
1325 charRecvBuffer (recvCount, recvBuf);
1326 comm.gather (charSendBuffer.getBytes (),
1327 charSendBuffer.getCharBuffer (),
1328 charRecvBuffer.getBytes (),
1329 charRecvBuffer.getCharBuffer (),
1333template<
typename Ordinal,
typename Packet>
1335Teuchos::gatherv (
const Packet sendBuf[],
1336 const Ordinal sendCount,
1338 const Ordinal recvCounts[],
1339 const Ordinal displs[],
1341 const Comm<Ordinal>& comm)
1364 "Teuchos::gatherv: The general case is not implemented.");
1367template<
typename Ordinal,
typename Packet>
1368void Teuchos::gatherAll(
1369 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1370 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1371 const Ordinal recvCount, Packet*
const recvBuffer[]
1377template<
typename Ordinal,
typename Packet,
typename Serializer>
1378void Teuchos::gatherAll(
1379 const Comm<Ordinal>& comm,
1380 const Serializer& serializer,
1381 const Ordinal sendCount,
const Packet sendBuffer[],
1382 const Ordinal recvCount, Packet recvBuffer[]
1385 TEUCHOS_COMM_TIME_MONITOR(
1386 "Teuchos::CommHelpers: gatherAll<"
1387 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1390 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1391 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1392 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1393 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1395 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1396 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1401template<
typename Ordinal,
typename Packet>
1403Teuchos::reduce (
const Packet sendBuf[],
1405 const Ordinal count,
1406 const EReductionType reductType,
1408 const Comm<Ordinal>& comm)
1414 (
true, std::logic_error,
"Teuchos::reduce<" <<
1415 TypeNameTraits<Ordinal>::name () <<
"," << TypeNameTraits<Packet>::name ()
1416 <<
">: Generic version not implemented. We only implement this function "
1417 "for Ordinal = int and Packet = specific types.");
1421template<
typename Ordinal,
typename Packet>
1422void Teuchos::reduceAll(
1423 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp
1424 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1427 TEUCHOS_COMM_TIME_MONITOR(
1428 "Teuchos::CommHelpers: reduceAll<"
1429 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1430 <<
">( value type, user-defined op )"
1432 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1433 charSendBuffer(count,sendBuffer);
1434 ValueTypeSerializationBuffer<Ordinal,Packet>
1435 charGlobalReducts(count,globalReducts);
1436 CharToValueTypeReductionOp<Ordinal,Packet>
1437 charReductOp(
rcp(&reductOp,
false));
1439 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1440 ,charGlobalReducts.getCharBuffer()
1445template<
typename Ordinal,
typename Packet>
1446void Teuchos::reduceAll(
1447 const Comm<Ordinal>& comm,
const EReductionType reductType,
1448 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1451 TEUCHOS_COMM_TIME_MONITOR(
1452 "Teuchos::CommHelpers: reduceAll<"
1453 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1454 <<
">( value type, "<<toString(reductType)<<
" )"
1457 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
1458 createOp<Ordinal, Packet> (reductType);
1460 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1462 catch (std::exception& e) {
1478#ifdef HAVE_TEUCHOS_COMPLEX
1481TEUCHOSCOMM_LIB_DLL_EXPORT
void
1482reduceAll<int, std::complex<double> > (
const Comm<int>& comm,
1483 const EReductionType reductType,
1485 const std::complex<double> sendBuffer[],
1486 std::complex<double> globalReducts[]);
1488TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1489ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1490 const ArrayRCP<std::complex<double> >& recvBuffer,
1491 const int sourceRank);
1493TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1494ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1495 const int sourceRank,
1497 const Comm<int>& comm);
1499TEUCHOSCOMM_LIB_DLL_EXPORT
void
1500send<int, std::complex<double> > (
const Comm<int>& comm,
1502 const std::complex<double> sendBuffer[],
1503 const int destRank);
1505TEUCHOSCOMM_LIB_DLL_EXPORT
void
1506send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1510 const Comm<int>& comm);
1512TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1513isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1516 const Comm<int>& comm);
1520TEUCHOSCOMM_LIB_DLL_EXPORT
void
1521reduceAll<int, std::complex<float> > (
const Comm<int>& comm,
1522 const EReductionType reductType,
1524 const std::complex<float> sendBuffer[],
1525 std::complex<float> globalReducts[]);
1527TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1528ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1529 const ArrayRCP<std::complex<float> >& recvBuffer,
1530 const int sourceRank);
1532TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1533ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1534 const int sourceRank,
1536 const Comm<int>& comm);
1538TEUCHOSCOMM_LIB_DLL_EXPORT
void
1539send<int, std::complex<float> > (
const Comm<int>& comm,
1541 const std::complex<float> sendBuffer[],
1542 const int destRank);
1544TEUCHOSCOMM_LIB_DLL_EXPORT
void
1545send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1549 const Comm<int>& comm);
1551TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1552isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1555 const Comm<int>& comm);
1561TEUCHOSCOMM_LIB_DLL_EXPORT
void
1562reduceAll<int, double> (
const Comm<int>& comm,
1563 const EReductionType reductType,
1565 const double sendBuffer[],
1566 double globalReducts[]);
1568TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1569ireceive<int, double> (
const Comm<int>& comm,
1570 const ArrayRCP<double>& recvBuffer,
1571 const int sourceRank);
1573TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1574ireceive<int, double> (
const ArrayRCP<double> &recvBuffer,
1575 const int sourceRank,
1577 const Comm<int>& comm);
1579TEUCHOSCOMM_LIB_DLL_EXPORT
void
1580send<int, double> (
const Comm<int>& comm,
1582 const double sendBuffer[],
1583 const int destRank);
1585TEUCHOSCOMM_LIB_DLL_EXPORT
void
1586send<int, double> (
const double sendBuffer[],
1590 const Comm<int>& comm);
1592TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1593isend<int, double> (
const ArrayRCP<const double>& sendBuffer,
1596 const Comm<int>& comm);
1599TEUCHOSCOMM_LIB_DLL_EXPORT
void
1600gatherv<int, double> (
const double sendBuf[],
1601 const int sendCount,
1603 const int recvCounts[],
1606 const Comm<int>& comm);
1610TEUCHOSCOMM_LIB_DLL_EXPORT
void
1611reduceAll<int, float> (
const Comm<int>& comm,
1612 const EReductionType reductType,
1614 const float sendBuffer[],
1615 float globalReducts[]);
1617TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1618ireceive<int, float> (
const Comm<int>& comm,
1619 const ArrayRCP<float>& recvBuffer,
1620 const int sourceRank);
1622TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1623ireceive<int, float> (
const ArrayRCP<float> &recvBuffer,
1624 const int sourceRank,
1626 const Comm<int>& comm);
1628TEUCHOSCOMM_LIB_DLL_EXPORT
void
1629send<int, float> (
const Comm<int>& comm,
1631 const float sendBuffer[],
1632 const int destRank);
1634TEUCHOSCOMM_LIB_DLL_EXPORT
void
1635send<int, float> (
const float sendBuffer[],
1639 const Comm<int>& comm);
1641TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1642isend<int, float> (
const ArrayRCP<const float>& sendBuffer,
1645 const Comm<int>& comm);
1648TEUCHOSCOMM_LIB_DLL_EXPORT
void
1649gatherv<int, float> (
const float sendBuf[],
1650 const int sendCount,
1652 const int recvCounts[],
1655 const Comm<int>& comm);
1659TEUCHOSCOMM_LIB_DLL_EXPORT
void
1660gather<int, long long> (
const long long sendBuf[],
1661 const int sendCount,
1662 long long recvBuf[],
1663 const int recvCount,
1665 const Comm<int>& comm);
1667TEUCHOSCOMM_LIB_DLL_EXPORT
void
1668gatherv<int, long long> (
const long long sendBuf[],
1669 const int sendCount,
1670 long long recvBuf[],
1671 const int recvCounts[],
1674 const Comm<int>& comm);
1676TEUCHOSCOMM_LIB_DLL_EXPORT
void
1677reduceAll<int, long long> (
const Comm<int>& comm,
1678 const EReductionType reductType,
1680 const long long sendBuffer[],
1681 long long globalReducts[]);
1683TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1684ireceive<int, long long> (
const Comm<int>& comm,
1685 const ArrayRCP<long long>& recvBuffer,
1686 const int sourceRank);
1688TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1689ireceive<int, long long> (
const ArrayRCP<long long> &recvBuffer,
1690 const int sourceRank,
1692 const Comm<int>& comm);
1694TEUCHOSCOMM_LIB_DLL_EXPORT
void
1695send<int, long long> (
const Comm<int>& comm,
1697 const long long sendBuffer[],
1698 const int destRank);
1700TEUCHOSCOMM_LIB_DLL_EXPORT
void
1701send<int, long long> (
const long long sendBuffer[],
1705 const Comm<int>& comm);
1707TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1708isend<int, long long> (
const ArrayRCP<const long long>& sendBuffer,
1711 const Comm<int>& comm);
1715TEUCHOSCOMM_LIB_DLL_EXPORT
void
1716gather<int, unsigned long long> (
const unsigned long long sendBuf[],
1717 const int sendCount,
1718 unsigned long long recvBuf[],
1719 const int recvCount,
1721 const Comm<int>& comm);
1723TEUCHOSCOMM_LIB_DLL_EXPORT
void
1724gatherv<int, unsigned long long> (
const unsigned long long sendBuf[],
1725 const int sendCount,
1726 unsigned long long recvBuf[],
1727 const int recvCounts[],
1730 const Comm<int>& comm);
1732TEUCHOSCOMM_LIB_DLL_EXPORT
void
1733reduceAll<int, unsigned long long> (
const Comm<int>& comm,
1734 const EReductionType reductType,
1736 const unsigned long long sendBuffer[],
1737 unsigned long long globalReducts[]);
1739TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1740ireceive<int, unsigned long long> (
const Comm<int>& comm,
1741 const ArrayRCP<unsigned long long>& recvBuffer,
1742 const int sourceRank);
1744TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1745ireceive<int, unsigned long long> (
const ArrayRCP<unsigned long long> &recvBuffer,
1746 const int sourceRank,
1748 const Comm<int>& comm);
1750TEUCHOSCOMM_LIB_DLL_EXPORT
void
1751send<int, unsigned long long> (
const Comm<int>& comm,
1753 const unsigned long long sendBuffer[],
1754 const int destRank);
1756TEUCHOSCOMM_LIB_DLL_EXPORT
void
1757send<int, unsigned long long> (
const unsigned long long sendBuffer[],
1761 const Comm<int>& comm);
1763TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1764isend<int, unsigned long long> (
const ArrayRCP<const unsigned long long>& sendBuffer,
1767 const Comm<int>& comm);
1771TEUCHOSCOMM_LIB_DLL_EXPORT
void
1772gather<int, long> (
const long sendBuf[],
1773 const int sendCount,
1775 const int recvCount,
1777 const Comm<int>& comm);
1779TEUCHOSCOMM_LIB_DLL_EXPORT
void
1780gatherv<int, long> (
const long sendBuf[],
1781 const int sendCount,
1783 const int recvCounts[],
1786 const Comm<int>& comm);
1788TEUCHOSCOMM_LIB_DLL_EXPORT
void
1789reduceAll<int, long> (
const Comm<int>& comm,
1790 const EReductionType reductType,
1792 const long sendBuffer[],
1793 long globalReducts[]);
1795TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1796ireceive<int, long> (
const Comm<int>& comm,
1797 const ArrayRCP<long>& recvBuffer,
1798 const int sourceRank);
1800TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1801ireceive<int, long> (
const ArrayRCP<long> &recvBuffer,
1802 const int sourceRank,
1804 const Comm<int>& comm);
1806TEUCHOSCOMM_LIB_DLL_EXPORT
void
1807send<int, long> (
const Comm<int>& comm,
1809 const long sendBuffer[],
1810 const int destRank);
1812TEUCHOSCOMM_LIB_DLL_EXPORT
void
1813send<int, long> (
const long sendBuffer[],
1817 const Comm<int>& comm);
1819TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1820isend<int, long> (
const ArrayRCP<const long>& sendBuffer,
1823 const Comm<int>& comm);
1827TEUCHOSCOMM_LIB_DLL_EXPORT
void
1828gather<int, unsigned long> (
const unsigned long sendBuf[],
1829 const int sendCount,
1830 unsigned long recvBuf[],
1831 const int recvCount,
1833 const Comm<int>& comm);
1835TEUCHOSCOMM_LIB_DLL_EXPORT
void
1836gatherv<int, unsigned long> (
const unsigned long sendBuf[],
1837 const int sendCount,
1838 unsigned long recvBuf[],
1839 const int recvCounts[],
1842 const Comm<int>& comm);
1844TEUCHOSCOMM_LIB_DLL_EXPORT
void
1845reduceAll<int, unsigned long> (
const Comm<int>& comm,
1846 const EReductionType reductType,
1848 const unsigned long sendBuffer[],
1849 unsigned long globalReducts[]);
1851TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1852ireceive<int, unsigned long> (
const Comm<int>& comm,
1853 const ArrayRCP<unsigned long>& recvBuffer,
1854 const int sourceRank);
1856TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1857ireceive<int, unsigned long> (
const ArrayRCP<unsigned long> &recvBuffer,
1858 const int sourceRank,
1860 const Comm<int>& comm);
1862TEUCHOSCOMM_LIB_DLL_EXPORT
void
1863send<int, unsigned long> (
const Comm<int>& comm,
1865 const unsigned long sendBuffer[],
1866 const int destRank);
1868TEUCHOSCOMM_LIB_DLL_EXPORT
void
1869send<int, unsigned long> (
const unsigned long sendBuffer[],
1873 const Comm<int>& comm);
1875TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1876isend<int, unsigned long> (
const ArrayRCP<const unsigned long>& sendBuffer,
1879 const Comm<int>& comm);
1883TEUCHOSCOMM_LIB_DLL_EXPORT
void
1884gather<int, int> (
const int sendBuf[],
1885 const int sendCount,
1887 const int recvCount,
1889 const Comm<int>& comm);
1891TEUCHOSCOMM_LIB_DLL_EXPORT
void
1892gatherv<int, int> (
const int sendBuf[],
1893 const int sendCount,
1895 const int recvCounts[],
1898 const Comm<int>& comm);
1900TEUCHOSCOMM_LIB_DLL_EXPORT
void
1901scatter (
const int sendBuf[],
1902 const int sendCount,
1904 const int recvCount,
1906 const Comm<int>& comm);
1908TEUCHOSCOMM_LIB_DLL_EXPORT
void
1909scatterv (
const double sendBuf[],
1910 const int sendCounts[],
1913 const int recvCount,
1915 const Comm<int>& comm);
1917TEUCHOSCOMM_LIB_DLL_EXPORT
void
1918scatterv (
const float sendBuf[],
1919 const int sendCounts[],
1922 const int recvCount,
1924 const Comm<int>& comm);
1926TEUCHOSCOMM_LIB_DLL_EXPORT
void
1927reduce<int, int> (
const int sendBuf[],
1930 const EReductionType reductType,
1932 const Comm<int>& comm);
1934TEUCHOSCOMM_LIB_DLL_EXPORT
void
1935reduce<int, long> (
const long sendBuf[],
1938 const EReductionType reductType,
1940 const Comm<int>& comm);
1942TEUCHOSCOMM_LIB_DLL_EXPORT
void
1943reduce<int, unsigned long> (
const unsigned long sendBuf[],
1944 unsigned long recvBuf[],
1946 const EReductionType reductType,
1948 const Comm<int>& comm);
1950TEUCHOSCOMM_LIB_DLL_EXPORT
void
1951reduce<int, unsigned long long > (
const unsigned long long sendBuf[],
1952 unsigned long long recvBuf[],
1954 const EReductionType reductType,
1956 const Comm<int>& comm);
1958TEUCHOSCOMM_LIB_DLL_EXPORT
void
1959reduce<int, double> (
const double sendBuf[],
1962 const EReductionType reductType,
1964 const Comm<int>& comm);
1966TEUCHOSCOMM_LIB_DLL_EXPORT
void
1967reduceAll<int, int> (
const Comm<int>& comm,
1968 const EReductionType reductType,
1970 const int sendBuffer[],
1971 int globalReducts[]);
1974TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1975ireceive<int, int> (
const Comm<int>& comm,
1976 const ArrayRCP<int>& recvBuffer,
1977 const int sourceRank);
1979TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1980ireceive<int, int> (
const ArrayRCP<int> &recvBuffer,
1981 const int sourceRank,
1983 const Comm<int>& comm);
1985TEUCHOSCOMM_LIB_DLL_EXPORT
void
1986send<int, int> (
const Comm<int>& comm,
1988 const int sendBuffer[],
1989 const int destRank);
1991TEUCHOSCOMM_LIB_DLL_EXPORT
void
1992send<int, int> (
const int sendBuffer[],
1996 const Comm<int>& comm);
1998TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1999isend<int, int> (
const ArrayRCP<const int>& sendBuffer,
2002 const Comm<int>& comm);
2006TEUCHOSCOMM_LIB_DLL_EXPORT
void
2007gather<int, unsigned int> (
const unsigned int sendBuf[],
2008 const int sendCount,
2009 unsigned int recvBuf[],
2010 const int recvCount,
2012 const Comm<int>& comm);
2014TEUCHOSCOMM_LIB_DLL_EXPORT
void
2015gatherv<int, unsigned int> (
const unsigned int sendBuf[],
2016 const int sendCount,
2017 unsigned int recvBuf[],
2018 const int recvCounts[],
2021 const Comm<int>& comm);
2023TEUCHOSCOMM_LIB_DLL_EXPORT
void
2024reduceAll<int, unsigned int> (
const Comm<int>& comm,
2025 const EReductionType reductType,
2027 const unsigned int sendBuffer[],
2028 unsigned int globalReducts[]);
2030TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2031ireceive<int, unsigned int> (
const Comm<int>& comm,
2032 const ArrayRCP<unsigned int>& recvBuffer,
2033 const int sourceRank);
2035TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2036ireceive<int, unsigned int> (
const ArrayRCP<unsigned int> &recvBuffer,
2037 const int sourceRank,
2039 const Comm<int>& comm);
2041TEUCHOSCOMM_LIB_DLL_EXPORT
void
2042send<int, unsigned int> (
const Comm<int>& comm,
2044 const unsigned int sendBuffer[],
2045 const int destRank);
2047TEUCHOSCOMM_LIB_DLL_EXPORT
void
2048send<int, unsigned int> (
const unsigned int sendBuffer[],
2052 const Comm<int>& comm);
2054TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2055isend<int, unsigned int> (
const ArrayRCP<const unsigned int>& sendBuffer,
2058 const Comm<int>& comm);
2062TEUCHOSCOMM_LIB_DLL_EXPORT
void
2063gather<int, short> (
const short sendBuf[],
2064 const int sendCount,
2066 const int recvCount,
2068 const Comm<int>& comm);
2070TEUCHOSCOMM_LIB_DLL_EXPORT
void
2071gatherv<int, short> (
const short sendBuf[],
2072 const int sendCount,
2074 const int recvCounts[],
2077 const Comm<int>& comm);
2079TEUCHOSCOMM_LIB_DLL_EXPORT
void
2080reduceAll<int, short> (
const Comm<int>& comm,
2081 const EReductionType reductType,
2083 const short sendBuffer[],
2084 short globalReducts[]);
2086TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2087ireceive<int, short> (
const Comm<int>& comm,
2088 const ArrayRCP<short>& recvBuffer,
2089 const int sourceRank);
2091TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2092ireceive<int, short> (
const ArrayRCP<short> &recvBuffer,
2093 const int sourceRank,
2095 const Comm<int>& comm);
2097TEUCHOSCOMM_LIB_DLL_EXPORT
void
2098send<int, short> (
const Comm<int>& comm,
2100 const short sendBuffer[],
2101 const int destRank);
2103TEUCHOSCOMM_LIB_DLL_EXPORT
void
2104send<int, short> (
const short sendBuffer[],
2108 const Comm<int>& comm);
2110TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2111isend<int, short> (
const ArrayRCP<const short>& sendBuffer,
2114 const Comm<int>& comm);
2127TEUCHOSCOMM_LIB_DLL_EXPORT
void
2128reduceAll<int, char> (
const Comm<int>& comm,
2129 const EReductionType reductType,
2131 const char sendBuffer[],
2132 char globalReducts[]);
2137template<
typename Ordinal,
typename Packet>
2138void Teuchos::reduceAll(
2139 const Comm<Ordinal>& comm,
const EReductionType reductType
2140 ,
const Packet &send,
const Ptr<Packet> &globalReduct
2145 reduceAll<Ordinal,Packet>(comm, reductType, 1, &send, &*globalReduct);
2149template<
typename Ordinal,
typename Packet>
2150void Teuchos::reduceAll(
2151 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2152 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2153 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2156 TEUCHOS_COMM_TIME_MONITOR(
2157 "Teuchos::CommHelpers: reduceAll<"
2158 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2159 <<
">( reference type )"
2161 ConstReferenceTypeSerializationBuffer<Ordinal,Packet>
2162 charSendBuffer(serializer,count,sendBuffer);
2163 ReferenceTypeSerializationBuffer<Ordinal,Packet>
2164 charGlobalReducts(serializer,count,globalReducts);
2165 CharToReferenceTypeReductionOp<Ordinal,Packet>
2166 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2168 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2169 ,charGlobalReducts.getCharBuffer()
2173template<
typename Ordinal,
typename Packet,
typename Serializer>
2174void Teuchos::reduceAll(
2175 const Comm<Ordinal>& comm,
2176 const Serializer& serializer,
2177 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2178 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2181 TEUCHOS_COMM_TIME_MONITOR(
2182 "Teuchos::CommHelpers: reduceAll<"
2183 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2184 <<
">( value type, user-defined op )"
2186 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2187 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2188 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2189 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2190 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2191 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2193 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2194 ,charGlobalReducts.getCharBuffer()
2199template<
typename Ordinal,
typename Packet,
typename Serializer>
2200void Teuchos::reduceAll(
2201 const Comm<Ordinal>& comm,
2202 const Serializer& serializer,
2203 const EReductionType reductType,
2204 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2207 TEUCHOS_COMM_TIME_MONITOR(
2208 "Teuchos::CommHelpers: reduceAll<"
2209 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2210 <<
">( value type, "<<toString(reductType)<<
" )"
2213 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2214 createOp<Ordinal, Packet> (reductType);
2216 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2218 catch (std::exception& e) {
2226template<
typename Ordinal,
typename Packet>
2228 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2229 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2232 TEUCHOS_COMM_TIME_MONITOR(
2233 "Teuchos::CommHelpers: scan<"
2234 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2235 <<
">( value type, user-defined op )"
2237 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2238 charSendBuffer(count,sendBuffer);
2239 ValueTypeSerializationBuffer<Ordinal,Packet>
2240 charScanReducts(count,scanReducts);
2241 CharToValueTypeReductionOp<Ordinal,Packet>
2242 charReductOp(
rcp(&reductOp,
false));
2244 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2245 ,charScanReducts.getCharBuffer()
2250template<
typename Ordinal,
typename Packet>
2252 const Comm<Ordinal>& comm,
const EReductionType reductType,
2253 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2256 TEUCHOS_COMM_TIME_MONITOR(
2257 "Teuchos::CommHelpers: scan<"
2258 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2259 <<
">( value type, "<<toString(reductType)<<
" )"
2262 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2263 createOp<Ordinal, Packet> (reductType);
2265 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2267 catch (std::exception& e) {
2275template<
typename Ordinal,
typename Packet>
2277 const Comm<Ordinal>& comm,
const EReductionType reductType,
2278 const Packet &send,
const Ptr<Packet> &scanReduct
2281 scan<Ordinal,Packet>(comm, reductType, 1, &send, &*scanReduct);
2285template<
typename Ordinal,
typename Packet>
2287 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2288 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2289 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2295template<
typename Ordinal,
typename Packet,
typename Serializer>
2297 const Comm<Ordinal>& comm,
2298 const Serializer& serializer,
2299 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2300 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2303 TEUCHOS_COMM_TIME_MONITOR(
2304 "Teuchos::CommHelpers: scan<"
2305 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2306 <<
">( value type, user-defined op )"
2308 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2309 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2310 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2311 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2312 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2313 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2315 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2316 ,charScanReducts.getCharBuffer()
2321template<
typename Ordinal,
typename Packet,
typename Serializer>
2323 const Comm<Ordinal>& comm,
2324 const Serializer& serializer,
2325 const EReductionType reductType,
2326 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2329 TEUCHOS_COMM_TIME_MONITOR(
2330 "Teuchos::CommHelpers: scan<"
2331 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2332 <<
">( value type, "<<toString(reductType)<<
" )"
2335 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2336 createOp<Ordinal, Packet> (reductType);
2338 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2340 catch (std::exception& e) {
2347template<
typename Ordinal,
typename Packet>
2349 const Comm<Ordinal>& comm,
2350 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2353 TEUCHOS_COMM_TIME_MONITOR(
2354 "Teuchos::CommHelpers: send<"
2355 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2358 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2359 charSendBuffer(count,sendBuffer);
2361 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2366template<
typename Ordinal,
typename Packet>
2369 const Ordinal count,
2374 TEUCHOS_COMM_TIME_MONITOR(
2375 "Teuchos::CommHelpers: send<"
2383template<
typename Ordinal,
typename Packet>
2385 const Comm<Ordinal>& comm,
2386 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2389 TEUCHOS_COMM_TIME_MONITOR(
2390 "Teuchos::CommHelpers: ssend<"
2391 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2394 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2395 charSendBuffer(count,sendBuffer);
2397 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2402template<
typename Ordinal,
typename Packet>
2405 const Ordinal count,
2410 TEUCHOS_COMM_TIME_MONITOR(
2411 "Teuchos::CommHelpers: ssend<"
2422template<
typename Ordinal,
typename Packet>
2424 const Comm<Ordinal>& comm,
2425 const Packet &send,
const int destRank
2431template<
typename Ordinal,
typename Packet>
2433 const Comm<Ordinal>& comm,
2434 const Packet &send,
const int destRank
2440template<
typename Ordinal,
typename Packet>
2442 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2443 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2449template<
typename Ordinal,
typename Packet,
typename Serializer>
2451 const Comm<Ordinal>& comm,
2452 const Serializer& serializer,
2453 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2456 TEUCHOS_COMM_TIME_MONITOR(
2457 "Teuchos::CommHelpers: send<"
2458 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2461 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2462 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2464 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2469template<
typename Ordinal,
typename Packet>
2470int Teuchos::receive(
2471 const Comm<Ordinal>& comm,
2472 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2475 TEUCHOS_COMM_TIME_MONITOR(
2476 "Teuchos::CommHelpers: receive<"
2477 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2480 ValueTypeSerializationBuffer<Ordinal,Packet>
2481 charRecvBuffer(count,recvBuffer);
2482 return comm.receive(
2484 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2489template<
typename Ordinal,
typename Packet>
2490int Teuchos::receive(
2491 const Comm<Ordinal>& comm,
2492 const int sourceRank, Packet *recv
2499template<
typename Ordinal,
typename Packet>
2500int Teuchos::receive(
2501 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2502 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2508template<
typename Ordinal,
typename Packet,
typename Serializer>
2509int Teuchos::receive(
2510 const Comm<Ordinal>& comm,
2511 const Serializer& serializer,
2512 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2515 TEUCHOS_COMM_TIME_MONITOR(
2516 "Teuchos::CommHelpers: receive<"
2517 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2520 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2521 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2522 return comm.receive(
2524 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2528template<
typename Ordinal,
typename Packet>
2530 const Comm<Ordinal>& comm,
2531 const ArrayView<const Packet> &sendBuffer,
2535 TEUCHOS_COMM_TIME_MONITOR(
2536 "Teuchos::CommHelpers: readySend<"
2537 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2540 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2541 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2542 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2545template<
typename Ordinal,
typename Packet>
2548 const Ordinal count,
2553 TEUCHOS_COMM_TIME_MONITOR(
2554 "Teuchos::CommHelpers: readySend<"
2565template<
typename Ordinal,
typename Packet>
2567 const Comm<Ordinal>& comm,
2572 readySend<Ordinal, Packet>( comm, arrayView(&send,1), destRank );
2575template<
typename Ordinal,
typename Packet,
typename Serializer>
2577 const Comm<Ordinal>& comm,
2578 const Serializer& serializer,
2579 const ArrayView<const Packet> &sendBuffer,
2583 TEUCHOS_COMM_TIME_MONITOR(
2584 "Teuchos::CommHelpers: readySend<"
2585 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2588 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2589 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2590 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2593template<
typename Ordinal,
typename Packet>
2596 const Comm<Ordinal>& comm,
2597 const ArrayRCP<const Packet> &sendBuffer,
2601 TEUCHOS_COMM_TIME_MONITOR(
2602 "Teuchos::CommHelpers: isend<"
2603 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2606 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2607 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2608 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2609 charSendBuffer.getCharBufferView(), destRank );
2610 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2614template<
typename Ordinal,
typename Packet>
2616Teuchos::isend (
const ArrayRCP<const Packet> &sendBuffer,
2619 const Comm<Ordinal>& comm)
2621 TEUCHOS_COMM_TIME_MONITOR(
2622 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2623 << TypeNameTraits<Packet>::name () <<
">");
2624 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2625 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2626 RCP<CommRequest<Ordinal> > commRequest =
2627 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2628 set_extra_data (sendBuffer,
"buffer", inOutArg (commRequest));
2632template<
typename Ordinal,
typename Packet>
2635 const Comm<Ordinal>& comm,
2636 const RCP<const Packet> &send,
2640 const ArrayRCP<const Packet> sendBuffer =
2641 arcpWithEmbeddedObj(
send.
get(), 0, 1, send,
false );
2644 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2647template<
typename Ordinal,
typename Packet,
typename Serializer>
2650 const Comm<Ordinal>& comm,
2651 const Serializer& serializer,
2652 const ArrayRCP<const Packet> &sendBuffer,
2656 TEUCHOS_COMM_TIME_MONITOR(
2657 "Teuchos::CommHelpers: isend<"
2658 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2661 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2662 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2663 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2664 charSendBuffer.getCharBufferView(), destRank );
2665 set_extra_data( sendBuffer,
"buffer", inOutArg(commRequest) );
2669template<
typename Ordinal,
typename Packet>
2672 const Comm<Ordinal>& comm,
2673 const ArrayRCP<Packet> &recvBuffer,
2674 const int sourceRank
2677 TEUCHOS_COMM_TIME_MONITOR(
2678 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2679 ValueTypeSerializationBuffer<Ordinal,Packet>
2680 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2681 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2682 charRecvBuffer.getCharBufferView(), sourceRank );
2683 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2687template<
typename Ordinal,
typename Packet>
2690 const int sourceRank,
2694 TEUCHOS_COMM_TIME_MONITOR(
2695 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2696 ValueTypeSerializationBuffer<int, Packet>
2697 charRecvBuffer (recvBuffer.size (), recvBuffer.
getRawPtr ());
2698 RCP<CommRequest<int> > commRequest =
2699 comm.ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2700 set_extra_data (recvBuffer,
"buffer", inOutArg (commRequest));
2704template<
typename Ordinal,
typename Packet>
2707 const Comm<Ordinal>& comm,
2708 const RCP<Packet> &recv,
2709 const int sourceRank
2712 const ArrayRCP<Packet> recvBuffer =
2713 arcpWithEmbeddedObj( recv.get(), 0, 1, recv,
false );
2716 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2719template<
typename Ordinal,
typename Packet,
typename Serializer>
2722 const Comm<Ordinal>& comm,
2723 const Serializer& serializer,
2724 const ArrayRCP<Packet> &recvBuffer,
2725 const int sourceRank
2728 TEUCHOS_COMM_TIME_MONITOR(
2729 "Teuchos::CommHelpers: ireceive<"
2730 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2733 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2734 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2735 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2736 charRecvBuffer.getCharBufferView(), sourceRank );
2737 set_extra_data( recvBuffer,
"buffer", inOutArg(commRequest) );
2741template<
typename Ordinal>
2742void Teuchos::waitAll(
2743 const Comm<Ordinal>& comm,
2744 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
2747 comm.waitAll(requests);
2751template<
typename Ordinal>
2753Teuchos::waitAll (
const Comm<Ordinal>& comm,
2754 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
2755 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses)
2757 comm.waitAll (requests, statuses);
2761template<
typename Ordinal>
2763Teuchos::wait (
const Comm<Ordinal>& comm,
2764 const Ptr<RCP<CommRequest<Ordinal> > > &request)
2766 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.
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.