10#ifndef TEUCHOS_COMM_HELPERS_HPP
11#define TEUCHOS_COMM_HELPERS_HPP
13#include "Teuchos_Comm.hpp"
14#include "Teuchos_CommUtilities.hpp"
15#include "Teuchos_CompilerCodeTweakMacros.hpp"
16#include "Teuchos_SerializationTraitsHelpers.hpp"
17#include "Teuchos_ReductionOpHelpers.hpp"
18#include "Teuchos_SerializerHelpers.hpp"
23#include "Teuchos_Workspace.hpp"
26#ifdef HAVE_TEUCHOS_MPI
29#include "Teuchos_DefaultSerialComm.hpp"
38#ifdef HAVE_TEUCHOS_MPI
47std::string getMpiErrorString (
const int errCode);
56template<
typename Ordinal>
63template<
typename Ordinal>
70template<
typename Ordinal>
77template<
typename Ordinal,
typename Packet>
81 const Ordinal count, Packet buffer[]
88template<
typename Ordinal,
typename Packet>
99template<
typename Ordinal,
typename Packet>
102 const int rootRank, Packet *
object
109template<
typename Ordinal,
typename Packet>
119template<
typename Ordinal,
typename Packet>
122 const int rootRank,
const Ordinal count, Packet*
const buffer[]
129template<
typename Ordinal,
typename Packet>
139template<
typename Ordinal,
typename Packet>
142 const Ordinal sendCount,
144 const Ordinal recvCount,
148 (
true, std::logic_error,
"Teuchos::alltoAll<" <<
150 <<
">: Generic version is not yet implemented.");
157template<
typename Ordinal,
typename Packet>
160 const Ordinal sendCounts[],
161 const Ordinal sendDispls[],
163 const Ordinal recvCounts[],
164 const Ordinal recvDispls[],
168 (
true, std::logic_error,
"Teuchos::alltoAllv<" <<
170 <<
">: Generic version is not yet implemented.");
178template<
typename Ordinal,
typename Packet,
typename Serializer>
183 const Ordinal count, Packet buffer[]
190template<
typename Ordinal,
typename Packet>
193 const Ordinal sendCount,
195 const Ordinal recvCount,
203template<
typename Ordinal,
typename Packet>
206 const Ordinal sendCount,
208 const Ordinal recvCounts[],
209 const Ordinal displs[],
218template<
typename Ordinal,
typename Packet>
221 const Ordinal sendCount,
const Packet sendBuffer[],
222 const Ordinal recvCount, Packet recvBuffer[]
230template<
typename Ordinal,
typename Packet>
233 const Ordinal sendCount,
const Packet*
const sendBuffer[],
234 const Ordinal recvCount, Packet*
const recvBuffer[]
242template<
typename Ordinal,
typename Packet,
typename Serializer>
246 const Ordinal sendCount,
const Packet sendBuffer[],
247 const Ordinal recvCount, Packet recvBuffer[]
276template<
typename Ordinal,
typename Packet>
279 const Ordinal sendCount,
281 const Ordinal recvCount,
289 (
true, std::logic_error,
"Teuchos::scatter<" <<
291 <<
">: Generic version is not yet implemented. This function currently "
292 "only has an implementtion for Ordinal = int and Packet = int. "
293 "See Bug 6375 and Bug 6336.");
296template<
typename Ordinal,
typename Packet>
298scatterv (
const Packet sendBuf[],
299 const Ordinal sendCounts[],
300 const Ordinal displs[],
302 const Ordinal recvCount,
310 (
true, std::logic_error,
"Teuchos::scatterv<" <<
312 <<
">: Generic version is not yet implemented. This function currently "
313 "only has an implementtion for Ordinal = int and Packet = int. "
314 "See Bug 6375 and Bug 6336.");
344template<
typename Ordinal,
typename Packet>
375template<
typename Ordinal,
typename Packet>
378 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
386template<
typename Ordinal,
typename Packet>
389 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
397template<
typename Ordinal,
typename Packet>
408template<
typename Ordinal,
typename Packet>
412 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
420template<
typename Ordinal,
typename Packet,
typename Serializer>
425 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
433template<
typename Ordinal,
typename Packet,
typename Serializer>
438 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
446template<
typename Ordinal,
typename Packet>
449 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
457template<
typename Ordinal,
typename Packet>
460 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
468template<
typename Ordinal,
typename Packet>
479template<
typename Ordinal,
typename Packet>
483 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
491template<
typename Ordinal,
typename Packet,
typename Serializer>
496 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
504template<
typename Ordinal,
typename Packet,
typename Serializer>
509 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
516template<
typename Ordinal,
typename Packet>
519 const Ordinal count,
const Packet sendBuffer[],
const int destRank
523template<
typename Ordinal,
typename Packet>
525send (
const Packet sendBuffer[],
535template<
typename Ordinal,
typename Packet>
538 const Ordinal count,
const Packet sendBuffer[],
const int destRank
542template<
typename Ordinal,
typename Packet>
544ssend (
const Packet sendBuffer[],
554template<
typename Ordinal,
typename Packet>
557 const Packet &
send,
const int destRank
564template<
typename Ordinal,
typename Packet>
567 const Packet &
send,
const int destRank
576template<
typename Ordinal,
typename Packet>
579 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
587template<
typename Ordinal,
typename Packet,
typename Serializer>
591 const Ordinal count,
const Packet sendBuffer[],
const int destRank
598template<
typename Ordinal,
typename Packet>
601 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
608template<
typename Ordinal,
typename Packet>
611 const int sourceRank, Packet *recv
618template<
typename Ordinal,
typename Packet>
621 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
629template<
typename Ordinal,
typename Packet,
typename Serializer>
633 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
641template<
typename Ordinal,
typename Packet>
649template<
typename Ordinal,
typename Packet>
661template<
typename Ordinal,
typename Packet>
673template<
typename Ordinal,
typename Packet,
typename Serializer>
685template<
typename Ordinal,
typename Packet>
693template<
typename Ordinal,
typename Packet>
704template<
typename Ordinal,
typename Packet>
716template<
typename Ordinal,
typename Packet,
typename Serializer>
737template<
typename Ordinal,
typename Packet>
745template<
typename Ordinal,
typename Packet>
748 const int sourceRank,
763template<
typename Ordinal,
typename Packet>
775template<
typename Ordinal,
typename Packet,
typename Serializer>
794template<
typename Ordinal>
829template<
typename Ordinal>
858template<
typename Ordinal>
871template<
typename Ordinal,
typename Packet>
878 const Packet inBuffer[],
892template<
typename Ordinal,
typename Packet>
899 const Packet inBuffer[],
913template<
typename Ordinal,
typename Packet>
920 const Packet inBuffer[],
930template<
typename Ordinal,
typename Packet>
937 const Packet inBuffer[],
952namespace MixMaxUtilities {
955template<
bool isComparable,
typename Ordinal,
typename Packet>
959template<
typename Ordinal,
typename Packet>
960class Min<true,Ordinal,Packet> {
964 const Packet inBuffer[],
968 for(
int i = 0; i < count; ++i )
969 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
974template<
typename Ordinal,
typename Packet>
975class Min<false,Ordinal,Packet> {
984 true,std::logic_error,
986 <<
" does not support comparison operations!"
992template<
bool isComparable,
typename Ordinal,
typename Packet>
996template<
typename Ordinal,
typename Packet>
997class Max<true,Ordinal,Packet> {
1000 const Ordinal count,
1001 const Packet inBuffer[],
1002 Packet inoutBuffer[]
1005 for(
int i = 0; i < count; ++i )
1006 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
1011template<
typename Ordinal,
typename Packet>
1012class Max<false,Ordinal,Packet> {
1021 true,std::logic_error,
1023 <<
" does not support comparison operations!"
1029template<
bool isComparable,
typename Ordinal,
typename Packet>
1033template<
typename Ordinal,
typename Packet>
1034class AND<true,Ordinal,Packet> {
1037 const Ordinal count,
1038 const Packet inBuffer[],
1039 Packet inoutBuffer[]
1042 for(
int i = 0; i < count; ++i )
1043 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1048template<
typename Ordinal,
typename Packet>
1049class AND<false,Ordinal,Packet> {
1058 true,std::logic_error,
1060 <<
" does not support logical AND operations!"
1069template<
typename Ordinal,
typename Packet>
1071 const Ordinal count,
1072 const Packet inBuffer[],
1073 Packet inoutBuffer[]
1076 for(
int i = 0; i < count; ++i )
1077 inoutBuffer[i] += inBuffer[i];
1081template<
typename Ordinal,
typename Packet>
1083 const Ordinal count,
1084 const Packet inBuffer[],
1085 Packet inoutBuffer[]
1088 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal, Packet> min_type;
1089 min_type::min (count, inBuffer, inoutBuffer);
1093template<
typename Ordinal,
typename Packet>
1095 const Ordinal count,
1096 const Packet inBuffer[],
1097 Packet inoutBuffer[]
1100 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal, Packet> max_type;
1101 max_type::max (count,inBuffer,inoutBuffer);
1105template<
typename Ordinal,
typename Packet>
1107 const Ordinal count,
1108 const Packet inBuffer[],
1109 Packet inoutBuffer[]
1112 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal, Packet> and_type;
1113 and_type::andOp (count, inBuffer, inoutBuffer);
1143template<
typename Ordinal,
typename Packet>
1144ValueTypeReductionOp<Ordinal,Packet>*
1145createOp (
const EReductionType reductType)
1147 typedef ScalarTraits<Packet> ST;
1148 switch (reductType) {
1150 return new SumValueReductionOp<Ordinal,Packet> ();
1153 if (ST::isComparable) {
1158 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1160 <<
" is not less-than comparable, so it does not make sense to do a "
1161 "MIN reduction with it.");
1166 if (ST::isComparable) {
1171 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1173 <<
" is not less-than comparable, so it does not make sense to do a "
1174 "MAX reduction with it.");
1183 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1184 "Invalid EReductionType value " << reductType <<
". Valid values "
1185 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1198template<
typename Ordinal>
1205template<
typename Ordinal>
1212template<
typename Ordinal>
1215 TEUCHOS_COMM_TIME_MONITOR(
1216 "Teuchos::CommHelpers: barrier<"
1224template<
typename Ordinal,
typename Packet>
1227 const int rootRank,
const Ordinal count, Packet buffer[]
1230 TEUCHOS_COMM_TIME_MONITOR(
1231 "Teuchos::CommHelpers: broadcast<"
1236 charBuffer(count,buffer);
1238 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1243template<
typename Ordinal,
typename Packet>
1254template<
typename Ordinal,
typename Packet>
1257 const int rootRank, Packet *
object
1264template<
typename Ordinal,
typename Packet>
1274template<
typename Ordinal,
typename Packet>
1277 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1280 TEUCHOS_COMM_TIME_MONITOR(
1281 "Teuchos::CommHelpers: broadcast<"
1283 <<
">( reference type )"
1286 charBuffer(serializer, count, buffer);
1293template<
typename Ordinal,
typename Packet>
1300 for (
int i = 0; i < buffer.size(); ++i) {
1301 bufferPtrArray.
push_back(buffer[i].getRawPtr());
1304 buffer.size(), bufferPtrArray.
getRawPtr());
1307template<
typename Ordinal,
typename Packet,
typename Serializer>
1311 const int rootRank,
const Ordinal count, Packet buffer[]
1314 TEUCHOS_COMM_TIME_MONITOR(
1315 "Teuchos::CommHelpers: broadcast<"
1320 charBuffer(count,buffer,
rcp(&serializer,
false));
1322 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1327template<
typename Ordinal,
typename Packet>
1330 const Ordinal sendCount,
const Packet sendBuffer[],
1331 const Ordinal recvCount, Packet recvBuffer[]
1334 TEUCHOS_COMM_TIME_MONITOR(
1335 "Teuchos::CommHelpers: gatherAll<"
1340 charSendBuffer(sendCount,sendBuffer);
1342 charRecvBuffer(recvCount,recvBuffer);
1344 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1345 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1349template<
typename Ordinal,
typename Packet>
1352 const Ordinal sendCount,
1354 const Ordinal recvCount,
1358 TEUCHOS_COMM_TIME_MONITOR(
1359 "Teuchos::CommHelpers: gather<"
1364 charSendBuffer (sendCount, sendBuf);
1366 charRecvBuffer (recvCount, recvBuf);
1367 comm.
gather (charSendBuffer.getBytes (),
1368 charSendBuffer.getCharBuffer (),
1369 charRecvBuffer.getBytes (),
1370 charRecvBuffer.getCharBuffer (),
1374template<
typename Ordinal,
typename Packet>
1377 const Ordinal sendCount,
1379 const Ordinal recvCounts[],
1380 const Ordinal displs[],
1405 "Teuchos::gatherv: The general case is not implemented.");
1408template<
typename Ordinal,
typename Packet>
1411 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1412 const Ordinal recvCount, Packet*
const recvBuffer[]
1418template<
typename Ordinal,
typename Packet,
typename Serializer>
1422 const Ordinal sendCount,
const Packet sendBuffer[],
1423 const Ordinal recvCount, Packet recvBuffer[]
1426 TEUCHOS_COMM_TIME_MONITOR(
1427 "Teuchos::CommHelpers: gatherAll<"
1432 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1434 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1436 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1437 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1442template<
typename Ordinal,
typename Packet>
1446 const Ordinal count,
1455 (
true, std::logic_error,
"Teuchos::reduce<" <<
1457 <<
">: Generic version not implemented. We only implement this function "
1458 "for Ordinal = int and Packet = specific types.");
1462template<
typename Ordinal,
typename Packet>
1465 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1468 TEUCHOS_COMM_TIME_MONITOR(
1469 "Teuchos::CommHelpers: reduceAll<"
1471 <<
">( value type, user-defined op )"
1474 charSendBuffer(count,sendBuffer);
1476 charGlobalReducts(count,globalReducts);
1478 charReductOp(
rcp(&reductOp,
false));
1480 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1481 ,charGlobalReducts.getCharBuffer()
1486template<
typename Ordinal,
typename Packet>
1489 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1492 TEUCHOS_COMM_TIME_MONITOR(
1493 "Teuchos::CommHelpers: reduceAll<"
1495 <<
">( value type, "<<toString(reductType)<<
" )"
1499 createOp<Ordinal, Packet> (reductType);
1501 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1503 catch (std::exception& e) {
1519#ifdef HAVE_TEUCHOS_COMPLEX
1522TEUCHOSCOMM_LIB_DLL_EXPORT
void
1524 const EReductionType reductType,
1526 const std::complex<double> sendBuffer[],
1527 std::complex<double> globalReducts[]);
1532 const int sourceRank);
1536 const int sourceRank,
1540TEUCHOSCOMM_LIB_DLL_EXPORT
void
1543 const std::complex<double> sendBuffer[],
1544 const int destRank);
1546TEUCHOSCOMM_LIB_DLL_EXPORT
void
1561TEUCHOSCOMM_LIB_DLL_EXPORT
void
1563 const EReductionType reductType,
1565 const std::complex<float> sendBuffer[],
1566 std::complex<float> globalReducts[]);
1571 const int sourceRank);
1575 const int sourceRank,
1579TEUCHOSCOMM_LIB_DLL_EXPORT
void
1582 const std::complex<float> sendBuffer[],
1583 const int destRank);
1585TEUCHOSCOMM_LIB_DLL_EXPORT
void
1602TEUCHOSCOMM_LIB_DLL_EXPORT
void
1604 const int sendCounts[],
1605 const int sendDispls[],
1607 const int recvCounts[],
1608 const int recvDispls[],
1612TEUCHOSCOMM_LIB_DLL_EXPORT
void
1614 const EReductionType reductType,
1616 const double sendBuffer[],
1617 double globalReducts[]);
1622 const int sourceRank);
1626 const int sourceRank,
1630TEUCHOSCOMM_LIB_DLL_EXPORT
void
1633 const double sendBuffer[],
1634 const int destRank);
1636TEUCHOSCOMM_LIB_DLL_EXPORT
void
1650TEUCHOSCOMM_LIB_DLL_EXPORT
void
1652 const int sendCount,
1654 const int recvCounts[],
1661TEUCHOSCOMM_LIB_DLL_EXPORT
void
1663 const EReductionType reductType,
1665 const float sendBuffer[],
1666 float globalReducts[]);
1671 const int sourceRank);
1675 const int sourceRank,
1679TEUCHOSCOMM_LIB_DLL_EXPORT
void
1682 const float sendBuffer[],
1683 const int destRank);
1685TEUCHOSCOMM_LIB_DLL_EXPORT
void
1699TEUCHOSCOMM_LIB_DLL_EXPORT
void
1701 const int sendCount,
1703 const int recvCounts[],
1710TEUCHOSCOMM_LIB_DLL_EXPORT
void
1712 const int sendCount,
1713 long long recvBuf[],
1714 const int recvCount,
1718TEUCHOSCOMM_LIB_DLL_EXPORT
void
1720 const int sendCount,
1721 long long recvBuf[],
1722 const int recvCounts[],
1727TEUCHOSCOMM_LIB_DLL_EXPORT
void
1729 const EReductionType reductType,
1731 const long long sendBuffer[],
1732 long long globalReducts[]);
1737 const int sourceRank);
1741 const int sourceRank,
1745TEUCHOSCOMM_LIB_DLL_EXPORT
void
1748 const long long sendBuffer[],
1749 const int destRank);
1751TEUCHOSCOMM_LIB_DLL_EXPORT
void
1766TEUCHOSCOMM_LIB_DLL_EXPORT
void
1768 const int sendCount,
1769 unsigned long long recvBuf[],
1770 const int recvCount,
1774TEUCHOSCOMM_LIB_DLL_EXPORT
void
1776 const int sendCount,
1777 unsigned long long recvBuf[],
1778 const int recvCounts[],
1783TEUCHOSCOMM_LIB_DLL_EXPORT
void
1785 const EReductionType reductType,
1787 const unsigned long long sendBuffer[],
1788 unsigned long long globalReducts[]);
1793 const int sourceRank);
1797 const int sourceRank,
1801TEUCHOSCOMM_LIB_DLL_EXPORT
void
1804 const unsigned long long sendBuffer[],
1805 const int destRank);
1807TEUCHOSCOMM_LIB_DLL_EXPORT
void
1822TEUCHOSCOMM_LIB_DLL_EXPORT
void
1824 const int sendCount,
1826 const int recvCount,
1830TEUCHOSCOMM_LIB_DLL_EXPORT
void
1832 const int sendCount,
1834 const int recvCounts[],
1839TEUCHOSCOMM_LIB_DLL_EXPORT
void
1841 const EReductionType reductType,
1843 const long sendBuffer[],
1844 long globalReducts[]);
1849 const int sourceRank);
1853 const int sourceRank,
1857TEUCHOSCOMM_LIB_DLL_EXPORT
void
1860 const long sendBuffer[],
1861 const int destRank);
1863TEUCHOSCOMM_LIB_DLL_EXPORT
void
1878TEUCHOSCOMM_LIB_DLL_EXPORT
void
1880 const int sendCount,
1881 unsigned long recvBuf[],
1882 const int recvCount,
1886TEUCHOSCOMM_LIB_DLL_EXPORT
void
1888 const int sendCount,
1889 unsigned long recvBuf[],
1890 const int recvCounts[],
1895TEUCHOSCOMM_LIB_DLL_EXPORT
void
1897 const EReductionType reductType,
1899 const unsigned long sendBuffer[],
1900 unsigned long globalReducts[]);
1905 const int sourceRank);
1909 const int sourceRank,
1913TEUCHOSCOMM_LIB_DLL_EXPORT
void
1916 const unsigned long sendBuffer[],
1917 const int destRank);
1919TEUCHOSCOMM_LIB_DLL_EXPORT
void
1934TEUCHOSCOMM_LIB_DLL_EXPORT
void
1936 const int sendCount,
1938 const int recvCount,
1942TEUCHOSCOMM_LIB_DLL_EXPORT
void
1944 const int sendCounts[],
1945 const int sendDispls[],
1947 const int recvCounts[],
1948 const int recvDispls[],
1952TEUCHOSCOMM_LIB_DLL_EXPORT
void
1954 const int sendCount,
1956 const int recvCount,
1960TEUCHOSCOMM_LIB_DLL_EXPORT
void
1962 const int sendCount,
1964 const int recvCounts[],
1969TEUCHOSCOMM_LIB_DLL_EXPORT
void
1970scatter (
const int sendBuf[],
1971 const int sendCount,
1973 const int recvCount,
1977TEUCHOSCOMM_LIB_DLL_EXPORT
void
1978scatterv (
const int sendBuf[],
1979 const int sendCounts[],
1982 const int recvCount,
1986TEUCHOSCOMM_LIB_DLL_EXPORT
void
1987scatterv (
const double sendBuf[],
1988 const int sendCounts[],
1991 const int recvCount,
1995TEUCHOSCOMM_LIB_DLL_EXPORT
void
1996scatterv (
const float sendBuf[],
1997 const int sendCounts[],
2000 const int recvCount,
2004TEUCHOSCOMM_LIB_DLL_EXPORT
void
2008 const EReductionType reductType,
2012TEUCHOSCOMM_LIB_DLL_EXPORT
void
2016 const EReductionType reductType,
2020TEUCHOSCOMM_LIB_DLL_EXPORT
void
2022 unsigned long recvBuf[],
2024 const EReductionType reductType,
2028TEUCHOSCOMM_LIB_DLL_EXPORT
void
2030 unsigned long long recvBuf[],
2032 const EReductionType reductType,
2036TEUCHOSCOMM_LIB_DLL_EXPORT
void
2040 const EReductionType reductType,
2044TEUCHOSCOMM_LIB_DLL_EXPORT
void
2046 const EReductionType reductType,
2048 const int sendBuffer[],
2049 int globalReducts[]);
2055 const int sourceRank);
2059 const int sourceRank,
2063TEUCHOSCOMM_LIB_DLL_EXPORT
void
2066 const int sendBuffer[],
2067 const int destRank);
2069TEUCHOSCOMM_LIB_DLL_EXPORT
void
2084TEUCHOSCOMM_LIB_DLL_EXPORT
void
2086 const int sendCount,
2087 unsigned int recvBuf[],
2088 const int recvCount,
2092TEUCHOSCOMM_LIB_DLL_EXPORT
void
2094 const int sendCount,
2095 unsigned int recvBuf[],
2096 const int recvCounts[],
2101TEUCHOSCOMM_LIB_DLL_EXPORT
void
2103 const EReductionType reductType,
2105 const unsigned int sendBuffer[],
2106 unsigned int globalReducts[]);
2111 const int sourceRank);
2115 const int sourceRank,
2119TEUCHOSCOMM_LIB_DLL_EXPORT
void
2122 const unsigned int sendBuffer[],
2123 const int destRank);
2125TEUCHOSCOMM_LIB_DLL_EXPORT
void
2140TEUCHOSCOMM_LIB_DLL_EXPORT
void
2142 const int sendCount,
2144 const int recvCount,
2148TEUCHOSCOMM_LIB_DLL_EXPORT
void
2150 const int sendCount,
2152 const int recvCounts[],
2157TEUCHOSCOMM_LIB_DLL_EXPORT
void
2159 const EReductionType reductType,
2161 const short sendBuffer[],
2162 short globalReducts[]);
2167 const int sourceRank);
2171 const int sourceRank,
2175TEUCHOSCOMM_LIB_DLL_EXPORT
void
2178 const short sendBuffer[],
2179 const int destRank);
2181TEUCHOSCOMM_LIB_DLL_EXPORT
void
2205TEUCHOSCOMM_LIB_DLL_EXPORT
void
2207 const EReductionType reductType,
2209 const char sendBuffer[],
2210 char globalReducts[]);
2215template<
typename Ordinal,
typename Packet>
2227template<
typename Ordinal,
typename Packet>
2231 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2234 TEUCHOS_COMM_TIME_MONITOR(
2235 "Teuchos::CommHelpers: reduceAll<"
2237 <<
">( reference type )"
2240 charSendBuffer(serializer,count,sendBuffer);
2242 charGlobalReducts(serializer,count,globalReducts);
2244 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2251template<
typename Ordinal,
typename Packet,
typename Serializer>
2256 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2259 TEUCHOS_COMM_TIME_MONITOR(
2260 "Teuchos::CommHelpers: reduceAll<"
2262 <<
">( value type, user-defined op )"
2265 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2267 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2269 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2271 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2272 ,charGlobalReducts.getCharBuffer()
2277template<
typename Ordinal,
typename Packet,
typename Serializer>
2282 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2285 TEUCHOS_COMM_TIME_MONITOR(
2286 "Teuchos::CommHelpers: reduceAll<"
2288 <<
">( value type, "<<toString(reductType)<<
" )"
2292 createOp<Ordinal, Packet> (reductType);
2294 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2296 catch (std::exception& e) {
2304template<
typename Ordinal,
typename Packet>
2307 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2310 TEUCHOS_COMM_TIME_MONITOR(
2311 "Teuchos::CommHelpers: scan<"
2313 <<
">( value type, user-defined op )"
2316 charSendBuffer(count,sendBuffer);
2318 charScanReducts(count,scanReducts);
2320 charReductOp(
rcp(&reductOp,
false));
2322 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2323 ,charScanReducts.getCharBuffer()
2328template<
typename Ordinal,
typename Packet>
2331 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2334 TEUCHOS_COMM_TIME_MONITOR(
2335 "Teuchos::CommHelpers: scan<"
2337 <<
">( value type, "<<toString(reductType)<<
" )"
2341 createOp<Ordinal, Packet> (reductType);
2343 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2345 catch (std::exception& e) {
2353template<
typename Ordinal,
typename Packet>
2363template<
typename Ordinal,
typename Packet>
2367 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2373template<
typename Ordinal,
typename Packet,
typename Serializer>
2378 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2381 TEUCHOS_COMM_TIME_MONITOR(
2382 "Teuchos::CommHelpers: scan<"
2384 <<
">( value type, user-defined op )"
2387 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2389 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2391 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2393 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2394 ,charScanReducts.getCharBuffer()
2399template<
typename Ordinal,
typename Packet,
typename Serializer>
2404 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2407 TEUCHOS_COMM_TIME_MONITOR(
2408 "Teuchos::CommHelpers: scan<"
2410 <<
">( value type, "<<toString(reductType)<<
" )"
2414 createOp<Ordinal, Packet> (reductType);
2416 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2418 catch (std::exception& e) {
2425template<
typename Ordinal,
typename Packet>
2428 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2431 TEUCHOS_COMM_TIME_MONITOR(
2432 "Teuchos::CommHelpers: send<"
2437 charSendBuffer(count,sendBuffer);
2439 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2444template<
typename Ordinal,
typename Packet>
2447 const Ordinal count,
2452 TEUCHOS_COMM_TIME_MONITOR(
2453 "Teuchos::CommHelpers: send<"
2458 comm.
send (charSendBuffer.getBytes (), charSendBuffer.getCharBuffer (), destRank, tag);
2461template<
typename Ordinal,
typename Packet>
2464 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2467 TEUCHOS_COMM_TIME_MONITOR(
2468 "Teuchos::CommHelpers: ssend<"
2473 charSendBuffer(count,sendBuffer);
2475 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2480template<
typename Ordinal,
typename Packet>
2483 const Ordinal count,
2488 TEUCHOS_COMM_TIME_MONITOR(
2489 "Teuchos::CommHelpers: ssend<"
2494 buf_type charSendBuffer (count, sendBuffer);
2495 comm.
ssend (charSendBuffer.getBytes (),
2496 charSendBuffer.getCharBuffer (),
2500template<
typename Ordinal,
typename Packet>
2503 const Packet &
send,
const int destRank
2509template<
typename Ordinal,
typename Packet>
2512 const Packet &
send,
const int destRank
2518template<
typename Ordinal,
typename Packet>
2521 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2527template<
typename Ordinal,
typename Packet,
typename Serializer>
2531 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2534 TEUCHOS_COMM_TIME_MONITOR(
2535 "Teuchos::CommHelpers: send<"
2540 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2542 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2547template<
typename Ordinal,
typename Packet>
2550 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2553 TEUCHOS_COMM_TIME_MONITOR(
2554 "Teuchos::CommHelpers: receive<"
2559 charRecvBuffer(count,recvBuffer);
2562 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2567template<
typename Ordinal,
typename Packet>
2570 const int sourceRank, Packet *recv
2577template<
typename Ordinal,
typename Packet>
2580 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2586template<
typename Ordinal,
typename Packet,
typename Serializer>
2590 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2593 TEUCHOS_COMM_TIME_MONITOR(
2594 "Teuchos::CommHelpers: receive<"
2599 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2602 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2606template<
typename Ordinal,
typename Packet>
2613 TEUCHOS_COMM_TIME_MONITOR(
2614 "Teuchos::CommHelpers: readySend<"
2620 comm.
readySend( charSendBuffer.getCharBufferView(), destRank );
2623template<
typename Ordinal,
typename Packet>
2626 const Ordinal count,
2631 TEUCHOS_COMM_TIME_MONITOR(
2632 "Teuchos::CommHelpers: readySend<"
2637 buf_type charSendBuffer (count, sendBuffer);
2638 comm.
readySend (charSendBuffer.getBytes (),
2639 charSendBuffer.getCharBuffer (),
2643template<
typename Ordinal,
typename Packet>
2653template<
typename Ordinal,
typename Packet,
typename Serializer>
2661 TEUCHOS_COMM_TIME_MONITOR(
2662 "Teuchos::CommHelpers: readySend<"
2667 charSendBuffer(sendBuffer.
size(), sendBuffer.
getRawPtr(), serializer);
2668 comm.
readySend( charSendBuffer.getCharBufferView(), destRank );
2671template<
typename Ordinal,
typename Packet>
2679 TEUCHOS_COMM_TIME_MONITOR(
2680 "Teuchos::CommHelpers: isend<"
2687 charSendBuffer.getCharBufferView(), destRank );
2692template<
typename Ordinal,
typename Packet>
2694Teuchos::isend (
const ArrayRCP<const Packet> &sendBuffer,
2697 const Comm<Ordinal>& comm)
2699 TEUCHOS_COMM_TIME_MONITOR(
2700 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2701 << TypeNameTraits<Packet>::name () <<
">");
2702 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2703 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2704 RCP<CommRequest<Ordinal> > commRequest =
2705 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2706 set_extra_data (sendBuffer,
"buffer", inOutArg (commRequest));
2710template<
typename Ordinal,
typename Packet>
2713 const Comm<Ordinal>& comm,
2714 const RCP<const Packet> &send,
2718 const ArrayRCP<const Packet> sendBuffer =
2722 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2725template<
typename Ordinal,
typename Packet,
typename Serializer>
2728 const Comm<Ordinal>& comm,
2729 const Serializer& serializer,
2730 const ArrayRCP<const Packet> &sendBuffer,
2734 TEUCHOS_COMM_TIME_MONITOR(
2735 "Teuchos::CommHelpers: isend<"
2736 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2739 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2740 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2741 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2742 charSendBuffer.getCharBufferView(), destRank );
2747template<
typename Ordinal,
typename Packet>
2750 const Comm<Ordinal>& comm,
2751 const ArrayRCP<Packet> &recvBuffer,
2752 const int sourceRank
2755 TEUCHOS_COMM_TIME_MONITOR(
2756 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2757 ValueTypeSerializationBuffer<Ordinal,Packet>
2758 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2759 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2760 charRecvBuffer.getCharBufferView(), sourceRank );
2765template<
typename Ordinal,
typename Packet>
2768 const int sourceRank,
2772 TEUCHOS_COMM_TIME_MONITOR(
2773 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2774 ValueTypeSerializationBuffer<int, Packet>
2775 charRecvBuffer (recvBuffer.
size (), recvBuffer.
getRawPtr ());
2776 RCP<CommRequest<int> > commRequest =
2777 comm.
ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2782template<
typename Ordinal,
typename Packet>
2785 const Comm<Ordinal>& comm,
2786 const RCP<Packet> &recv,
2787 const int sourceRank
2790 const ArrayRCP<Packet> recvBuffer =
2794 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2797template<
typename Ordinal,
typename Packet,
typename Serializer>
2800 const Comm<Ordinal>& comm,
2801 const Serializer& serializer,
2802 const ArrayRCP<Packet> &recvBuffer,
2803 const int sourceRank
2806 TEUCHOS_COMM_TIME_MONITOR(
2807 "Teuchos::CommHelpers: ireceive<"
2808 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2811 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2812 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2813 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2814 charRecvBuffer.getCharBufferView(), sourceRank );
2819template<
typename Ordinal>
2829template<
typename Ordinal>
2835 comm.
waitAll (requests, statuses);
2839template<
typename Ordinal>
2844 return comm.
wait (request);
Templated array class derived from the STL std::vector.
Implementation of Teuchos wrappers for MPI.
Declaration of Teuchos::EReductionType enum, and related functions.
Defines basic traits for the ordinal field type.
Defines basic traits for the scalar field type.
Defines basic traits returning the name of a type in a portable and readable way.
Definition of Teuchos::as, for conversions between types.
Standard logical AND operator for booleans.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
T * getRawPtr()
Return a raw pointer to beginning of array or NULL if unsized.
void push_back(const value_type &x)
Reference-counted smart pointer for managing arrays.
void set_extra_data(const T1 &extra_data, const std::string &name, const Ptr< ArrayRCP< T2 > > &p, EPrePostDestruction destroy_when=POST_DESTROY, bool force_unique=true)
Set extra data associated with a ArrayRCP object.
size_type size() const
The total number of entries in the array.
ArrayRCP< T > arcpWithEmbeddedObj(T *p, typename ArrayRCP< T >::size_type lowerOffset, typename ArrayRCP< T >::size_type size, const Embedded &embedded, bool owns_mem=true)
Create an ArrayRCP with and also put in an embedded object.
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
size_type size() const
The total number of items in the managed array.
T * getRawPtr() const
Return a raw pointer to beginning of array or NULL if unsized.
ArrayView< T > arrayView(T *p, typename ArrayView< T >::size_type size)
Construct a const or non-const view to const or non-const data.
Decorator class that uses a strategy object to convert to and from char[] to typed buffers for object...
Decorator class that uses traits to convert to and from char[] to typed buffers for objects that use ...
Abstract interface for distributed-memory communication.
virtual void broadcast(const int rootRank, const Ordinal bytes, char buffer[]) const =0
Broadcast values from the root process to the slave processes.
void ssend(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Synchronously send a single object that use values semantics to another process.
virtual void gather(const Ordinal sendBytes, const char sendBuffer[], const Ordinal recvBytes, char recvBuffer[], const int root) const =0
Gather values from all processes to the root 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 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...
virtual void waitAll(const ArrayView< RCP< CommRequest< Ordinal > > > &requests) const =0
Wait on a set of communication requests.
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.
int receive(const Comm< Ordinal > &comm, const int sourceRank, const Ordinal count, Packet recvBuffer[])
Receive objects that use values semantics from another process.
virtual void readySend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Ready send of data from this process to another 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.
virtual RCP< CommRequest< Ordinal > > ireceive(const ArrayView< char > &recvBuffer, const int sourceRank) const =0
Non-blocking receive.
virtual void reduceAll(const ValueTypeReductionOp< Ordinal, char > &reductOp, const Ordinal bytes, const char sendBuffer[], char globalReducts[]) const =0
Global reduction.
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 send(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Send a single object that use values semantics to another process.
virtual int getSize() const =0
Returns the number of processes that make up this communicator.
void alltoAll(const Packet sendBuf[], const Ordinal sendCount, Packet recvBuf[], const Ordinal recvCount, const Comm< Ordinal > &comm)
Scatter values from all processes to all processes.
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 alltoAllv(const Packet sendBuf[], const Ordinal sendCounts[], const Ordinal sendDispls[], Packet recvBuf[], const Ordinal recvCounts[], const Ordinal recvDispls[], const Comm< Ordinal > &comm)
Scatter values from all processes to all processes.
virtual void gatherAll(const Ordinal sendBytes, const char sendBuffer[], const Ordinal recvBytes, char recvBuffer[]) const =0
Gather values from each process to collect on all processes.
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.
virtual void send(const Ordinal bytes, const char sendBuffer[], const int destRank) const =0
Possibly blocking send of data from this process to another process.
void 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...
virtual RCP< CommStatus< Ordinal > > wait(const Ptr< RCP< CommRequest< Ordinal > > > &request) const =0
Wait on a single communication request, and return its status.
virtual void scan(const ValueTypeReductionOp< Ordinal, char > &reductOp, const Ordinal bytes, const char sendBuffer[], char scanReducts[]) const =0
Scan reduction.
int rank(const Comm< Ordinal > &comm)
Get the process rank.
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...
int receive(const Comm< Ordinal > &comm, const int sourceRank, Packet *recv)
Receive a single object that use values semantics from another process.
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 broadcast(const Comm< Ordinal > &comm, const int rootRank, const ArrayView< Packet > &buffer)
Broadcast array of objects that use value semantics.
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.
virtual int receive(const int sourceRank, const Ordinal bytes, char recvBuffer[]) const =0
Blocking receive of data from this process 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 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.
virtual void ssend(const Ordinal bytes, const char sendBuffer[], const int destRank) const =0
Always blocking send of data from this process to another process.
RCP< CommRequest< Ordinal > > ireceive(const Comm< Ordinal > &comm, const RCP< Packet > &recv, const int sourceRank)
Receive one object (that uses values semantics) from another process.
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 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 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...
virtual int getRank() const =0
Returns the rank of this 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 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.
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 broadcast(const Comm< Ordinal > &comm, const int rootRank, const Ptr< Packet > &object)
Broadcast single object that use value semantics.
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.
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.
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.
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 readySend(const Comm< Ordinal > &comm, const Packet &send, const int destRank)
Ready-Send a single object that use values semantics to another process.
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...
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.
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 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 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...
virtual void barrier() const =0
Pause every process in *this communicator until all the processes reach this point.
void broadcast(const Comm< Ordinal > &comm, const int rootRank, Packet *object)
Broadcast single object that use value semantics.
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 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 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.
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.
void send(const Comm< OrdinalType > &comm, const OrdinalType count, const Packet sendBuffer[], const int destRank)
void broadcast(const Comm< Ordinal > &comm, const int rootRank, const Ordinal count, Packet buffer[])
Broadcast array of objects that use value semantics.
int size(const Comm< Ordinal > &comm)
Get the number of processes in the communicator.
virtual RCP< CommRequest< Ordinal > > isend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Non-blocking send.
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 Serializer &serializer, const int sourceRank, const Ordinal count, Packet recvBuffer[])
Receive objects that use values semantics from another process using customized serializer.
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...
void waitAll(const Comm< Ordinal > &comm, const ArrayView< RCP< CommRequest< Ordinal > > > &requests)
Wait for an array of Teuchos::CommRequest objects.
void barrier(const Comm< Ordinal > &comm)
Barrier.
Encapsulation of a pending nonblocking communication operation.
Encapsulation of the result of a receive (blocking or nonblocking).
Encapsulate how an array of const objects with reference sematics is serialized into a char[] array.
const char * getCharBuffer() const
Encapsulate how an array of const objects with value sematics is serialized into a const char[] array...
Standard Max operator for types with value semantics.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Standard min operator for types with value semantics.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Ptr< T > inOutArg(T &arg)
create a non-persisting (required or optional) input/output argument for a function call.
Smart reference counting pointer class for automatic garbage collection.
Base interface class for user-defined reduction operations for objects that use reference semantics.
Encapsulate how an array of non-const objects with reference sematics is serialized into a char[] arr...
char * getCharBuffer() const
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
static std::string name()
Base interface class for user-defined reduction operations for objects that use value semantics.
Encapsulate how an array of non-const objects with value sematics is serialized into a char[] array.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
Avoid warning about unreachable or missing return from function.
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).
static std::string name()
Returns name of this ordinal type.