10 #ifndef TEUCHOS_COMM_HELPERS_HPP
11 #define TEUCHOS_COMM_HELPERS_HPP
13 #include "Teuchos_Comm.hpp"
14 #include "Teuchos_CommUtilities.hpp"
15 #include "Teuchos_SerializationTraitsHelpers.hpp"
16 #include "Teuchos_ReductionOpHelpers.hpp"
17 #include "Teuchos_SerializerHelpers.hpp"
22 #include "Teuchos_Workspace.hpp"
25 #ifdef HAVE_TEUCHOS_MPI
27 #endif // HAVE_TEUCHOS_MPI
28 #include "Teuchos_DefaultSerialComm.hpp"
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,
925 "Error, the type "<<TypeNameTraits<Packet>::name()
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,
962 "Error, the type "<<TypeNameTraits<Packet>::name()
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,
999 "Error, the type "<<TypeNameTraits<Packet>::name()
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[]
1028 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal, Packet> min_type;
1029 min_type::min (count, inBuffer, inoutBuffer);
1033 template<
typename Ordinal,
typename Packet>
1035 const Ordinal count,
1036 const Packet inBuffer[],
1037 Packet inoutBuffer[]
1040 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal, Packet> max_type;
1041 max_type::max (count,inBuffer,inoutBuffer);
1045 template<
typename Ordinal,
typename Packet>
1047 const Ordinal count,
1048 const Packet inBuffer[],
1049 Packet inoutBuffer[]
1052 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal, Packet> and_type;
1053 and_type::andOp (count, inBuffer, inoutBuffer);
1083 template<
typename Ordinal,
typename Packet>
1084 ValueTypeReductionOp<Ordinal,Packet>*
1085 createOp (
const EReductionType reductType)
1087 typedef ScalarTraits<Packet> ST;
1088 switch (reductType) {
1090 return new SumValueReductionOp<Ordinal,Packet> ();
1093 if (ST::isComparable) {
1094 return new MinValueReductionOp<Ordinal,Packet> ();
1098 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1099 "(EReductionType): The Packet type " << TypeNameTraits<Packet>::name ()
1100 <<
" is not less-than comparable, so it does not make sense to do a "
1101 "MIN reduction with it.");
1105 if (ST::isComparable) {
1106 return new MaxValueReductionOp<Ordinal,Packet> ();
1110 (! ST::isComparable, std::invalid_argument,
"Teuchos::createOp"
1111 "(EReductionType): The Packet type " << TypeNameTraits<Packet>::name ()
1112 <<
" is not less-than comparable, so it does not make sense to do a "
1113 "MAX reduction with it.");
1117 return new ANDValueReductionOp<Ordinal, Packet> ();
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)
1153 TEUCHOS_COMM_TIME_MONITOR(
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[]
1168 TEUCHOS_COMM_TIME_MONITOR(
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[]
1218 TEUCHOS_COMM_TIME_MONITOR(
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[]
1252 TEUCHOS_COMM_TIME_MONITOR(
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[]
1272 TEUCHOS_COMM_TIME_MONITOR(
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)
1296 TEUCHOS_COMM_TIME_MONITOR(
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[]
1364 TEUCHOS_COMM_TIME_MONITOR(
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[]
1406 TEUCHOS_COMM_TIME_MONITOR(
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[]
1430 TEUCHOS_COMM_TIME_MONITOR(
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
1460 TEUCHOSCOMM_LIB_DLL_EXPORT
void
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[]);
1467 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1468 ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1469 const ArrayRCP<std::complex<double> >& recvBuffer,
1470 const int sourceRank);
1472 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1473 ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1474 const int sourceRank,
1476 const Comm<int>& comm);
1478 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1479 send<int, std::complex<double> > (
const Comm<int>& comm,
1481 const std::complex<double> sendBuffer[],
1482 const int destRank);
1484 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1485 send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1489 const Comm<int>& comm);
1491 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1492 isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1495 const Comm<int>& comm);
1499 TEUCHOSCOMM_LIB_DLL_EXPORT
void
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[]);
1506 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1507 ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1508 const ArrayRCP<std::complex<float> >& recvBuffer,
1509 const int sourceRank);
1511 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1512 ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1513 const int sourceRank,
1515 const Comm<int>& comm);
1517 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1518 send<int, std::complex<float> > (
const Comm<int>& comm,
1520 const std::complex<float> sendBuffer[],
1521 const int destRank);
1523 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1524 send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1528 const Comm<int>& comm);
1530 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1531 isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1534 const Comm<int>& comm);
1535 #endif // HAVE_TEUCHOS_COMPLEX
1540 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1541 reduceAll<int, double> (
const Comm<int>& comm,
1542 const EReductionType reductType,
1544 const double sendBuffer[],
1545 double globalReducts[]);
1547 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1548 ireceive<int, double> (
const Comm<int>& comm,
1549 const ArrayRCP<double>& recvBuffer,
1550 const int sourceRank);
1552 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1553 ireceive<int, double> (
const ArrayRCP<double> &recvBuffer,
1554 const int sourceRank,
1556 const Comm<int>& comm);
1558 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1559 send<int, double> (
const Comm<int>& comm,
1561 const double sendBuffer[],
1562 const int destRank);
1564 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1565 send<int, double> (
const double sendBuffer[],
1569 const Comm<int>& comm);
1571 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1572 isend<int, double> (
const ArrayRCP<const double>& sendBuffer,
1575 const Comm<int>& comm);
1578 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1579 gatherv<int, double> (
const double sendBuf[],
1580 const int sendCount,
1582 const int recvCounts[],
1585 const Comm<int>& comm);
1589 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1590 reduceAll<int, float> (
const Comm<int>& comm,
1591 const EReductionType reductType,
1593 const float sendBuffer[],
1594 float globalReducts[]);
1596 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1597 ireceive<int, float> (
const Comm<int>& comm,
1598 const ArrayRCP<float>& recvBuffer,
1599 const int sourceRank);
1601 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1602 ireceive<int, float> (
const ArrayRCP<float> &recvBuffer,
1603 const int sourceRank,
1605 const Comm<int>& comm);
1607 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1608 send<int, float> (
const Comm<int>& comm,
1610 const float sendBuffer[],
1611 const int destRank);
1613 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1614 send<int, float> (
const float sendBuffer[],
1618 const Comm<int>& comm);
1620 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1621 isend<int, float> (
const ArrayRCP<const float>& sendBuffer,
1624 const Comm<int>& comm);
1627 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1628 gatherv<int, float> (
const float sendBuf[],
1629 const int sendCount,
1631 const int recvCounts[],
1634 const Comm<int>& comm);
1638 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1639 gather<int, long long> (
const long long sendBuf[],
1640 const int sendCount,
1641 long long recvBuf[],
1642 const int recvCount,
1644 const Comm<int>& comm);
1646 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1647 gatherv<int, long long> (
const long long sendBuf[],
1648 const int sendCount,
1649 long long recvBuf[],
1650 const int recvCounts[],
1653 const Comm<int>& comm);
1655 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1656 reduceAll<int, long long> (
const Comm<int>& comm,
1657 const EReductionType reductType,
1659 const long long sendBuffer[],
1660 long long globalReducts[]);
1662 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1663 ireceive<int, long long> (
const Comm<int>& comm,
1664 const ArrayRCP<long long>& recvBuffer,
1665 const int sourceRank);
1667 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1668 ireceive<int, long long> (
const ArrayRCP<long long> &recvBuffer,
1669 const int sourceRank,
1671 const Comm<int>& comm);
1673 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1674 send<int, long long> (
const Comm<int>& comm,
1676 const long long sendBuffer[],
1677 const int destRank);
1679 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1680 send<int, long long> (
const long long sendBuffer[],
1684 const Comm<int>& comm);
1686 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1687 isend<int, long long> (
const ArrayRCP<const long long>& sendBuffer,
1690 const Comm<int>& comm);
1694 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1695 gather<int, unsigned long long> (
const unsigned long long sendBuf[],
1696 const int sendCount,
1697 unsigned long long recvBuf[],
1698 const int recvCount,
1700 const Comm<int>& comm);
1702 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1703 gatherv<int, unsigned long long> (
const unsigned long long sendBuf[],
1704 const int sendCount,
1705 unsigned long long recvBuf[],
1706 const int recvCounts[],
1709 const Comm<int>& comm);
1711 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1712 reduceAll<int, unsigned long long> (
const Comm<int>& comm,
1713 const EReductionType reductType,
1715 const unsigned long long sendBuffer[],
1716 unsigned long long globalReducts[]);
1718 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1719 ireceive<int, unsigned long long> (
const Comm<int>& comm,
1720 const ArrayRCP<unsigned long long>& recvBuffer,
1721 const int sourceRank);
1723 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1724 ireceive<int, unsigned long long> (
const ArrayRCP<unsigned long long> &recvBuffer,
1725 const int sourceRank,
1727 const Comm<int>& comm);
1729 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1730 send<int, unsigned long long> (
const Comm<int>& comm,
1732 const unsigned long long sendBuffer[],
1733 const int destRank);
1735 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1736 send<int, unsigned long long> (
const unsigned long long sendBuffer[],
1740 const Comm<int>& comm);
1742 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1743 isend<int, unsigned long long> (
const ArrayRCP<const unsigned long long>& sendBuffer,
1746 const Comm<int>& comm);
1750 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1751 gather<int, long> (
const long sendBuf[],
1752 const int sendCount,
1754 const int recvCount,
1756 const Comm<int>& comm);
1758 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1759 gatherv<int, long> (
const long sendBuf[],
1760 const int sendCount,
1762 const int recvCounts[],
1765 const Comm<int>& comm);
1767 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1768 reduceAll<int, long> (
const Comm<int>& comm,
1769 const EReductionType reductType,
1771 const long sendBuffer[],
1772 long globalReducts[]);
1774 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1775 ireceive<int, long> (
const Comm<int>& comm,
1776 const ArrayRCP<long>& recvBuffer,
1777 const int sourceRank);
1779 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1780 ireceive<int, long> (
const ArrayRCP<long> &recvBuffer,
1781 const int sourceRank,
1783 const Comm<int>& comm);
1785 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1786 send<int, long> (
const Comm<int>& comm,
1788 const long sendBuffer[],
1789 const int destRank);
1791 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1792 send<int, long> (
const long sendBuffer[],
1796 const Comm<int>& comm);
1798 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1799 isend<int, long> (
const ArrayRCP<const long>& sendBuffer,
1802 const Comm<int>& comm);
1806 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1807 gather<int, unsigned long> (
const unsigned long sendBuf[],
1808 const int sendCount,
1809 unsigned long recvBuf[],
1810 const int recvCount,
1812 const Comm<int>& comm);
1814 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1815 gatherv<int, unsigned long> (
const unsigned long sendBuf[],
1816 const int sendCount,
1817 unsigned long recvBuf[],
1818 const int recvCounts[],
1821 const Comm<int>& comm);
1823 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1824 reduceAll<int, unsigned long> (
const Comm<int>& comm,
1825 const EReductionType reductType,
1827 const unsigned long sendBuffer[],
1828 unsigned long globalReducts[]);
1830 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1831 ireceive<int, unsigned long> (
const Comm<int>& comm,
1832 const ArrayRCP<unsigned long>& recvBuffer,
1833 const int sourceRank);
1835 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1836 ireceive<int, unsigned long> (
const ArrayRCP<unsigned long> &recvBuffer,
1837 const int sourceRank,
1839 const Comm<int>& comm);
1841 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1842 send<int, unsigned long> (
const Comm<int>& comm,
1844 const unsigned long sendBuffer[],
1845 const int destRank);
1847 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1848 send<int, unsigned long> (
const unsigned long sendBuffer[],
1852 const Comm<int>& comm);
1854 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1855 isend<int, unsigned long> (
const ArrayRCP<const unsigned long>& sendBuffer,
1858 const Comm<int>& comm);
1862 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1863 gather<int, int> (
const int sendBuf[],
1864 const int sendCount,
1866 const int recvCount,
1868 const Comm<int>& comm);
1870 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1871 gatherv<int, int> (
const int sendBuf[],
1872 const int sendCount,
1874 const int recvCounts[],
1877 const Comm<int>& comm);
1879 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1880 scatter (
const int sendBuf[],
1881 const int sendCount,
1883 const int recvCount,
1885 const Comm<int>& comm);
1887 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1888 reduce<int, int> (
const int sendBuf[],
1891 const EReductionType reductType,
1893 const Comm<int>& comm);
1895 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1896 reduce<int, long> (
const long sendBuf[],
1899 const EReductionType reductType,
1901 const Comm<int>& comm);
1903 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1904 reduce<int, unsigned long> (
const unsigned long sendBuf[],
1905 unsigned long recvBuf[],
1907 const EReductionType reductType,
1909 const Comm<int>& comm);
1911 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1912 reduce<int, unsigned long long > (
const unsigned long long sendBuf[],
1913 unsigned long long recvBuf[],
1915 const EReductionType reductType,
1917 const Comm<int>& comm);
1919 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1920 reduce<int, double> (
const double sendBuf[],
1923 const EReductionType reductType,
1925 const Comm<int>& comm);
1927 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1928 reduceAll<int, int> (
const Comm<int>& comm,
1929 const EReductionType reductType,
1931 const int sendBuffer[],
1932 int globalReducts[]);
1935 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1936 ireceive<int, int> (
const Comm<int>& comm,
1937 const ArrayRCP<int>& recvBuffer,
1938 const int sourceRank);
1940 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1941 ireceive<int, int> (
const ArrayRCP<int> &recvBuffer,
1942 const int sourceRank,
1944 const Comm<int>& comm);
1946 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1947 send<int, int> (
const Comm<int>& comm,
1949 const int sendBuffer[],
1950 const int destRank);
1952 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1953 send<int, int> (
const int sendBuffer[],
1957 const Comm<int>& comm);
1959 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1960 isend<int, int> (
const ArrayRCP<const int>& sendBuffer,
1963 const Comm<int>& comm);
1967 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1968 gather<int, unsigned int> (
const unsigned int sendBuf[],
1969 const int sendCount,
1970 unsigned int recvBuf[],
1971 const int recvCount,
1973 const Comm<int>& comm);
1975 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1976 gatherv<int, unsigned int> (
const unsigned int sendBuf[],
1977 const int sendCount,
1978 unsigned int recvBuf[],
1979 const int recvCounts[],
1982 const Comm<int>& comm);
1984 TEUCHOSCOMM_LIB_DLL_EXPORT
void
1985 reduceAll<int, unsigned int> (
const Comm<int>& comm,
1986 const EReductionType reductType,
1988 const unsigned int sendBuffer[],
1989 unsigned int globalReducts[]);
1991 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1992 ireceive<int, unsigned int> (
const Comm<int>& comm,
1993 const ArrayRCP<unsigned int>& recvBuffer,
1994 const int sourceRank);
1996 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1997 ireceive<int, unsigned int> (
const ArrayRCP<unsigned int> &recvBuffer,
1998 const int sourceRank,
2000 const Comm<int>& comm);
2002 TEUCHOSCOMM_LIB_DLL_EXPORT
void
2003 send<int, unsigned int> (
const Comm<int>& comm,
2005 const unsigned int sendBuffer[],
2006 const int destRank);
2008 TEUCHOSCOMM_LIB_DLL_EXPORT
void
2009 send<int, unsigned int> (
const unsigned int sendBuffer[],
2013 const Comm<int>& comm);
2015 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2016 isend<int, unsigned int> (
const ArrayRCP<const unsigned int>& sendBuffer,
2019 const Comm<int>& comm);
2023 TEUCHOSCOMM_LIB_DLL_EXPORT
void
2024 gather<int, short> (
const short sendBuf[],
2025 const int sendCount,
2027 const int recvCount,
2029 const Comm<int>& comm);
2031 TEUCHOSCOMM_LIB_DLL_EXPORT
void
2032 gatherv<int, short> (
const short sendBuf[],
2033 const int sendCount,
2035 const int recvCounts[],
2038 const Comm<int>& comm);
2040 TEUCHOSCOMM_LIB_DLL_EXPORT
void
2041 reduceAll<int, short> (
const Comm<int>& comm,
2042 const EReductionType reductType,
2044 const short sendBuffer[],
2045 short globalReducts[]);
2047 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2048 ireceive<int, short> (
const Comm<int>& comm,
2049 const ArrayRCP<short>& recvBuffer,
2050 const int sourceRank);
2052 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2053 ireceive<int, short> (
const ArrayRCP<short> &recvBuffer,
2054 const int sourceRank,
2056 const Comm<int>& comm);
2058 TEUCHOSCOMM_LIB_DLL_EXPORT
void
2059 send<int, short> (
const Comm<int>& comm,
2061 const short sendBuffer[],
2062 const int destRank);
2064 TEUCHOSCOMM_LIB_DLL_EXPORT
void
2065 send<int, short> (
const short sendBuffer[],
2069 const Comm<int>& comm);
2071 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2072 isend<int, short> (
const ArrayRCP<const short>& sendBuffer,
2075 const Comm<int>& comm);
2088 TEUCHOSCOMM_LIB_DLL_EXPORT
void
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[]
2117 TEUCHOS_COMM_TIME_MONITOR(
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[]
2142 TEUCHOS_COMM_TIME_MONITOR(
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[]
2168 TEUCHOS_COMM_TIME_MONITOR(
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[]
2193 TEUCHOS_COMM_TIME_MONITOR(
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[]
2217 TEUCHOS_COMM_TIME_MONITOR(
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[]
2264 TEUCHOS_COMM_TIME_MONITOR(
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[]
2290 TEUCHOS_COMM_TIME_MONITOR(
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
2314 TEUCHOS_COMM_TIME_MONITOR(
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,
2335 TEUCHOS_COMM_TIME_MONITOR(
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
2350 TEUCHOS_COMM_TIME_MONITOR(
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,
2371 TEUCHOS_COMM_TIME_MONITOR(
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
2417 TEUCHOS_COMM_TIME_MONITOR(
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[]
2436 TEUCHOS_COMM_TIME_MONITOR(
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[]
2476 TEUCHOS_COMM_TIME_MONITOR(
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,
2496 TEUCHOS_COMM_TIME_MONITOR(
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,
2514 TEUCHOS_COMM_TIME_MONITOR(
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,
2544 TEUCHOS_COMM_TIME_MONITOR(
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,
2562 TEUCHOS_COMM_TIME_MONITOR(
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)
2582 TEUCHOS_COMM_TIME_MONITOR(
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,
2617 TEUCHOS_COMM_TIME_MONITOR(
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
2638 TEUCHOS_COMM_TIME_MONITOR(
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,
2655 TEUCHOS_COMM_TIME_MONITOR(
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
2689 TEUCHOS_COMM_TIME_MONITOR(
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
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.
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
EReductionType
Predefined reduction operations that Teuchos::Comm understands.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
size_type size() const
The total number of entries in the array.
Standard logical AND operator for booleans.
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.
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 reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
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.
Standard Max operator for types with value semantics.
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).
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). ...
virtual void readySend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Ready send of data from this process to another process.
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).
Templated array class derived from the STL std::vector.
Defines basic traits for the ordinal field type.
Default traits class that just returns typeid(T).name().
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.
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.
Smart reference counting pointer class for automatic garbage collection.
RCP< CommRequest< Ordinal > > isend(const ArrayRCP< const Packet > &sendBuffer, const int destRank, const int tag, const Comm< Ordinal > &comm)
Variant of isend() that takes a tag (and restores the correct order of arguments).
Encapsulation of a pending nonblocking communication operation.
Defines basic traits returning the name of a type in a portable and readable way. ...
Definition of Teuchos::as, for conversions between types.
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...
Encapsulate how an array of const objects with value sematics is serialized into a const char[] array...
Reference-counted smart pointer for managing arrays.