42 #ifndef TEUCHOS_COMM_HELPERS_HPP 43 #define TEUCHOS_COMM_HELPERS_HPP 45 #include "Teuchos_Comm.hpp" 46 #include "Teuchos_CommUtilities.hpp" 47 #include "Teuchos_SerializationTraitsHelpers.hpp" 48 #include "Teuchos_ReductionOpHelpers.hpp" 49 #include "Teuchos_SerializerHelpers.hpp" 54 #include "Teuchos_Workspace.hpp" 60 #include "Teuchos_DefaultSerialComm.hpp" 86 const char* toString (
const EReductionType reductType);
92 template<
typename Ordinal>
93 int rank(
const Comm<Ordinal>& comm);
99 template<
typename Ordinal>
100 int size(
const Comm<Ordinal>& comm);
106 template<
typename Ordinal>
107 void barrier(
const Comm<Ordinal>& comm);
113 template<
typename Ordinal,
typename Packet>
115 const Comm<Ordinal>& comm,
117 const Ordinal count, Packet buffer[]
124 template<
typename Ordinal,
typename Packet>
126 const Comm<Ordinal>& comm,
128 const ArrayView<Packet> &buffer
135 template<
typename Ordinal,
typename Packet>
137 const Comm<Ordinal>& comm,
138 const int rootRank, Packet *
object 145 template<
typename Ordinal,
typename Packet>
147 const Comm<Ordinal>& comm,
148 const int rootRank,
const Ptr<Packet> &
object 155 template<
typename Ordinal,
typename Packet>
157 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
158 const int rootRank,
const Ordinal count, Packet*
const buffer[]
165 template<
typename Ordinal,
typename Packet>
167 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
168 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
176 template<
typename Ordinal,
typename Packet,
typename Serializer>
178 const Comm<Ordinal>& comm,
179 const Serializer& serializer,
181 const Ordinal count, Packet buffer[]
188 template<
typename Ordinal,
typename Packet>
190 gather (
const Packet sendBuf[],
191 const Ordinal sendCount,
193 const Ordinal recvCount,
195 const Comm<Ordinal>& comm);
201 template<
typename Ordinal,
typename Packet>
203 gatherv (
const Packet sendBuf[],
204 const Ordinal sendCount,
206 const Ordinal recvCounts[],
207 const Ordinal displs[],
209 const Comm<Ordinal>& comm);
216 template<
typename Ordinal,
typename Packet>
218 const Comm<Ordinal>& comm,
219 const Ordinal sendCount,
const Packet sendBuffer[],
220 const Ordinal recvCount, Packet recvBuffer[]
228 template<
typename Ordinal,
typename Packet>
230 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
231 const Ordinal sendCount,
const Packet*
const sendBuffer[],
232 const Ordinal recvCount, Packet*
const recvBuffer[]
240 template<
typename Ordinal,
typename Packet,
typename Serializer>
242 const Comm<Ordinal>& comm,
243 const Serializer& serializer,
244 const Ordinal sendCount,
const Packet sendBuffer[],
245 const Ordinal recvCount, Packet recvBuffer[]
274 template<
typename Ordinal,
typename Packet>
277 const Ordinal sendCount,
279 const Ordinal recvCount,
287 (
true, std::logic_error,
"Teuchos::scatter<" <<
289 <<
">: Generic version is not yet implemented. This function currently " 290 "only has an implementtion for Ordinal = int and Packet = int. " 291 "See Bug 6375 and Bug 6336.");
321 template<
typename Ordinal,
typename Packet>
323 reduce (
const Packet sendBuf[],
326 const EReductionType reductType,
352 template<
typename Ordinal,
typename Packet>
355 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
363 template<
typename Ordinal,
typename Packet>
366 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
374 template<
typename Ordinal,
typename Packet>
381 template<
typename Ordinal,
typename Packet>
384 const Packet &
send, Packet *globalReduct
387 reduceAll<Ordinal,Packet>(comm, reductType,
send, ptr(globalReduct));
395 template<
typename Ordinal,
typename Packet>
397 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
398 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
399 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
407 template<
typename Ordinal,
typename Packet,
typename Serializer>
409 const Comm<Ordinal>& comm,
410 const Serializer& serializer,
411 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
412 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
420 template<
typename Ordinal,
typename Packet,
typename Serializer>
422 const Comm<Ordinal>& comm,
423 const Serializer& serializer,
424 const EReductionType reductType,
425 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
433 template<
typename Ordinal,
typename Packet>
435 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
436 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
444 template<
typename Ordinal,
typename Packet>
446 const Comm<Ordinal>& comm,
const EReductionType reductType,
447 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
455 template<
typename Ordinal,
typename Packet>
457 const Comm<Ordinal>& comm,
const EReductionType reductType,
458 const Packet &
send,
const Ptr<Packet> &scanReduct
462 template<
typename Ordinal,
typename Packet>
465 const Packet &
send, Packet *scanReduct
468 scan(comm, reductType,
send, ptr(scanReduct));
476 template<
typename Ordinal,
typename Packet>
478 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
479 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
480 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
488 template<
typename Ordinal,
typename Packet,
typename Serializer>
490 const Comm<Ordinal>& comm,
491 const Serializer& serializer,
492 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
493 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
501 template<
typename Ordinal,
typename Packet,
typename Serializer>
503 const Comm<Ordinal>& comm,
504 const Serializer& serializer,
505 const EReductionType reductType,
506 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
513 template<
typename Ordinal,
typename Packet>
515 const Comm<Ordinal>& comm,
516 const Ordinal count,
const Packet sendBuffer[],
const int destRank
520 template<
typename Ordinal,
typename Packet>
522 send (
const Packet sendBuffer[],
526 const Comm<Ordinal>& comm);
532 template<
typename Ordinal,
typename Packet>
534 const Comm<Ordinal>& comm,
535 const Ordinal count,
const Packet sendBuffer[],
const int destRank
539 template<
typename Ordinal,
typename Packet>
541 ssend (
const Packet sendBuffer[],
545 const Comm<Ordinal>& comm);
551 template<
typename Ordinal,
typename Packet>
553 const Comm<Ordinal>& comm,
554 const Packet &
send,
const int destRank
561 template<
typename Ordinal,
typename Packet>
563 const Comm<Ordinal>& comm,
564 const Packet &
send,
const int destRank
573 template<
typename Ordinal,
typename Packet>
575 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
576 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
584 template<
typename Ordinal,
typename Packet,
typename Serializer>
586 const Comm<Ordinal>& comm,
587 const Serializer& serializer,
588 const Ordinal count,
const Packet sendBuffer[],
const int destRank
595 template<
typename Ordinal,
typename Packet>
597 const Comm<Ordinal>& comm,
598 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
605 template<
typename Ordinal,
typename Packet>
607 const Comm<Ordinal>& comm,
608 const int sourceRank, Packet *recv
615 template<
typename Ordinal,
typename Packet>
617 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
618 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
626 template<
typename Ordinal,
typename Packet,
typename Serializer>
628 const Comm<Ordinal>& comm,
629 const Serializer& serializer,
630 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
638 template<
typename Ordinal,
typename Packet>
640 const Comm<Ordinal>& comm,
641 const ArrayView<const Packet> &sendBuffer,
646 template<
typename Ordinal,
typename Packet>
652 const Comm<Ordinal>& comm);
658 template<
typename Ordinal,
typename Packet>
660 const Comm<Ordinal>& comm,
670 template<
typename Ordinal,
typename Packet,
typename Serializer>
672 const Comm<Ordinal>& comm,
673 const Serializer& serializer,
674 const ArrayView<const Packet> &sendBuffer,
682 template<
typename Ordinal,
typename Packet>
683 RCP<CommRequest<Ordinal> > isend(
684 const Comm<Ordinal>& comm,
685 const ArrayRCP<const Packet> &sendBuffer,
690 template<
typename Ordinal,
typename Packet>
691 RCP<CommRequest<Ordinal> >
692 isend (
const ArrayRCP<const Packet>& sendBuffer,
695 const Comm<Ordinal>& comm);
701 template<
typename Ordinal,
typename Packet>
702 RCP<CommRequest<Ordinal> > isend(
703 const Comm<Ordinal>& comm,
704 const RCP<const Packet> &
send,
713 template<
typename Ordinal,
typename Packet,
typename Serializer>
714 RCP<CommRequest<Ordinal> > isend(
715 const Comm<Ordinal>& comm,
716 const Serializer& serializer,
717 const ArrayRCP<const Packet> &sendBuffer,
734 template<
typename Ordinal,
typename Packet>
735 RCP<CommRequest<Ordinal> >
ireceive(
736 const Comm<Ordinal>& comm,
737 const ArrayRCP<Packet> &recvBuffer,
742 template<
typename Ordinal,
typename Packet>
743 RCP<CommRequest<Ordinal> >
744 ireceive (
const ArrayRCP<Packet> &recvBuffer,
745 const int sourceRank,
747 const Comm<Ordinal>& comm);
760 template<
typename Ordinal,
typename Packet>
761 RCP<CommRequest<Ordinal> >
ireceive(
762 const Comm<Ordinal>& comm,
763 const RCP<Packet> &recv,
772 template<
typename Ordinal,
typename Packet,
typename Serializer>
773 RCP<CommRequest<Ordinal> >
ireceive(
774 const Comm<Ordinal>& comm,
775 const Serializer& serializer,
776 const ArrayRCP<Packet> &recvBuffer,
791 template<
typename Ordinal>
793 const Comm<Ordinal>& comm,
794 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
826 template<
typename Ordinal>
828 waitAll (
const Comm<Ordinal>& comm,
829 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
830 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses);
855 template<
typename Ordinal>
856 RCP<CommStatus<Ordinal> >
857 wait (
const Comm<Ordinal>& comm,
const Ptr<RCP<CommRequest<Ordinal> > >& request);
868 template<
typename Ordinal,
typename Packet>
875 const Packet inBuffer[],
889 template<
typename Ordinal,
typename Packet>
896 const Packet inBuffer[],
910 template<
typename Ordinal,
typename Packet>
917 const Packet inBuffer[],
927 template<
typename Ordinal,
typename Packet>
934 const Packet inBuffer[],
949 namespace MixMaxUtilities {
952 template<
bool isComparable,
typename Ordinal,
typename Packet>
956 template<
typename Ordinal,
typename Packet>
957 class Min<true,Ordinal,Packet> {
961 const Packet inBuffer[],
965 for(
int i = 0; i < count; ++i )
966 inoutBuffer[i] = TEUCHOS_MIN(inoutBuffer[i],inBuffer[i]);
971 template<
typename Ordinal,
typename Packet>
972 class Min<false,Ordinal,Packet> {
981 true,std::logic_error,
983 <<
" does not support comparison operations!" 989 template<
bool isComparable,
typename Ordinal,
typename Packet>
993 template<
typename Ordinal,
typename Packet>
994 class Max<true,Ordinal,Packet> {
998 const Packet inBuffer[],
1002 for(
int i = 0; i < count; ++i )
1003 inoutBuffer[i] = TEUCHOS_MAX(inoutBuffer[i],inBuffer[i]);
1008 template<
typename Ordinal,
typename Packet>
1009 class Max<false,Ordinal,Packet> {
1018 true,std::logic_error,
1020 <<
" does not support comparison operations!" 1026 template<
bool isComparable,
typename Ordinal,
typename Packet>
1030 template<
typename Ordinal,
typename Packet>
1031 class AND<true,Ordinal,Packet> {
1034 const Ordinal count,
1035 const Packet inBuffer[],
1036 Packet inoutBuffer[]
1039 for(
int i = 0; i < count; ++i )
1040 inoutBuffer[i] = inoutBuffer[i] && inBuffer[i];
1045 template<
typename Ordinal,
typename Packet>
1046 class AND<false,Ordinal,Packet> {
1055 true,std::logic_error,
1057 <<
" does not support logical AND operations!" 1066 template<
typename Ordinal,
typename Packet>
1068 const Ordinal count,
1069 const Packet inBuffer[],
1070 Packet inoutBuffer[]
1073 for(
int i = 0; i < count; ++i )
1074 inoutBuffer[i] += inBuffer[i];
1078 template<
typename Ordinal,
typename Packet>
1080 const Ordinal count,
1081 const Packet inBuffer[],
1082 Packet inoutBuffer[]
1085 typedef MixMaxUtilities::Min<ScalarTraits<Packet>::isComparable, Ordinal, Packet> min_type;
1086 min_type::min (count, inBuffer, inoutBuffer);
1090 template<
typename Ordinal,
typename Packet>
1092 const Ordinal count,
1093 const Packet inBuffer[],
1094 Packet inoutBuffer[]
1097 typedef MixMaxUtilities::Max<ScalarTraits<Packet>::isComparable, Ordinal, Packet> max_type;
1098 max_type::max (count,inBuffer,inoutBuffer);
1102 template<
typename Ordinal,
typename Packet>
1104 const Ordinal count,
1105 const Packet inBuffer[],
1106 Packet inoutBuffer[]
1109 typedef MixMaxUtilities::AND<ScalarTraits<Packet>::isComparable, Ordinal, Packet> and_type;
1110 and_type::andOp (count, inBuffer, inoutBuffer);
1140 template<
typename Ordinal,
typename Packet>
1141 ValueTypeReductionOp<Ordinal,Packet>*
1142 createOp (
const EReductionType reductType)
1144 typedef ScalarTraits<Packet> ST;
1145 switch (reductType) {
1147 return new SumValueReductionOp<Ordinal,Packet> ();
1151 ! ST::isComparable, std::invalid_argument,
"Teuchos::createOp" 1153 <<
" is not less-than comparable, so it does not make sense to do a " 1154 "MIN reduction with it.");
1155 return new MinValueReductionOp<Ordinal,Packet> ();
1159 ! ST::isComparable, std::invalid_argument,
"Teuchos::createOp" 1161 <<
" is not less-than comparable, so it does not make sense to do a " 1162 "MAX reduction with it.");
1163 return new MaxValueReductionOp<Ordinal,Packet> ();
1166 return new ANDValueReductionOp<Ordinal, Packet> ();
1170 true, std::invalid_argument,
"Teuchos::createOp(EReductionType): " 1171 "Invalid EReductionType value " << reductType <<
". Valid values " 1172 "include REDUCE_SUM, REDUCE_MIN, REDUCE_MAX, and REDUCE_AND.");
1185 template<
typename Ordinal>
1186 int Teuchos::rank(
const Comm<Ordinal>& comm)
1188 return comm.getRank();
1192 template<
typename Ordinal>
1193 int Teuchos::size(
const Comm<Ordinal>& comm)
1195 return comm.getSize();
1199 template<
typename Ordinal>
1200 void Teuchos::barrier(
const Comm<Ordinal>& comm)
1202 TEUCHOS_COMM_TIME_MONITOR(
1203 "Teuchos::CommHelpers: barrier<" 1204 <<OrdinalTraits<Ordinal>::name()
1211 template<
typename Ordinal,
typename Packet>
1212 void Teuchos::broadcast(
1213 const Comm<Ordinal>& comm,
1214 const int rootRank,
const Ordinal count, Packet buffer[]
1217 TEUCHOS_COMM_TIME_MONITOR(
1218 "Teuchos::CommHelpers: broadcast<" 1219 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1222 ValueTypeSerializationBuffer<Ordinal,Packet>
1223 charBuffer(count,buffer);
1225 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1230 template<
typename Ordinal,
typename Packet>
1231 void Teuchos::broadcast(
1232 const Comm<Ordinal>& comm,
1234 const ArrayView<Packet> &buffer
1237 broadcast<Ordinal, Packet>(comm, rootRank, buffer.size(), buffer.getRawPtr() );
1241 template<
typename Ordinal,
typename Packet>
1242 void Teuchos::broadcast(
1243 const Comm<Ordinal>& comm,
1244 const int rootRank, Packet *
object 1247 broadcast<Ordinal,Packet>(comm,rootRank,1,object);
1251 template<
typename Ordinal,
typename Packet>
1252 void Teuchos::broadcast(
1253 const Comm<Ordinal>& comm,
1254 const int rootRank,
const Ptr<Packet> &
object 1257 broadcast<Ordinal,Packet>(comm,rootRank,1,
object.getRawPtr());
1261 template<
typename Ordinal,
typename Packet>
1262 void Teuchos::broadcast(
1263 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1264 const int rootRank,
const Ordinal count, Packet*
const buffer[]
1267 TEUCHOS_COMM_TIME_MONITOR(
1268 "Teuchos::CommHelpers: broadcast<" 1269 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1270 <<
">( reference type )" 1272 ReferenceTypeSerializationBuffer<Ordinal,Packet>
1273 charBuffer(serializer, count, buffer);
1275 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1280 template<
typename Ordinal,
typename Packet>
1281 void Teuchos::broadcast(
1282 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1283 const int rootRank,
const ArrayView<
const Ptr<Packet> > &buffer
1286 Array<Packet*> bufferPtrArray;
1287 for (
int i = 0; i < buffer.size(); ++i) {
1288 bufferPtrArray.push_back(buffer[i].getRawPtr());
1290 broadcast<Ordinal,Packet>(comm, serializer, rootRank,
1291 buffer.size(), bufferPtrArray.getRawPtr());
1294 template<
typename Ordinal,
typename Packet,
typename Serializer>
1295 void Teuchos::broadcast(
1296 const Comm<Ordinal>& comm,
1297 const Serializer& serializer,
1298 const int rootRank,
const Ordinal count, Packet buffer[]
1301 TEUCHOS_COMM_TIME_MONITOR(
1302 "Teuchos::CommHelpers: broadcast<" 1303 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1306 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1307 charBuffer(count,buffer,
rcp(&serializer,
false));
1309 rootRank,charBuffer.getBytes(),charBuffer.getCharBuffer()
1314 template<
typename Ordinal,
typename Packet>
1315 void Teuchos::gatherAll(
1316 const Comm<Ordinal>& comm,
1317 const Ordinal sendCount,
const Packet sendBuffer[],
1318 const Ordinal recvCount, Packet recvBuffer[]
1321 TEUCHOS_COMM_TIME_MONITOR(
1322 "Teuchos::CommHelpers: gatherAll<" 1323 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1326 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1327 charSendBuffer(sendCount,sendBuffer);
1328 ValueTypeSerializationBuffer<Ordinal,Packet>
1329 charRecvBuffer(recvCount,recvBuffer);
1331 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1332 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1336 template<
typename Ordinal,
typename Packet>
1338 Teuchos::gather (
const Packet sendBuf[],
1339 const Ordinal sendCount,
1341 const Ordinal recvCount,
1343 const Comm<Ordinal>& comm)
1345 TEUCHOS_COMM_TIME_MONITOR(
1346 "Teuchos::CommHelpers: gather<" 1347 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1350 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1351 charSendBuffer (sendCount, sendBuf);
1352 ValueTypeSerializationBuffer<Ordinal,Packet>
1353 charRecvBuffer (recvCount, recvBuf);
1354 comm.gather (charSendBuffer.getBytes (),
1355 charSendBuffer.getCharBuffer (),
1356 charRecvBuffer.getBytes (),
1357 charRecvBuffer.getCharBuffer (),
1361 template<
typename Ordinal,
typename Packet>
1363 Teuchos::gatherv (
const Packet sendBuf[],
1364 const Ordinal sendCount,
1366 const Ordinal recvCounts[],
1367 const Ordinal displs[],
1369 const Comm<Ordinal>& comm)
1392 "Teuchos::gatherv: The general case is not implemented.");
1395 template<
typename Ordinal,
typename Packet>
1396 void Teuchos::gatherAll(
1397 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
1398 const Ordinal sendCount,
const Packet*
const sendBuffer[],
1399 const Ordinal recvCount, Packet*
const recvBuffer[]
1405 template<
typename Ordinal,
typename Packet,
typename Serializer>
1406 void Teuchos::gatherAll(
1407 const Comm<Ordinal>& comm,
1408 const Serializer& serializer,
1409 const Ordinal sendCount,
const Packet sendBuffer[],
1410 const Ordinal recvCount, Packet recvBuffer[]
1413 TEUCHOS_COMM_TIME_MONITOR(
1414 "Teuchos::CommHelpers: gatherAll<" 1415 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1418 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1419 charSendBuffer(sendCount,sendBuffer,
rcp(&serializer,
false));
1420 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
1421 charRecvBuffer(recvCount,recvBuffer,
rcp(&serializer,
false));
1423 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1424 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
1429 template<
typename Ordinal,
typename Packet>
1431 Teuchos::reduce (
const Packet sendBuf[],
1433 const Ordinal count,
1436 const Comm<Ordinal>& comm)
1442 (
true, std::logic_error,
"Teuchos::reduce<" <<
1443 TypeNameTraits<Ordinal>::name () <<
"," << TypeNameTraits<Packet>::name ()
1444 <<
">: Generic version not implemented. We only implement this function " 1445 "for Ordinal = int and Packet = specific types.");
1449 template<
typename Ordinal,
typename Packet>
1451 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp
1452 ,
const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1455 TEUCHOS_COMM_TIME_MONITOR(
1456 "Teuchos::CommHelpers: reduceAll<" 1457 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1458 <<
">( value type, user-defined op )" 1460 ConstValueTypeSerializationBuffer<Ordinal,Packet>
1461 charSendBuffer(count,sendBuffer);
1462 ValueTypeSerializationBuffer<Ordinal,Packet>
1463 charGlobalReducts(count,globalReducts);
1464 CharToValueTypeReductionOp<Ordinal,Packet>
1465 charReductOp(
rcp(&reductOp,
false));
1467 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
1468 ,charGlobalReducts.getCharBuffer()
1473 template<
typename Ordinal,
typename Packet>
1476 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
1479 TEUCHOS_COMM_TIME_MONITOR(
1480 "Teuchos::CommHelpers: reduceAll<" 1481 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
1482 <<
">( value type, "<<
toString(reductType)<<
" )" 1485 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
1486 createOp<Ordinal, Packet> (reductType);
1488 reduceAll(comm,*reductOp,count,sendBuffer,globalReducts);
1490 catch (std::exception& e) {
1506 #ifdef HAVE_TEUCHOS_COMPLEX 1509 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1510 reduceAll<int, std::complex<double> > (
const Comm<int>& comm,
1511 const EReductionType reductType,
1513 const std::complex<double> sendBuffer[],
1514 std::complex<double> globalReducts[]);
1516 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1517 ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1518 const ArrayRCP<std::complex<double> >& recvBuffer,
1519 const int sourceRank);
1521 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1522 ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1523 const int sourceRank,
1525 const Comm<int>& comm);
1527 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1528 send<int, std::complex<double> > (
const Comm<int>& comm,
1530 const std::complex<double> sendBuffer[],
1531 const int destRank);
1533 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1534 send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1538 const Comm<int>& comm);
1540 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1541 isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1544 const Comm<int>& comm);
1548 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1549 reduceAll<int, std::complex<float> > (
const Comm<int>& comm,
1550 const EReductionType reductType,
1552 const std::complex<float> sendBuffer[],
1553 std::complex<float> globalReducts[]);
1555 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1556 ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1557 const ArrayRCP<std::complex<float> >& recvBuffer,
1558 const int sourceRank);
1560 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1561 ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1562 const int sourceRank,
1564 const Comm<int>& comm);
1566 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1567 send<int, std::complex<float> > (
const Comm<int>& comm,
1569 const std::complex<float> sendBuffer[],
1570 const int destRank);
1572 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1573 send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1577 const Comm<int>& comm);
1579 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1580 isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1583 const Comm<int>& comm);
1584 #endif // HAVE_TEUCHOS_COMPLEX 1589 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1590 reduceAll<int, double> (
const Comm<int>& comm,
1591 const EReductionType reductType,
1593 const double sendBuffer[],
1594 double globalReducts[]);
1596 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1597 ireceive<int, double> (
const Comm<int>& comm,
1598 const ArrayRCP<double>& recvBuffer,
1599 const int sourceRank);
1601 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1602 ireceive<int, double> (
const ArrayRCP<double> &recvBuffer,
1603 const int sourceRank,
1605 const Comm<int>& comm);
1607 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1608 send<int, double> (
const Comm<int>& comm,
1610 const double sendBuffer[],
1611 const int destRank);
1613 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1614 send<int, double> (
const double sendBuffer[],
1618 const Comm<int>& comm);
1620 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1621 isend<int, double> (
const ArrayRCP<const double>& sendBuffer,
1624 const Comm<int>& comm);
1628 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1629 reduceAll<int, float> (
const Comm<int>& comm,
1630 const EReductionType reductType,
1632 const float sendBuffer[],
1633 float globalReducts[]);
1635 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1636 ireceive<int, float> (
const Comm<int>& comm,
1637 const ArrayRCP<float>& recvBuffer,
1638 const int sourceRank);
1640 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1641 ireceive<int, float> (
const ArrayRCP<float> &recvBuffer,
1642 const int sourceRank,
1644 const Comm<int>& comm);
1646 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1647 send<int, float> (
const Comm<int>& comm,
1649 const float sendBuffer[],
1650 const int destRank);
1652 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1653 send<int, float> (
const float sendBuffer[],
1657 const Comm<int>& comm);
1659 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1660 isend<int, float> (
const ArrayRCP<const float>& sendBuffer,
1663 const Comm<int>& comm);
1665 #ifdef HAVE_TEUCHOS_LONG_LONG_INT 1668 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1669 gather<int, long long> (
const long long sendBuf[],
1670 const int sendCount,
1671 long long recvBuf[],
1672 const int recvCount,
1674 const Comm<int>& comm);
1676 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1677 gatherv<int, long long> (
const long long sendBuf[],
1678 const int sendCount,
1679 long long recvBuf[],
1680 const int recvCounts[],
1683 const Comm<int>& comm);
1685 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1686 reduceAll<int, long long> (
const Comm<int>& comm,
1687 const EReductionType reductType,
1689 const long long sendBuffer[],
1690 long long globalReducts[]);
1692 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1693 ireceive<int, long long> (
const Comm<int>& comm,
1694 const ArrayRCP<long long>& recvBuffer,
1695 const int sourceRank);
1697 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1698 ireceive<int, long long> (
const ArrayRCP<long long> &recvBuffer,
1699 const int sourceRank,
1701 const Comm<int>& comm);
1703 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1704 send<int, long long> (
const Comm<int>& comm,
1706 const long long sendBuffer[],
1707 const int destRank);
1709 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1710 send<int, long long> (
const long long sendBuffer[],
1714 const Comm<int>& comm);
1716 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1717 isend<int, long long> (
const ArrayRCP<const long long>& sendBuffer,
1720 const Comm<int>& comm);
1724 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1725 gather<int, unsigned long long> (
const unsigned long long sendBuf[],
1726 const int sendCount,
1727 unsigned long long recvBuf[],
1728 const int recvCount,
1730 const Comm<int>& comm);
1732 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1733 gatherv<int, unsigned long long> (
const unsigned long long sendBuf[],
1734 const int sendCount,
1735 unsigned long long recvBuf[],
1736 const int recvCounts[],
1739 const Comm<int>& comm);
1741 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1742 reduceAll<int, unsigned long long> (
const Comm<int>& comm,
1743 const EReductionType reductType,
1745 const unsigned long long sendBuffer[],
1746 unsigned long long globalReducts[]);
1748 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1749 ireceive<int, unsigned long long> (
const Comm<int>& comm,
1750 const ArrayRCP<unsigned long long>& recvBuffer,
1751 const int sourceRank);
1753 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1754 ireceive<int, unsigned long long> (
const ArrayRCP<unsigned long long> &recvBuffer,
1755 const int sourceRank,
1757 const Comm<int>& comm);
1759 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1760 send<int, unsigned long long> (
const Comm<int>& comm,
1762 const unsigned long long sendBuffer[],
1763 const int destRank);
1765 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1766 send<int, unsigned long long> (
const unsigned long long sendBuffer[],
1770 const Comm<int>& comm);
1772 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1773 isend<int, unsigned long long> (
const ArrayRCP<const unsigned long long>& sendBuffer,
1776 const Comm<int>& comm);
1777 #endif // HAVE_TEUCHOS_LONG_LONG_INT 1781 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1782 gather<int, long> (
const long sendBuf[],
1783 const int sendCount,
1785 const int recvCount,
1787 const Comm<int>& comm);
1789 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1790 gatherv<int, long> (
const long sendBuf[],
1791 const int sendCount,
1793 const int recvCounts[],
1796 const Comm<int>& comm);
1798 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1799 reduceAll<int, long> (
const Comm<int>& comm,
1800 const EReductionType reductType,
1802 const long sendBuffer[],
1803 long globalReducts[]);
1805 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1806 ireceive<int, long> (
const Comm<int>& comm,
1807 const ArrayRCP<long>& recvBuffer,
1808 const int sourceRank);
1810 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1811 ireceive<int, long> (
const ArrayRCP<long> &recvBuffer,
1812 const int sourceRank,
1814 const Comm<int>& comm);
1816 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1817 send<int, long> (
const Comm<int>& comm,
1819 const long sendBuffer[],
1820 const int destRank);
1822 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1823 send<int, long> (
const long sendBuffer[],
1827 const Comm<int>& comm);
1829 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1830 isend<int, long> (
const ArrayRCP<const long>& sendBuffer,
1833 const Comm<int>& comm);
1837 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1838 gather<int, unsigned long> (
const unsigned long sendBuf[],
1839 const int sendCount,
1840 unsigned long recvBuf[],
1841 const int recvCount,
1843 const Comm<int>& comm);
1845 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1846 gatherv<int, unsigned long> (
const unsigned long sendBuf[],
1847 const int sendCount,
1848 unsigned long recvBuf[],
1849 const int recvCounts[],
1852 const Comm<int>& comm);
1854 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1855 reduceAll<int, unsigned long> (
const Comm<int>& comm,
1856 const EReductionType reductType,
1858 const unsigned long sendBuffer[],
1859 unsigned long globalReducts[]);
1861 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1862 ireceive<int, unsigned long> (
const Comm<int>& comm,
1863 const ArrayRCP<unsigned long>& recvBuffer,
1864 const int sourceRank);
1866 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1867 ireceive<int, unsigned long> (
const ArrayRCP<unsigned long> &recvBuffer,
1868 const int sourceRank,
1870 const Comm<int>& comm);
1872 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1873 send<int, unsigned long> (
const Comm<int>& comm,
1875 const unsigned long sendBuffer[],
1876 const int destRank);
1878 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1879 send<int, unsigned long> (
const unsigned long sendBuffer[],
1883 const Comm<int>& comm);
1885 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1886 isend<int, unsigned long> (
const ArrayRCP<const unsigned long>& sendBuffer,
1889 const Comm<int>& comm);
1893 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1894 gather<int, int> (
const int sendBuf[],
1895 const int sendCount,
1897 const int recvCount,
1899 const Comm<int>& comm);
1901 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1902 gatherv<int, int> (
const int sendBuf[],
1903 const int sendCount,
1905 const int recvCounts[],
1908 const Comm<int>& comm);
1910 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1911 scatter (
const int sendBuf[],
1912 const int sendCount,
1914 const int recvCount,
1916 const Comm<int>& comm);
1918 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1919 reduce<int, int> (
const int sendBuf[],
1922 const EReductionType reductType,
1924 const Comm<int>& comm);
1926 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1927 reduceAll<int, int> (
const Comm<int>& comm,
1928 const EReductionType reductType,
1930 const int sendBuffer[],
1931 int globalReducts[]);
1934 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1935 ireceive<int, int> (
const Comm<int>& comm,
1936 const ArrayRCP<int>& recvBuffer,
1937 const int sourceRank);
1939 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1940 ireceive<int, int> (
const ArrayRCP<int> &recvBuffer,
1941 const int sourceRank,
1943 const Comm<int>& comm);
1945 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1946 send<int, int> (
const Comm<int>& comm,
1948 const int sendBuffer[],
1949 const int destRank);
1951 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1952 send<int, int> (
const int sendBuffer[],
1956 const Comm<int>& comm);
1958 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1959 isend<int, int> (
const ArrayRCP<const int>& sendBuffer,
1962 const Comm<int>& comm);
1966 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1967 gather<int, unsigned int> (
const unsigned int sendBuf[],
1968 const int sendCount,
1969 unsigned int recvBuf[],
1970 const int recvCount,
1972 const Comm<int>& comm);
1974 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1975 gatherv<int, unsigned int> (
const unsigned int sendBuf[],
1976 const int sendCount,
1977 unsigned int recvBuf[],
1978 const int recvCounts[],
1981 const Comm<int>& comm);
1983 TEUCHOSCOMM_LIB_DLL_EXPORT
void 1984 reduceAll<int, unsigned int> (
const Comm<int>& comm,
1985 const EReductionType reductType,
1987 const unsigned int sendBuffer[],
1988 unsigned int globalReducts[]);
1990 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1991 ireceive<int, unsigned int> (
const Comm<int>& comm,
1992 const ArrayRCP<unsigned int>& recvBuffer,
1993 const int sourceRank);
1995 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
1996 ireceive<int, unsigned int> (
const ArrayRCP<unsigned int> &recvBuffer,
1997 const int sourceRank,
1999 const Comm<int>& comm);
2001 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2002 send<int, unsigned int> (
const Comm<int>& comm,
2004 const unsigned int sendBuffer[],
2005 const int destRank);
2007 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2008 send<int, unsigned int> (
const unsigned int sendBuffer[],
2012 const Comm<int>& comm);
2014 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2015 isend<int, unsigned int> (
const ArrayRCP<const unsigned int>& sendBuffer,
2018 const Comm<int>& comm);
2022 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2023 gather<int, short> (
const short sendBuf[],
2024 const int sendCount,
2026 const int recvCount,
2028 const Comm<int>& comm);
2030 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2031 gatherv<int, short> (
const short sendBuf[],
2032 const int sendCount,
2034 const int recvCounts[],
2037 const Comm<int>& comm);
2039 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2040 reduceAll<int, short> (
const Comm<int>& comm,
2041 const EReductionType reductType,
2043 const short sendBuffer[],
2044 short globalReducts[]);
2046 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2047 ireceive<int, short> (
const Comm<int>& comm,
2048 const ArrayRCP<short>& recvBuffer,
2049 const int sourceRank);
2051 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2052 ireceive<int, short> (
const ArrayRCP<short> &recvBuffer,
2053 const int sourceRank,
2055 const Comm<int>& comm);
2057 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2058 send<int, short> (
const Comm<int>& comm,
2060 const short sendBuffer[],
2061 const int destRank);
2063 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2064 send<int, short> (
const short sendBuffer[],
2068 const Comm<int>& comm);
2070 TEUCHOSCOMM_LIB_DLL_EXPORT RCP<CommRequest<int> >
2071 isend<int, short> (
const ArrayRCP<const short>& sendBuffer,
2074 const Comm<int>& comm);
2087 TEUCHOSCOMM_LIB_DLL_EXPORT
void 2088 reduceAll<int, char> (
const Comm<int>& comm,
2089 const EReductionType reductType,
2091 const char sendBuffer[],
2092 char globalReducts[]);
2097 template<
typename Ordinal,
typename Packet>
2100 ,
const Packet &
send,
const Ptr<Packet> &globalReduct
2105 reduceAll<Ordinal,Packet>(comm, reductType, 1, &
send, &*globalReduct);
2109 template<
typename Ordinal,
typename Packet>
2111 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2112 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2113 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const globalReducts[]
2116 TEUCHOS_COMM_TIME_MONITOR(
2117 "Teuchos::CommHelpers: reduceAll<" 2118 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2119 <<
">( reference type )" 2121 ConstReferenceTypeSerializationBuffer<Ordinal,Packet>
2122 charSendBuffer(serializer,count,sendBuffer);
2123 ReferenceTypeSerializationBuffer<Ordinal,Packet>
2124 charGlobalReducts(serializer,count,globalReducts);
2125 CharToReferenceTypeReductionOp<Ordinal,Packet>
2126 charReductOp(
rcp(&serializer,
false),
rcp(&reductOp,
false));
2128 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2129 ,charGlobalReducts.getCharBuffer()
2133 template<
typename Ordinal,
typename Packet,
typename Serializer>
2135 const Comm<Ordinal>& comm,
2136 const Serializer& serializer,
2137 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2138 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2141 TEUCHOS_COMM_TIME_MONITOR(
2142 "Teuchos::CommHelpers: reduceAll<" 2143 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2144 <<
">( value type, user-defined op )" 2146 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2147 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2148 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2149 charGlobalReducts(count,globalReducts,
rcp(&serializer,
false));
2150 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2151 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2153 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2154 ,charGlobalReducts.getCharBuffer()
2159 template<
typename Ordinal,
typename Packet,
typename Serializer>
2161 const Comm<Ordinal>& comm,
2162 const Serializer& serializer,
2164 const Ordinal count,
const Packet sendBuffer[], Packet globalReducts[]
2167 TEUCHOS_COMM_TIME_MONITOR(
2168 "Teuchos::CommHelpers: reduceAll<" 2169 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2170 <<
">( value type, "<<
toString(reductType)<<
" )" 2173 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2174 createOp<Ordinal, Packet> (reductType);
2176 reduceAll(comm,serializer,*reductOp,count,sendBuffer,globalReducts);
2178 catch (std::exception& e) {
2186 template<
typename Ordinal,
typename Packet>
2188 const Comm<Ordinal>& comm,
const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2189 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2192 TEUCHOS_COMM_TIME_MONITOR(
2193 "Teuchos::CommHelpers: scan<" 2194 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2195 <<
">( value type, user-defined op )" 2197 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2198 charSendBuffer(count,sendBuffer);
2199 ValueTypeSerializationBuffer<Ordinal,Packet>
2200 charScanReducts(count,scanReducts);
2201 CharToValueTypeReductionOp<Ordinal,Packet>
2202 charReductOp(
rcp(&reductOp,
false));
2204 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2205 ,charScanReducts.getCharBuffer()
2210 template<
typename Ordinal,
typename Packet>
2213 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2216 TEUCHOS_COMM_TIME_MONITOR(
2217 "Teuchos::CommHelpers: scan<" 2218 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2219 <<
">( value type, "<<
toString(reductType)<<
" )" 2222 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2223 createOp<Ordinal, Packet> (reductType);
2225 scan(comm,*reductOp,count,sendBuffer,scanReducts);
2227 catch (std::exception& e) {
2235 template<
typename Ordinal,
typename Packet>
2238 const Packet &
send,
const Ptr<Packet> &scanReduct
2241 scan<Ordinal,Packet>(comm, reductType, 1, &
send, &*scanReduct);
2245 template<
typename Ordinal,
typename Packet>
2247 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2248 const ReferenceTypeReductionOp<Ordinal,Packet> &reductOp,
2249 const Ordinal count,
const Packet*
const sendBuffer[], Packet*
const scanReducts[]
2255 template<
typename Ordinal,
typename Packet,
typename Serializer>
2257 const Comm<Ordinal>& comm,
2258 const Serializer& serializer,
2259 const ValueTypeReductionOp<Ordinal,Packet> &reductOp,
2260 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2263 TEUCHOS_COMM_TIME_MONITOR(
2264 "Teuchos::CommHelpers: scan<" 2265 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2266 <<
">( value type, user-defined op )" 2268 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2269 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2270 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2271 charScanReducts(count,scanReducts,
rcp(&serializer,
false));
2272 CharToValueTypeReductionOp<Ordinal,Packet,Serializer>
2273 charReductOp(
rcp(&reductOp,
false),
rcp(&serializer,
false));
2275 charReductOp,charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2276 ,charScanReducts.getCharBuffer()
2281 template<
typename Ordinal,
typename Packet,
typename Serializer>
2283 const Comm<Ordinal>& comm,
2284 const Serializer& serializer,
2286 const Ordinal count,
const Packet sendBuffer[], Packet scanReducts[]
2289 TEUCHOS_COMM_TIME_MONITOR(
2290 "Teuchos::CommHelpers: scan<" 2291 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2292 <<
">( value type, "<<
toString(reductType)<<
" )" 2295 ValueTypeReductionOp<Ordinal,Packet>* reductOp =
2296 createOp<Ordinal, Packet> (reductType);
2298 scan(comm,serializer,*reductOp,count,sendBuffer,scanReducts);
2300 catch (std::exception& e) {
2307 template<
typename Ordinal,
typename Packet>
2309 const Comm<Ordinal>& comm,
2310 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2313 TEUCHOS_COMM_TIME_MONITOR(
2314 "Teuchos::CommHelpers: send<" 2315 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2318 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2319 charSendBuffer(count,sendBuffer);
2321 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2326 template<
typename Ordinal,
typename Packet>
2329 const Ordinal count,
2334 TEUCHOS_COMM_TIME_MONITOR(
2335 "Teuchos::CommHelpers: send<" 2340 comm.
send (charSendBuffer.getBytes (), charSendBuffer.getCharBuffer (), destRank, tag);
2343 template<
typename Ordinal,
typename Packet>
2345 const Comm<Ordinal>& comm,
2346 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2349 TEUCHOS_COMM_TIME_MONITOR(
2350 "Teuchos::CommHelpers: ssend<" 2351 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2354 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2355 charSendBuffer(count,sendBuffer);
2357 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2362 template<
typename Ordinal,
typename Packet>
2365 const Ordinal count,
2370 TEUCHOS_COMM_TIME_MONITOR(
2371 "Teuchos::CommHelpers: ssend<" 2376 buf_type charSendBuffer (count, sendBuffer);
2377 comm.
ssend (charSendBuffer.getBytes (),
2378 charSendBuffer.getCharBuffer (),
2382 template<
typename Ordinal,
typename Packet>
2384 const Comm<Ordinal>& comm,
2385 const Packet &
send,
const int destRank
2388 Teuchos::send<Ordinal,Packet>(comm,1,&
send,destRank);
2391 template<
typename Ordinal,
typename Packet>
2393 const Comm<Ordinal>& comm,
2394 const Packet &
send,
const int destRank
2397 Teuchos::ssend<Ordinal,Packet>(comm,1,&
send,destRank);
2400 template<
typename Ordinal,
typename Packet>
2402 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2403 const Ordinal count,
const Packet*
const sendBuffer[],
const int destRank
2409 template<
typename Ordinal,
typename Packet,
typename Serializer>
2411 const Comm<Ordinal>& comm,
2412 const Serializer& serializer,
2413 const Ordinal count,
const Packet sendBuffer[],
const int destRank
2416 TEUCHOS_COMM_TIME_MONITOR(
2417 "Teuchos::CommHelpers: send<" 2418 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2421 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2422 charSendBuffer(count,sendBuffer,
rcp(&serializer,
false));
2424 charSendBuffer.getBytes(),charSendBuffer.getCharBuffer()
2429 template<
typename Ordinal,
typename Packet>
2430 int Teuchos::receive(
2431 const Comm<Ordinal>& comm,
2432 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2435 TEUCHOS_COMM_TIME_MONITOR(
2436 "Teuchos::CommHelpers: receive<" 2437 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2440 ValueTypeSerializationBuffer<Ordinal,Packet>
2441 charRecvBuffer(count,recvBuffer);
2442 return comm.receive(
2444 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2449 template<
typename Ordinal,
typename Packet>
2450 int Teuchos::receive(
2451 const Comm<Ordinal>& comm,
2452 const int sourceRank, Packet *recv
2455 return Teuchos::receive<Ordinal,Packet>(comm,sourceRank,1,recv);
2459 template<
typename Ordinal,
typename Packet>
2460 int Teuchos::receive(
2461 const Comm<Ordinal>& comm,
const Serializer<Ordinal,Packet> &serializer,
2462 const int sourceRank,
const Ordinal count, Packet*
const recvBuffer[]
2468 template<
typename Ordinal,
typename Packet,
typename Serializer>
2469 int Teuchos::receive(
2470 const Comm<Ordinal>& comm,
2471 const Serializer& serializer,
2472 const int sourceRank,
const Ordinal count, Packet recvBuffer[]
2475 TEUCHOS_COMM_TIME_MONITOR(
2476 "Teuchos::CommHelpers: receive<" 2477 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2480 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2481 charRecvBuffer(count,recvBuffer,
rcp(&serializer,
false));
2482 return comm.receive(
2484 ,charRecvBuffer.getBytes(),charRecvBuffer.getCharBuffer()
2488 template<
typename Ordinal,
typename Packet>
2490 const Comm<Ordinal>& comm,
2491 const ArrayView<const Packet> &sendBuffer,
2495 TEUCHOS_COMM_TIME_MONITOR(
2496 "Teuchos::CommHelpers: readySend<" 2497 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2500 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2501 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2502 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2505 template<
typename Ordinal,
typename Packet>
2508 const Ordinal count,
2513 TEUCHOS_COMM_TIME_MONITOR(
2514 "Teuchos::CommHelpers: readySend<" 2519 buf_type charSendBuffer (count, sendBuffer);
2520 comm.
readySend (charSendBuffer.getBytes (),
2521 charSendBuffer.getCharBuffer (),
2525 template<
typename Ordinal,
typename Packet>
2527 const Comm<Ordinal>& comm,
2532 readySend<Ordinal, Packet>( comm,
arrayView(&
send,1), destRank );
2535 template<
typename Ordinal,
typename Packet,
typename Serializer>
2537 const Comm<Ordinal>& comm,
2538 const Serializer& serializer,
2539 const ArrayView<const Packet> &sendBuffer,
2543 TEUCHOS_COMM_TIME_MONITOR(
2544 "Teuchos::CommHelpers: readySend<" 2545 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2548 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2549 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2550 comm.readySend( charSendBuffer.getCharBufferView(), destRank );
2553 template<
typename Ordinal,
typename Packet>
2556 const Comm<Ordinal>& comm,
2557 const ArrayRCP<const Packet> &sendBuffer,
2561 TEUCHOS_COMM_TIME_MONITOR(
2562 "Teuchos::CommHelpers: isend<" 2563 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2566 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2567 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr());
2568 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2569 charSendBuffer.getCharBufferView(), destRank );
2574 template<
typename Ordinal,
typename Packet>
2579 const Comm<Ordinal>& comm)
2581 TEUCHOS_COMM_TIME_MONITOR(
2582 "Teuchos::isend<" << OrdinalTraits<Ordinal>::name () <<
"," 2583 << TypeNameTraits<Packet>::name () <<
">");
2584 ConstValueTypeSerializationBuffer<Ordinal,Packet>
2585 charSendBuffer (sendBuffer.size (), sendBuffer.getRawPtr ());
2586 RCP<CommRequest<Ordinal> > commRequest =
2587 comm.isend (charSendBuffer.getCharBufferView (), destRank, tag);
2592 template<
typename Ordinal,
typename Packet>
2595 const Comm<Ordinal>& comm,
2596 const RCP<const Packet> &
send,
2600 const ArrayRCP<const Packet> sendBuffer =
2604 return isend<Ordinal, Packet>( comm, sendBuffer, destRank );
2607 template<
typename Ordinal,
typename Packet,
typename Serializer>
2610 const Comm<Ordinal>& comm,
2611 const Serializer& serializer,
2612 const ArrayRCP<const Packet> &sendBuffer,
2616 TEUCHOS_COMM_TIME_MONITOR(
2617 "Teuchos::CommHelpers: isend<" 2618 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2621 ConstValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2622 charSendBuffer(sendBuffer.size(), sendBuffer.getRawPtr(), serializer);
2623 RCP<CommRequest<Ordinal> > commRequest = comm.isend(
2624 charSendBuffer.getCharBufferView(), destRank );
2629 template<
typename Ordinal,
typename Packet>
2632 const Comm<Ordinal>& comm,
2633 const ArrayRCP<Packet> &recvBuffer,
2634 const int sourceRank
2637 TEUCHOS_COMM_TIME_MONITOR(
2638 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2639 ValueTypeSerializationBuffer<Ordinal,Packet>
2640 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr());
2641 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2642 charRecvBuffer.getCharBufferView(), sourceRank );
2647 template<
typename Ordinal,
typename Packet>
2650 const int sourceRank,
2654 TEUCHOS_COMM_TIME_MONITOR(
2655 "Teuchos::ireceive<int, " <<
"," << TypeNameTraits<Packet>::name () <<
">");
2656 ValueTypeSerializationBuffer<int, Packet>
2657 charRecvBuffer (recvBuffer.
size (), recvBuffer.
getRawPtr ());
2658 RCP<CommRequest<int> > commRequest =
2659 comm.
ireceive (charRecvBuffer.getCharBufferView (), sourceRank, tag);
2664 template<
typename Ordinal,
typename Packet>
2667 const Comm<Ordinal>& comm,
2668 const RCP<Packet> &recv,
2669 const int sourceRank
2672 const ArrayRCP<Packet> recvBuffer =
2676 return ireceive<Ordinal, Packet>( comm, recvBuffer, sourceRank );
2679 template<
typename Ordinal,
typename Packet,
typename Serializer>
2682 const Comm<Ordinal>& comm,
2683 const Serializer& serializer,
2684 const ArrayRCP<Packet> &recvBuffer,
2685 const int sourceRank
2688 TEUCHOS_COMM_TIME_MONITOR(
2689 "Teuchos::CommHelpers: ireceive<" 2690 <<OrdinalTraits<Ordinal>::name()<<
","<<TypeNameTraits<Packet>::name()
2693 ValueTypeSerializationBuffer<Ordinal,Packet,Serializer>
2694 charRecvBuffer(recvBuffer.size(), recvBuffer.getRawPtr(), serializer);
2695 RCP<CommRequest<Ordinal> > commRequest = comm.ireceive(
2696 charRecvBuffer.getCharBufferView(), sourceRank );
2701 template<
typename Ordinal>
2702 void Teuchos::waitAll(
2703 const Comm<Ordinal>& comm,
2704 const ArrayView<RCP<CommRequest<Ordinal> > > &requests
2707 comm.waitAll(requests);
2711 template<
typename Ordinal>
2713 Teuchos::waitAll (
const Comm<Ordinal>& comm,
2714 const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
2715 const ArrayView<RCP<CommStatus<Ordinal> > >& statuses)
2717 comm.waitAll (requests, statuses);
2721 template<
typename Ordinal>
2723 Teuchos::wait (
const Comm<Ordinal>& comm,
2724 const Ptr<RCP<CommRequest<Ordinal> > > &request)
2726 return comm.wait (request);
2730 #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...
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...
virtual void readySend(const ArrayView< const char > &sendBuffer, const int destRank) const =0
Ready send of data from this process to another process.
EReductionType
Enumeration for selecting from a set of pre-defined reduction operations.
size_type size() const
The total number of entries in the array.
virtual RCP< CommRequest< Ordinal > > ireceive(const ArrayView< char > &recvBuffer, const int sourceRank) const =0
Non-blocking receive.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
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.
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.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Standard summation operator for types with value semantics.
void send(const Comm< Ordinal > &comm, const Ordinal count, const Packet sendBuffer[], const int destRank)
Send objects that use values semantics to another process.
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.
TEUCHOS_DEPRECATED void scan(const Comm< Ordinal > &comm, const EReductionType reductType, const Packet &send, Packet *scanReduct)
Deprecated.
Standard Max operator for types with value semantics.
Implementation of Teuchos wrappers for MPI.
This structure defines some basic traits for the ordinal field type.
TEUCHOS_DEPRECATED void reduceAll(const Comm< Ordinal > &comm, const EReductionType reductType, const Packet &send, Packet *globalReduct)
Deprecated .
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). ...
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.
Abstract interface for distributed-memory communication.
Defines basic traits for the ordinal field type.
Default traits class that just returns typeid(T).name().
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
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).
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Defines basic traits returning the name of a type in a portable and readable way. ...
Definition of Teuchos::as, for conversions between types.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
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...
static std::string name()
Encapsulate how an array of const objects with value sematics is serialized into a const char[] array...
Reference-counted smart pointer for managing arrays.