10 #ifndef TEUCHOS_COMM_HELPERS_HPP
11 #define TEUCHOS_COMM_HELPERS_HPP
25 #ifdef HAVE_TEUCHOS_MPI
27 #endif // HAVE_TEUCHOS_MPI
37 #ifdef HAVE_TEUCHOS_MPI
46 std::string getMpiErrorString (
const int errCode);
49 #endif // HAVE_TEUCHOS_MPI
55 template<
typename Ordinal>
56 int rank(
const Comm<Ordinal>& comm);
62 template<
typename Ordinal>
63 int size(
const Comm<Ordinal>& comm);
69 template<
typename Ordinal>
70 void barrier(
const Comm<Ordinal>& comm);
76 template<
typename Ordinal,
typename Packet>
78 const Comm<Ordinal>& comm,
80 const Ordinal count, Packet buffer[]
87 template<
typename Ordinal,
typename Packet>
89 const Comm<Ordinal>& comm,
91 const ArrayView<Packet> &buffer
98 template<
typename Ordinal,
typename Packet>
100 const Comm<Ordinal>& comm,
101 const int rootRank, Packet *
object
108 template<
typename Ordinal,
typename Packet>
110 const Comm<Ordinal>& comm,
111 const int rootRank,
const Ptr<Packet> &
object
118 template<
typename Ordinal,
typename Packet>
120 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
121 const int rootRank,
const Ordinal count, Packet*
const buffer[]
128 template<
typename Ordinal,
typename Packet>
130 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
131 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
139 template<
typename Ordinal,
typename Packet,
typename Serializer>
141 const Comm<Ordinal>& comm,
142 const Serializer& serializer,
144 const Ordinal count, Packet buffer[]
151 template<
typename Ordinal,
typename Packet>
153 gather (
const Packet sendBuf[],
154 const Ordinal sendCount,
156 const Ordinal recvCount,
158 const Comm<Ordinal>& comm);
164 template<
typename Ordinal,
typename Packet>
166 gatherv (
const Packet sendBuf[],
167 const Ordinal sendCount,
169 const Ordinal recvCounts[],
170 const Ordinal displs[],
172 const Comm<Ordinal>& comm);
179 template<
typename Ordinal,
typename Packet>
181 const Comm<Ordinal>& comm,
182 const Ordinal sendCount,
const Packet sendBuffer[],
183 const Ordinal recvCount, Packet recvBuffer[]
191 template<
typename Ordinal,
typename Packet>
193 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
194 const Ordinal sendCount,
const Packet*
const sendBuffer[],
195 const Ordinal recvCount, Packet*
const recvBuffer[]
203 template<
typename Ordinal,
typename Packet,
typename Serializer>
205 const Comm<Ordinal>& comm,
206 const Serializer& serializer,
207 const Ordinal sendCount,
const Packet sendBuffer[],
208 const Ordinal recvCount, Packet recvBuffer[]
237 template<
typename Ordinal,
typename Packet>
240 const Ordinal sendCount,
242 const Ordinal recvCount,
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.");
284 template<
typename Ordinal,
typename Packet>
286 reduce (
const Packet sendBuf[],
315 template<
typename Ordinal,
typename Packet>
318 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
326 template<
typename Ordinal,
typename Packet>
329 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
337 template<
typename Ordinal,
typename Packet>
348 template<
typename Ordinal,
typename Packet>
352 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
360 template<
typename Ordinal,
typename Packet,
typename Serializer>
365 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
373 template<
typename Ordinal,
typename Packet,
typename Serializer>
378 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
386 template<
typename Ordinal,
typename Packet>
389 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
397 template<
typename Ordinal,
typename Packet>
400 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
408 template<
typename Ordinal,
typename Packet>
419 template<
typename Ordinal,
typename Packet>
423 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
431 template<
typename Ordinal,
typename Packet,
typename Serializer>
436 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
444 template<
typename Ordinal,
typename Packet,
typename Serializer>
449 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
456 template<
typename Ordinal,
typename Packet>
459 const Ordinal count,
const Packet sendBuffer[],
const int destRank
463 template<
typename Ordinal,
typename Packet>
465 send (
const Packet sendBuffer[],
475 template<
typename Ordinal,
typename Packet>
478 const Ordinal count,
const Packet sendBuffer[],
const int destRank
482 template<
typename Ordinal,
typename Packet>
484 ssend (
const Packet sendBuffer[],
494 template<
typename Ordinal,
typename Packet>
497 const Packet &
send,
const int destRank
504 template<
typename Ordinal,
typename Packet>
507 const Packet &
send,
const int destRank
516 template<
typename Ordinal,
typename Packet>
519 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
527 template<
typename Ordinal,
typename Packet,
typename Serializer>
531 const Ordinal count,
const Packet sendBuffer[],
const int destRank
538 template<
typename Ordinal,
typename Packet>
541 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
548 template<
typename Ordinal,
typename Packet>
551 const int sourceRank, Packet *recv
558 template<
typename Ordinal,
typename Packet>
561 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
569 template<
typename Ordinal,
typename Packet,
typename Serializer>
573 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
581 template<
typename Ordinal,
typename Packet>
589 template<
typename Ordinal,
typename Packet>
601 template<
typename Ordinal,
typename Packet>
613 template<
typename Ordinal,
typename Packet,
typename Serializer>
625 template<
typename Ordinal,
typename Packet>
633 template<
typename Ordinal,
typename Packet>
644 template<
typename Ordinal,
typename Packet>
656 template<
typename Ordinal,
typename Packet,
typename Serializer>
677 template<
typename Ordinal,
typename Packet>
685 template<
typename Ordinal,
typename Packet>
688 const int sourceRank,
703 template<
typename Ordinal,
typename Packet>
715 template<
typename Ordinal,
typename Packet,
typename Serializer>
734 template<
typename Ordinal>
769 template<
typename Ordinal>
798 template<
typename Ordinal>
811 template<
typename Ordinal,
typename Packet>
818 const Packet inBuffer[],
832 template<
typename Ordinal,
typename Packet>
839 const Packet inBuffer[],
853 template<
typename Ordinal,
typename Packet>
860 const Packet inBuffer[],
870 template<
typename Ordinal,
typename Packet>
877 const Packet inBuffer[],
892 namespace MixMaxUtilities {
895 template<
bool isComparable,
typename Ordinal,
typename Packet>
899 template<
typename Ordinal,
typename Packet>
900 class Min<true,Ordinal,Packet> {
904 const Packet inBuffer[],
908 for(
int i = 0; i < count; ++i )
909 inoutBuffer[i] =
TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
914 template<
typename Ordinal,
typename Packet>
915 class Min<false,Ordinal,Packet> {
924 true,std::logic_error,
926 <<
" does not support comparison operations!"
932 template<
bool isComparable,
typename Ordinal,
typename Packet>
936 template<
typename Ordinal,
typename Packet>
937 class Max<true,Ordinal,Packet> {
941 const Packet inBuffer[],
945 for(
int i = 0; i < count; ++i )
946 inoutBuffer[i] =
TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
951 template<
typename Ordinal,
typename Packet>
952 class Max<false,Ordinal,Packet> {
961 true,std::logic_error,
963 <<
" does not support comparison operations!"
969 template<
bool isComparable,
typename Ordinal,
typename Packet>
973 template<
typename Ordinal,
typename Packet>
974 class AND<true,Ordinal,Packet> {
978 const Packet inBuffer[],
982 for(
int i = 0; i < count; ++i )
983 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
988 template<
typename Ordinal,
typename Packet>
989 class AND<false,Ordinal,Packet> {
998 true,std::logic_error,
1000 <<
" does not support logical AND operations!"
1009 template<
typename Ordinal,
typename Packet>
1011 const Ordinal count,
1012 const Packet inBuffer[],
1013 Packet inoutBuffer[]
1016 for(
int i = 0; i < count; ++i )
1017 inoutBuffer[i] += inBuffer[i];
1021 template<
typename Ordinal,
typename Packet>
1023 const Ordinal count,
1024 const Packet inBuffer[],
1025 Packet inoutBuffer[]
1029 min_type::min (count, inBuffer, inoutBuffer);
1033 template<
typename Ordinal,
typename Packet>
1035 const Ordinal count,
1036 const Packet inBuffer[],
1037 Packet inoutBuffer[]
1041 max_type::max (count,inBuffer,inoutBuffer);
1045 template<
typename Ordinal,
typename Packet>
1047 const Ordinal count,
1048 const Packet inBuffer[],
1049 Packet inoutBuffer[]
1053 and_type::andOp (count, inBuffer, inoutBuffer);
1083 template<
typename Ordinal,
typename Packet>
1084 ValueTypeReductionOp<Ordinal,Packet>*
1088 switch (reductType) {
1093 if (ST::isComparable) {
1098 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1100 <<
" is not less-than comparable, so it does not make sense to do a "
1101 "MIN reduction with it.");
1105 if (ST::isComparable) {
1110 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1112 <<
" is not less-than comparable, so it does not make sense to do a "
1113 "MAX reduction with it.");
1121 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): "
1122 "Invalid EReductionType value " << reductType <<
". Valid values "
1123 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1136 template<
typename Ordinal>
1137 int Teuchos::rank(
const Comm<Ordinal>& comm)
1139 return comm.getRank();
1143 template<
typename Ordinal>
1144 int Teuchos::size(
const Comm<Ordinal>& comm)
1146 return comm.getSize();
1150 template<
typename Ordinal>
1151 void Teuchos::barrier(
const Comm<Ordinal>& comm)
1154 "Teuchos::CommHelpers: barrier<"
1155 <<OrdinalTraits<Ordinal>::name()
1162 template<
typename Ordinal,
typename Packet>
1163 void Teuchos::broadcast(
1164 const Comm<Ordinal>& comm,
1165 const int rootRank,
const Ordinal count, Packet buffer[]
1169 "Teuchos::CommHelpers: broadcast<"
1170 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1173 ValueTypeSerializationBuffer<Ordinal,Packet>
1174 charBuffer(count,buffer);
1176 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1181 template<
typename Ordinal,
typename Packet>
1182 void Teuchos::broadcast(
1183 const Comm<Ordinal>& comm,
1185 const ArrayView<Packet> &buffer
1188 broadcast<Ordinal, Packet>(comm, rootRank, buffer.size(), buffer.getRawPtr() );
1192 template<
typename Ordinal,
typename Packet>
1193 void Teuchos::broadcast(
1194 const Comm<Ordinal>& comm,
1195 const int rootRank, Packet *
object
1198 broadcast<Ordinal,Packet>(comm,rootRank,1,object);
1202 template<
typename Ordinal,
typename Packet>
1203 void Teuchos::broadcast(
1204 const Comm<Ordinal>& comm,
1205 const int rootRank,
const Ptr<Packet> &
object
1208 broadcast<Ordinal,Packet>(comm,rootRank,1,
object.getRawPtr());
1212 template<
typename Ordinal,
typename Packet>
1213 void Teuchos::broadcast(
1214 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1215 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1219 "Teuchos::CommHelpers: broadcast<"
1220 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1221 <<
">( reference type )"
1223 ReferenceTypeSerializationBuffer<Ordinal,Packet>
1224 charBuffer(serializer, count, buffer);
1226 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1231 template<
typename Ordinal,
typename Packet>
1232 void Teuchos::broadcast(
1233 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1234 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
1237 Array<Packet*> bufferPtrArray;
1238 for (
int i = 0; i < buffer.size(); ++i) {
1239 bufferPtrArray.push_back(buffer[i].
getRawPtr());
1241 broadcast<Ordinal,Packet>(comm, serializer, rootRank,
1242 buffer.size(), bufferPtrArray.getRawPtr());
1245 template<
typename Ordinal,
typename Packet,
typename Serializer>
1246 void Teuchos::broadcast(
1247 const Comm<Ordinal>& comm,
1248 const Serializer& serializer,
1249 const int rootRank,
const Ordinal count, Packet buffer[]
1253 "Teuchos::CommHelpers: broadcast<"
1254 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1257 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1258 charBuffer(count,buffer,
rcp(&serializer,
false));
1260 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1265 template<
typename Ordinal,
typename Packet>
1266 void Teuchos::gatherAll(
1267 const Comm<Ordinal>& comm,
1268 const Ordinal sendCount,
const Packet sendBuffer[],
1269 const Ordinal recvCount, Packet recvBuffer[]
1273 "Teuchos::CommHelpers: gatherAll<"
1274 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1277 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1278 charSendBuffer(sendCount,sendBuffer);
1279 ValueTypeSerializationBuffer<Ordinal,Packet>
1280 charRecvBuffer(recvCount,recvBuffer);
1282 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1283 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1287 template<
typename Ordinal,
typename Packet>
1289 Teuchos::gather (
const Packet sendBuf[],
1290 const Ordinal sendCount,
1292 const Ordinal recvCount,
1294 const Comm<Ordinal>& comm)
1297 "Teuchos::CommHelpers: gather<"
1298 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1301 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1302 charSendBuffer (sendCount, sendBuf);
1303 ValueTypeSerializationBuffer<Ordinal,Packet>
1304 charRecvBuffer (recvCount, recvBuf);
1305 comm.gather (charSendBuffer.getBytes (),
1306 charSendBuffer.getCharBuffer (),
1307 charRecvBuffer.getBytes (),
1308 charRecvBuffer.getCharBuffer (),
1312 template<
typename Ordinal,
typename Packet>
1314 Teuchos::gatherv (
const Packet sendBuf[],
1315 const Ordinal sendCount,
1317 const Ordinal recvCounts[],
1318 const Ordinal displs[],
1320 const Comm<Ordinal>& comm)
1343 "Teuchos::gatherv: The general case is not implemented.");
1346 template<
typename Ordinal,
typename Packet>
1347 void Teuchos::gatherAll(
1348 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1349 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1350 const Ordinal recvCount, Packet*
const recvBuffer[]
1356 template<
typename Ordinal,
typename Packet,
typename Serializer>
1357 void Teuchos::gatherAll(
1358 const Comm<Ordinal>& comm,
1359 const Serializer& serializer,
1360 const Ordinal sendCount,
const Packet sendBuffer[],
1361 const Ordinal recvCount, Packet recvBuffer[]
1365 "Teuchos::CommHelpers: gatherAll<"
1366 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1369 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1370 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1371 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1372 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1374 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1375 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1380 template<
typename Ordinal,
typename Packet>
1382 Teuchos::reduce (
const Packet sendBuf[],
1384 const Ordinal count,
1387 const Comm<Ordinal>& comm)
1393 (
true, std::logic_error,
"Teuchos::reduce<" <<
1394 TypeNameTraits<Ordinal>::name () <<
"," << TypeNameTraits<Packet>::name ()
1395 <<
">: Generic version not implemented. We only implement this function "
1396 "for Ordinal = int and Packet = specific types.");
1400 template<
typename Ordinal,
typename Packet>
1401 void Teuchos::reduceAll(
1402 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp
1403 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1407 "Teuchos::CommHelpers: reduceAll<"
1408 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1409 <<
">( value type, user-defined op )"
1411 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1412 charSendBuffer(count,sendBuffer);
1413 ValueTypeSerializationBuffer<Ordinal,Packet>
1414 charGlobalReducts(count,globalReducts);
1415 CharToValueTypeReductionOp<Ordinal,Packet>
1416 charReductOp(
rcp(&reductOp,
false));
1418 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1419 ,charGlobalReducts.getCharBuffer()
1424 template<
typename Ordinal,
typename Packet>
1425 void Teuchos::reduceAll(
1427 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1431 "Teuchos::CommHelpers: reduceAll<"
1432 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1433 <<
">( value type, "<<
toString(reductType)<<
" )"
1436 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
1437 createOp<Ordinal, Packet> (reductType);
1439 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1441 catch (std::exception& e) {
1457 #ifdef HAVE_TEUCHOS_COMPLEX
1461 reduceAll<int, std::complex<double> > (
const Comm<int>& comm,
1462 const EReductionType reductType,
1464 const std::complex<double> sendBuffer[],
1465 std::complex<double> globalReducts[]);
1468 ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1469 const ArrayRCP<std::complex<double> >& recvBuffer,
1470 const int sourceRank);
1473 ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1474 const int sourceRank,
1476 const Comm<int>& comm);
1479 send<int, std::complex<double> > (
const Comm<int>& comm,
1481 const std::complex<double> sendBuffer[],
1482 const int destRank);
1485 send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1489 const Comm<int>& comm);
1492 isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1495 const Comm<int>& comm);
1500 reduceAll<int, std::complex<float> > (
const Comm<int>& comm,
1501 const EReductionType reductType,
1503 const std::complex<float> sendBuffer[],
1504 std::complex<float> globalReducts[]);
1507 ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1508 const ArrayRCP<std::complex<float> >& recvBuffer,
1509 const int sourceRank);
1512 ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1513 const int sourceRank,
1515 const Comm<int>& comm);
1518 send<int, std::complex<float> > (
const Comm<int>& comm,
1520 const std::complex<float> sendBuffer[],
1521 const int destRank);
1524 send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1528 const Comm<int>& comm);
1531 isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1534 const Comm<int>& comm);
1535 #endif // HAVE_TEUCHOS_COMPLEX
1542 const EReductionType reductType,
1544 const double sendBuffer[],
1545 double globalReducts[]);
1549 const ArrayRCP<double>& recvBuffer,
1550 const int sourceRank);
1554 const int sourceRank,
1556 const Comm<int>& comm);
1561 const double sendBuffer[],
1562 const int destRank);
1569 const Comm<int>& comm);
1575 const Comm<int>& comm);
1580 const int sendCount,
1582 const int recvCounts[],
1585 const Comm<int>& comm);
1591 const EReductionType reductType,
1593 const float sendBuffer[],
1594 float globalReducts[]);
1598 const ArrayRCP<float>& recvBuffer,
1599 const int sourceRank);
1603 const int sourceRank,
1605 const Comm<int>& comm);
1610 const float sendBuffer[],
1611 const int destRank);
1618 const Comm<int>& comm);
1624 const Comm<int>& comm);
1629 const int sendCount,
1631 const int recvCounts[],
1634 const Comm<int>& comm);
1640 const int sendCount,
1641 long long recvBuf[],
1642 const int recvCount,
1644 const Comm<int>& comm);
1648 const int sendCount,
1649 long long recvBuf[],
1650 const int recvCounts[],
1653 const Comm<int>& comm);
1657 const EReductionType reductType,
1659 const long long sendBuffer[],
1660 long long globalReducts[]);
1664 const ArrayRCP<long long>& recvBuffer,
1665 const int sourceRank);
1669 const int sourceRank,
1671 const Comm<int>& comm);
1676 const long long sendBuffer[],
1677 const int destRank);
1684 const Comm<int>& comm);
1690 const Comm<int>& comm);
1696 const int sendCount,
1697 unsigned long long recvBuf[],
1698 const int recvCount,
1700 const Comm<int>& comm);
1704 const int sendCount,
1705 unsigned long long recvBuf[],
1706 const int recvCounts[],
1709 const Comm<int>& comm);
1713 const EReductionType reductType,
1715 const unsigned long long sendBuffer[],
1716 unsigned long long globalReducts[]);
1720 const ArrayRCP<unsigned long long>& recvBuffer,
1721 const int sourceRank);
1725 const int sourceRank,
1727 const Comm<int>& comm);
1732 const unsigned long long sendBuffer[],
1733 const int destRank);
1740 const Comm<int>& comm);
1746 const Comm<int>& comm);
1752 const int sendCount,
1754 const int recvCount,
1756 const Comm<int>& comm);
1760 const int sendCount,
1762 const int recvCounts[],
1765 const Comm<int>& comm);
1769 const EReductionType reductType,
1771 const long sendBuffer[],
1772 long globalReducts[]);
1776 const ArrayRCP<long>& recvBuffer,
1777 const int sourceRank);
1781 const int sourceRank,
1783 const Comm<int>& comm);
1788 const long sendBuffer[],
1789 const int destRank);
1796 const Comm<int>& comm);
1802 const Comm<int>& comm);
1808 const int sendCount,
1809 unsigned long recvBuf[],
1810 const int recvCount,
1812 const Comm<int>& comm);
1816 const int sendCount,
1817 unsigned long recvBuf[],
1818 const int recvCounts[],
1821 const Comm<int>& comm);
1825 const EReductionType reductType,
1827 const unsigned long sendBuffer[],
1828 unsigned long globalReducts[]);
1832 const ArrayRCP<unsigned long>& recvBuffer,
1833 const int sourceRank);
1837 const int sourceRank,
1839 const Comm<int>& comm);
1844 const unsigned long sendBuffer[],
1845 const int destRank);
1852 const Comm<int>& comm);
1858 const Comm<int>& comm);
1864 const int sendCount,
1866 const int recvCount,
1868 const Comm<int>& comm);
1872 const int sendCount,
1874 const int recvCounts[],
1877 const Comm<int>& comm);
1881 const int sendCount,
1883 const int recvCount,
1885 const Comm<int>& comm);
1891 const EReductionType reductType,
1893 const Comm<int>& comm);
1899 const EReductionType reductType,
1901 const Comm<int>& comm);
1905 unsigned long recvBuf[],
1907 const EReductionType reductType,
1909 const Comm<int>& comm);
1913 unsigned long long recvBuf[],
1915 const EReductionType reductType,
1917 const Comm<int>& comm);
1923 const EReductionType reductType,
1925 const Comm<int>& comm);
1929 const EReductionType reductType,
1931 const int sendBuffer[],
1932 int globalReducts[]);
1937 const ArrayRCP<int>& recvBuffer,
1938 const int sourceRank);
1942 const int sourceRank,
1944 const Comm<int>& comm);
1949 const int sendBuffer[],
1950 const int destRank);
1957 const Comm<int>& comm);
1963 const Comm<int>& comm);
1969 const int sendCount,
1970 unsigned int recvBuf[],
1971 const int recvCount,
1973 const Comm<int>& comm);
1977 const int sendCount,
1978 unsigned int recvBuf[],
1979 const int recvCounts[],
1982 const Comm<int>& comm);
1986 const EReductionType reductType,
1988 const unsigned int sendBuffer[],
1989 unsigned int globalReducts[]);
1993 const ArrayRCP<unsigned int>& recvBuffer,
1994 const int sourceRank);
1998 const int sourceRank,
2000 const Comm<int>& comm);
2005 const unsigned int sendBuffer[],
2006 const int destRank);
2013 const Comm<int>& comm);
2019 const Comm<int>& comm);
2025 const int sendCount,
2027 const int recvCount,
2029 const Comm<int>& comm);
2033 const int sendCount,
2035 const int recvCounts[],
2038 const Comm<int>& comm);
2042 const EReductionType reductType,
2044 const short sendBuffer[],
2045 short globalReducts[]);
2049 const ArrayRCP<short>& recvBuffer,
2050 const int sourceRank);
2054 const int sourceRank,
2056 const Comm<int>& comm);
2061 const short sendBuffer[],
2062 const int destRank);
2069 const Comm<int>& comm);
2075 const Comm<int>& comm);
2089 reduceAll<int, char> (
const Comm<int>& comm,
2090 const EReductionType reductType,
2092 const char sendBuffer[],
2093 char globalReducts[]);
2098 template<
typename Ordinal,
typename Packet>
2099 void Teuchos::reduceAll(
2101 ,
const Packet &
send,
const Ptr<Packet> &globalReduct
2106 reduceAll<Ordinal,Packet>(comm, reductType, 1, &
send, &*globalReduct);
2110 template<
typename Ordinal,
typename Packet>
2111 void Teuchos::reduceAll(
2112 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2113 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2114 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2118 "Teuchos::CommHelpers: reduceAll<"
2119 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2120 <<
">( reference type )"
2122 ConstReferenceTypeSerializationBuffer<Ordinal,Packet>
2123 charSendBuffer(serializer,count,sendBuffer);
2124 ReferenceTypeSerializationBuffer<Ordinal,Packet>
2125 charGlobalReducts(serializer,count,globalReducts);
2126 CharToReferenceTypeReductionOp<Ordinal,Packet>
2127 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2129 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2130 ,charGlobalReducts.getCharBuffer()
2134 template<
typename Ordinal,
typename Packet,
typename Serializer>
2135 void Teuchos::reduceAll(
2136 const Comm<Ordinal>& comm,
2137 const Serializer& serializer,
2138 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2139 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2143 "Teuchos::CommHelpers: reduceAll<"
2144 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2145 <<
">( value type, user-defined op )"
2147 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2148 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2149 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2150 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2151 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2152 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2154 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2155 ,charGlobalReducts.getCharBuffer()
2160 template<
typename Ordinal,
typename Packet,
typename Serializer>
2161 void Teuchos::reduceAll(
2162 const Comm<Ordinal>& comm,
2163 const Serializer& serializer,
2165 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2169 "Teuchos::CommHelpers: reduceAll<"
2170 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2171 <<
">( value type, "<<
toString(reductType)<<
" )"
2174 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2175 createOp<Ordinal, Packet> (reductType);
2177 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2179 catch (std::exception& e) {
2187 template<
typename Ordinal,
typename Packet>
2189 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2190 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2194 "Teuchos::CommHelpers: scan<"
2195 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2196 <<
">( value type, user-defined op )"
2198 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2199 charSendBuffer(count,sendBuffer);
2200 ValueTypeSerializationBuffer<Ordinal,Packet>
2201 charScanReducts(count,scanReducts);
2202 CharToValueTypeReductionOp<Ordinal,Packet>
2203 charReductOp(
rcp(&reductOp,
false));
2205 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2206 ,charScanReducts.getCharBuffer()
2211 template<
typename Ordinal,
typename Packet>
2214 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2218 "Teuchos::CommHelpers: scan<"
2219 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2220 <<
">( value type, "<<
toString(reductType)<<
" )"
2223 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2224 createOp<Ordinal, Packet> (reductType);
2226 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2228 catch (std::exception& e) {
2236 template<
typename Ordinal,
typename Packet>
2239 const Packet &
send,
const Ptr<Packet> &scanReduct
2242 scan<Ordinal,Packet>(comm, reductType, 1, &
send, &*scanReduct);
2246 template<
typename Ordinal,
typename Packet>
2248 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2249 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2250 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2256 template<
typename Ordinal,
typename Packet,
typename Serializer>
2258 const Comm<Ordinal>& comm,
2259 const Serializer& serializer,
2260 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2261 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2265 "Teuchos::CommHelpers: scan<"
2266 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2267 <<
">( value type, user-defined op )"
2269 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2270 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2271 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2272 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2273 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2274 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2276 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2277 ,charScanReducts.getCharBuffer()
2282 template<
typename Ordinal,
typename Packet,
typename Serializer>
2284 const Comm<Ordinal>& comm,
2285 const Serializer& serializer,
2287 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2291 "Teuchos::CommHelpers: scan<"
2292 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2293 <<
">( value type, "<<
toString(reductType)<<
" )"
2296 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2297 createOp<Ordinal, Packet> (reductType);
2299 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2301 catch (std::exception& e) {
2308 template<
typename Ordinal,
typename Packet>
2310 const Comm<Ordinal>& comm,
2311 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2315 "Teuchos::CommHelpers: send<"
2316 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2319 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2320 charSendBuffer(count,sendBuffer);
2322 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2327 template<
typename Ordinal,
typename Packet>
2330 const Ordinal count,
2336 "Teuchos::CommHelpers: send<"
2341 comm.
send (charSendBuffer.getBytes (), charSendBuffer.getCharBuffer (), destRank, tag);
2344 template<
typename Ordinal,
typename Packet>
2346 const Comm<Ordinal>& comm,
2347 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2351 "Teuchos::CommHelpers: ssend<"
2352 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2355 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2356 charSendBuffer(count,sendBuffer);
2358 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2363 template<
typename Ordinal,
typename Packet>
2366 const Ordinal count,
2372 "Teuchos::CommHelpers: ssend<"
2377 buf_type charSendBuffer (count, sendBuffer);
2378 comm.
ssend (charSendBuffer.getBytes (),
2379 charSendBuffer.getCharBuffer (),
2383 template<
typename Ordinal,
typename Packet>
2385 const Comm<Ordinal>& comm,
2386 const Packet &
send,
const int destRank
2389 Teuchos::send<Ordinal,Packet>(comm,1,&
send,destRank);
2392 template<
typename Ordinal,
typename Packet>
2394 const Comm<Ordinal>& comm,
2395 const Packet &
send,
const int destRank
2398 Teuchos::ssend<Ordinal,Packet>(comm,1,&
send,destRank);
2401 template<
typename Ordinal,
typename Packet>
2403 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2404 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2410 template<
typename Ordinal,
typename Packet,
typename Serializer>
2412 const Comm<Ordinal>& comm,
2413 const Serializer& serializer,
2414 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2418 "Teuchos::CommHelpers: send<"
2419 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2422 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2423 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2425 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2430 template<
typename Ordinal,
typename Packet>
2431 int Teuchos::receive(
2432 const Comm<Ordinal>& comm,
2433 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2437 "Teuchos::CommHelpers: receive<"
2438 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2441 ValueTypeSerializationBuffer<Ordinal,Packet>
2442 charRecvBuffer(count,recvBuffer);
2443 return comm.receive(
2445 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2450 template<
typename Ordinal,
typename Packet>
2451 int Teuchos::receive(
2452 const Comm<Ordinal>& comm,
2453 const int sourceRank, Packet *recv
2456 return Teuchos::receive<Ordinal,Packet>(comm,sourceRank,1,recv);
2460 template<
typename Ordinal,
typename Packet>
2461 int Teuchos::receive(
2462 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2463 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2469 template<
typename Ordinal,
typename Packet,
typename Serializer>
2470 int Teuchos::receive(
2471 const Comm<Ordinal>& comm,
2472 const Serializer& serializer,
2473 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2477 "Teuchos::CommHelpers: receive<"
2478 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2481 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2482 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2483 return comm.receive(
2485 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2489 template<
typename Ordinal,
typename Packet>
2491 const Comm<Ordinal>& comm,
2492 const ArrayView<const Packet> &sendBuffer,
2497 "Teuchos::CommHelpers: readySend<"
2498 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2501 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2502 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2503 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2506 template<
typename Ordinal,
typename Packet>
2509 const Ordinal count,
2515 "Teuchos::CommHelpers: readySend<"
2520 buf_type charSendBuffer (count, sendBuffer);
2521 comm.
readySend (charSendBuffer.getBytes (),
2522 charSendBuffer.getCharBuffer (),
2526 template<
typename Ordinal,
typename Packet>
2528 const Comm<Ordinal>& comm,
2533 readySend<Ordinal, Packet>( comm,
arrayView(&send,1), destRank );
2536 template<
typename Ordinal,
typename Packet,
typename Serializer>
2538 const Comm<Ordinal>& comm,
2539 const Serializer& serializer,
2540 const ArrayView<const Packet> &sendBuffer,
2545 "Teuchos::CommHelpers: readySend<"
2546 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2549 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2550 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2551 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2554 template<
typename Ordinal,
typename Packet>
2557 const Comm<Ordinal>& comm,
2558 const ArrayRCP<const Packet> &sendBuffer,
2563 "Teuchos::CommHelpers: isend<"
2564 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2567 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2568 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2569 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2570 charSendBuffer.getCharBufferView(), destRank );
2575 template<
typename Ordinal,
typename Packet>
2580 const Comm<Ordinal>& comm)
2583 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
","
2584 << TypeNameTraits<Packet>::name () <<
">");
2585 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2586 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2587 RCP<CommRequest<Ordinal> > commRequest =
2588 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2593 template<
typename Ordinal,
typename Packet>
2596 const Comm<Ordinal>& comm,
2597 const RCP<const Packet> &
send,
2601 const ArrayRCP<const Packet> sendBuffer =
2605 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2608 template<
typename Ordinal,
typename Packet,
typename Serializer>
2611 const Comm<Ordinal>& comm,
2612 const Serializer& serializer,
2613 const ArrayRCP<const Packet> &sendBuffer,
2618 "Teuchos::CommHelpers: isend<"
2619 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2622 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2623 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2624 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2625 charSendBuffer.getCharBufferView(), destRank );
2630 template<
typename Ordinal,
typename Packet>
2633 const Comm<Ordinal>& comm,
2634 const ArrayRCP<Packet> &recvBuffer,
2635 const int sourceRank
2639 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2640 ValueTypeSerializationBuffer<Ordinal,Packet>
2641 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2642 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2643 charRecvBuffer.getCharBufferView(), sourceRank );
2648 template<
typename Ordinal,
typename Packet>
2651 const int sourceRank,
2656 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2657 ValueTypeSerializationBuffer<int, Packet>
2658 charRecvBuffer (recvBuffer.
size (), recvBuffer.
getRawPtr ());
2659 RCP<CommRequest<int> > commRequest =
2660 comm.
ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2665 template<
typename Ordinal,
typename Packet>
2668 const Comm<Ordinal>& comm,
2669 const RCP<Packet> &recv,
2670 const int sourceRank
2673 const ArrayRCP<Packet> recvBuffer =
2677 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2680 template<
typename Ordinal,
typename Packet,
typename Serializer>
2683 const Comm<Ordinal>& comm,
2684 const Serializer& serializer,
2685 const ArrayRCP<Packet> &recvBuffer,
2686 const int sourceRank
2690 "Teuchos::CommHelpers: ireceive<"
2691 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2694 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2695 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2696 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2697 charRecvBuffer.getCharBufferView(), sourceRank );
2702 template<
typename Ordinal>
2703 void Teuchos::waitAll(
2704 const Comm<Ordinal>& comm,
2705 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
2708 comm.waitAll(requests);
2712 template<
typename Ordinal>
2714 Teuchos::waitAll (
const Comm<Ordinal>& comm,
2715 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
2716 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses)
2718 comm.waitAll (requests, statuses);
2722 template<
typename Ordinal>
2724 Teuchos::wait (
const Comm<Ordinal>& comm,
2725 const Ptr<RCP<CommRequest<Ordinal> > > &request)
2727 return comm.wait (request);
2731 #endif // TEUCHOS_COMM_HELPERS_HPP
void reduce< int, unsigned long >(const unsigned long sendBuf[], unsigned long recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
void reduce< int, long >(const long sendBuf[], long recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
RCP< T > rcp(const boost::shared_ptr< T > &sptr)
Conversion function that takes in a boost::shared_ptr object and spits out a Teuchos::RCP object...
Strategy interface for the indirect serializing and deserializing objects of a given type handled usi...
ArrayView< T > arrayView(T *p, typename ArrayView< T >::size_type size)
Construct a const or non-const view to const or non-const data.
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned long long >(const Comm< int > &comm, const ArrayRCP< unsigned long long > &recvBuffer, const int sourceRank)
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.
Ptr< T > inOutArg(T &arg)
create a non-persisting (required or optional) input/output argument for a function call...
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned long >(const ArrayRCP< const unsigned long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void send< int, float >(const Comm< int > &comm, const int count, const float sendBuffer[], const int destRank)
EReductionType
Predefined reduction operations that Teuchos::Comm understands.
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, float >(const ArrayRCP< const float > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, float >(const Comm< int > &comm, const ArrayRCP< float > &recvBuffer, const int sourceRank)
static void max(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, long long >(const ArrayRCP< const long long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void gatherv< int, short >(const short sendBuf[], const int sendCount, short recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
void gather< int, unsigned long long >(const unsigned long long sendBuf[], const int sendCount, unsigned long long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, short >(const ArrayRCP< const short > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, long >(const Comm< int > &comm, const EReductionType reductType, const int count, const long sendBuffer[], long globalReducts[])
void send< int, unsigned long long >(const Comm< int > &comm, const int count, const unsigned long long sendBuffer[], const int destRank)
RCP< Teuchos::CommRequest< int > > ireceive< int, double >(const Comm< int > &comm, const ArrayRCP< double > &recvBuffer, const int sourceRank)
RCP< Teuchos::CommRequest< int > > ireceive< int, short >(const Comm< int > &comm, const ArrayRCP< short > &recvBuffer, const int sourceRank)
void send< int, long >(const Comm< int > &comm, const int count, const long sendBuffer[], const int destRank)
void gather< int, unsigned int >(const unsigned int sendBuf[], const int sendCount, unsigned int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
static void andOp(const Ordinal, const Packet[], Packet[])
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
void reduce< int, double >(const double sendBuf[], double recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
RawPointerConversionTraits< Container >::Ptr_t getRawPtr(const Container &c)
void gatherv< int, int >(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, double >(const ArrayRCP< const double > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void gatherv< int, long long >(const long long sendBuf[], const int sendCount, long long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
void gather< int, long >(const long sendBuf[], const int sendCount, long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, long long >(const Comm< int > &comm, const ArrayRCP< long long > &recvBuffer, const int sourceRank)
void send< int, int >(const Comm< int > &comm, const int count, const int sendBuffer[], const int destRank)
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned int >(const ArrayRCP< const unsigned int > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void send< int, double >(const Comm< int > &comm, const int count, const double sendBuffer[], const int destRank)
void gather< int, int >(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
size_type size() const
The total number of entries in the array.
void gather< int, long long >(const long long sendBuf[], const int sendCount, long long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
Standard logical AND operator for booleans.
#define TEUCHOS_COMM_TIME_MONITOR(FUNCNAME)
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.
Standard min operator for types with value semantics.
This structure defines some basic traits for a scalar field type.
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.
std::string toString(const any &rhs)
Converts the value in any to a std::string.
Standard summation operator for types with value semantics.
void gatherv< int, unsigned long >(const unsigned long sendBuf[], const int sendCount, unsigned long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
static void andOp(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
void reduceAll< int, unsigned int >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned int sendBuffer[], unsigned int globalReducts[])
void send< int, long long >(const Comm< int > &comm, const int count, const long long sendBuffer[], const int destRank)
void reduceAll< int, short >(const Comm< int > &comm, const EReductionType reductType, const int count, const short sendBuffer[], short globalReducts[])
void reduce< int, unsigned long long >(const unsigned long long sendBuf[], unsigned long long recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
static void min(const Ordinal, const Packet[], Packet[])
void reduce< int, int >(const int sendBuf[], int recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
virtual RCP< CommRequest< Ordinal > > ireceive(const ArrayView< char > &recvBuffer, const int sourceRank) const =0
Non-blocking receive.
void send(const Comm< Ordinal > &comm, const Ordinal count, const Packet sendBuffer[], const int destRank)
Send objects that use values semantics to another process.
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned long long >(const ArrayRCP< const unsigned long long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, double >(const Comm< int > &comm, const EReductionType reductType, const int count, const double sendBuffer[], double globalReducts[])
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, long >(const ArrayRCP< const long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void gatherv< int, unsigned long long >(const unsigned long long sendBuf[], const int sendCount, unsigned long long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
Standard Max operator for types with value semantics.
void gatherv< int, long >(const long sendBuf[], const int sendCount, long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
Implementation of Teuchos wrappers for MPI.
Declaration of Teuchos::EReductionType enum, and related functions.
This structure defines some basic traits for the ordinal field type.
Encapsulation of the result of a receive (blocking or nonblocking).
#define TEUCHOS_MAX(x, y)
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). ...
void reduceAll< int, int >(const Comm< int > &comm, const EReductionType reductType, const int count, const int sendBuffer[], int globalReducts[])
void reduceAll< int, unsigned long long >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned long long sendBuffer[], unsigned long long globalReducts[])
void gatherv< int, unsigned int >(const unsigned int sendBuf[], const int sendCount, unsigned int recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
virtual void readySend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Ready send of data from this process to another process.
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned int >(const Comm< int > &comm, const ArrayRCP< unsigned int > &recvBuffer, const int sourceRank)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, int >(const ArrayRCP< const int > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, unsigned long >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned long sendBuffer[], unsigned long globalReducts[])
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).
RCP< Teuchos::CommRequest< int > > ireceive< int, int >(const Comm< int > &comm, const ArrayRCP< int > &recvBuffer, const int sourceRank)
Templated array class derived from the STL std::vector.
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned long >(const Comm< int > &comm, const ArrayRCP< unsigned long > &recvBuffer, const int sourceRank)
void gatherv< int, double >(const double sendBuf[], const int sendCount, double recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
Defines basic traits for the ordinal field type.
Default traits class that just returns typeid(T).name().
RCP< Teuchos::CommRequest< int > > isend(const ArrayRCP< const double > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, float >(const Comm< int > &comm, const EReductionType reductType, const int count, const float sendBuffer[], float globalReducts[])
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Base interface class for user-defined reduction operations for objects that use reference semantics...
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.
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.
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).
Defines basic traits for the scalar field type.
#define TEUCHOSCOMM_LIB_DLL_EXPORT
TEUCHOSCOMM_LIB_DLL_EXPORT void scatter(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
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.
static void max(const Ordinal, const Packet[], Packet[])
Smart reference counting pointer class for automatic garbage collection.
RCP< Teuchos::CommRequest< int > > ireceive< int, long >(const Comm< int > &comm, const ArrayRCP< long > &recvBuffer, const int sourceRank)
Encapsulation of a pending nonblocking communication operation.
void gather< int, short >(const short sendBuf[], const int sendCount, short recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
#define TEUCHOS_MIN(x, y)
void send< int, short >(const Comm< int > &comm, const int count, const short sendBuffer[], const int destRank)
Defines basic traits returning the name of a type in a portable and readable way. ...
Definition of Teuchos::as, for conversions between types.
ValueTypeReductionOp< Ordinal, Packet > * createOp(const EReductionType reductType)
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.
#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...
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...
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 gather< int, unsigned long >(const unsigned long sendBuf[], const int sendCount, unsigned long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void reduceAll< int, long long >(const Comm< int > &comm, const EReductionType reductType, const int count, const long long sendBuffer[], long long globalReducts[])
Encapsulate how an array of const objects with value sematics is serialized into a const char[] array...
void send< int, unsigned long >(const Comm< int > &comm, const int count, const unsigned long sendBuffer[], const int destRank)
static void min(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
Reference-counted smart pointer for managing arrays.
void send< int, unsigned int >(const Comm< int > &comm, const int count, const unsigned int sendBuffer[], const int destRank)
void gatherv< int, float >(const float sendBuf[], const int sendCount, float recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)