42 #ifndef TEUCHOS_COMM_HELPERS_HPP 43 #define TEUCHOS_COMM_HELPERS_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[]
1086 min_type::min (count, inBuffer, inoutBuffer);
1090 template<
typename Ordinal,
typename Packet>
1092 const Ordinal count,
1093 const Packet inBuffer[],
1094 Packet inoutBuffer[]
1098 max_type::max (count,inBuffer,inoutBuffer);
1102 template<
typename Ordinal,
typename Packet>
1104 const Ordinal count,
1105 const Packet inBuffer[],
1106 Packet inoutBuffer[]
1110 and_type::andOp (count, inBuffer, inoutBuffer);
1140 template<
typename Ordinal,
typename Packet>
1141 ValueTypeReductionOp<Ordinal,Packet>*
1145 switch (reductType) {
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.");
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.");
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)
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[]
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[]
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[]
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[]
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)
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[]
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[]
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[]
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 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[]);
1517 ireceive<int, std::complex<double> > (
const Comm<int>& comm,
1518 const ArrayRCP<std::complex<double> >& recvBuffer,
1519 const int sourceRank);
1522 ireceive<int, std::complex<double> > (
const ArrayRCP<std::complex<double> > &recvBuffer,
1523 const int sourceRank,
1525 const Comm<int>& comm);
1528 send<int, std::complex<double> > (
const Comm<int>& comm,
1530 const std::complex<double> sendBuffer[],
1531 const int destRank);
1534 send<int, std::complex<double> > (
const std::complex<double> sendBuffer[],
1538 const Comm<int>& comm);
1541 isend<int, std::complex<double> > (
const ArrayRCP<const std::complex<double> >& sendBuffer,
1544 const Comm<int>& comm);
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[]);
1556 ireceive<int, std::complex<float> > (
const Comm<int>& comm,
1557 const ArrayRCP<std::complex<float> >& recvBuffer,
1558 const int sourceRank);
1561 ireceive<int, std::complex<float> > (
const ArrayRCP<std::complex<float> > &recvBuffer,
1562 const int sourceRank,
1564 const Comm<int>& comm);
1567 send<int, std::complex<float> > (
const Comm<int>& comm,
1569 const std::complex<float> sendBuffer[],
1570 const int destRank);
1573 send<int, std::complex<float> > (
const std::complex<float> sendBuffer[],
1577 const Comm<int>& comm);
1580 isend<int, std::complex<float> > (
const ArrayRCP<const std::complex<float> >& sendBuffer,
1583 const Comm<int>& comm);
1584 #endif // HAVE_TEUCHOS_COMPLEX 1591 const EReductionType reductType,
1593 const double sendBuffer[],
1594 double globalReducts[]);
1598 const ArrayRCP<double>& recvBuffer,
1599 const int sourceRank);
1603 const int sourceRank,
1605 const Comm<int>& comm);
1610 const double sendBuffer[],
1611 const int destRank);
1618 const Comm<int>& comm);
1624 const Comm<int>& comm);
1630 const EReductionType reductType,
1632 const float sendBuffer[],
1633 float globalReducts[]);
1637 const ArrayRCP<float>& recvBuffer,
1638 const int sourceRank);
1642 const int sourceRank,
1644 const Comm<int>& comm);
1649 const float sendBuffer[],
1650 const int destRank);
1657 const Comm<int>& comm);
1663 const Comm<int>& comm);
1665 #ifdef HAVE_TEUCHOS_LONG_LONG_INT 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);
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);
1686 reduceAll<int, long long> (
const Comm<int>& comm,
1687 const EReductionType reductType,
1689 const long long sendBuffer[],
1690 long long globalReducts[]);
1693 ireceive<int, long long> (
const Comm<int>& comm,
1694 const ArrayRCP<long long>& recvBuffer,
1695 const int sourceRank);
1698 ireceive<int, long long> (
const ArrayRCP<long long> &recvBuffer,
1699 const int sourceRank,
1701 const Comm<int>& comm);
1704 send<int, long long> (
const Comm<int>& comm,
1706 const long long sendBuffer[],
1707 const int destRank);
1710 send<int, long long> (
const long long sendBuffer[],
1714 const Comm<int>& comm);
1717 isend<int, long long> (
const ArrayRCP<const long long>& sendBuffer,
1720 const Comm<int>& comm);
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);
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);
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[]);
1749 ireceive<int, unsigned long long> (
const Comm<int>& comm,
1750 const ArrayRCP<unsigned long long>& recvBuffer,
1751 const int sourceRank);
1754 ireceive<int, unsigned long long> (
const ArrayRCP<unsigned long long> &recvBuffer,
1755 const int sourceRank,
1757 const Comm<int>& comm);
1760 send<int, unsigned long long> (
const Comm<int>& comm,
1762 const unsigned long long sendBuffer[],
1763 const int destRank);
1766 send<int, unsigned long long> (
const unsigned long long sendBuffer[],
1770 const Comm<int>& comm);
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 1783 const int sendCount,
1785 const int recvCount,
1787 const Comm<int>& comm);
1791 const int sendCount,
1793 const int recvCounts[],
1796 const Comm<int>& comm);
1800 const EReductionType reductType,
1802 const long sendBuffer[],
1803 long globalReducts[]);
1807 const ArrayRCP<long>& recvBuffer,
1808 const int sourceRank);
1812 const int sourceRank,
1814 const Comm<int>& comm);
1819 const long sendBuffer[],
1820 const int destRank);
1827 const Comm<int>& comm);
1833 const Comm<int>& comm);
1839 const int sendCount,
1840 unsigned long recvBuf[],
1841 const int recvCount,
1843 const Comm<int>& comm);
1847 const int sendCount,
1848 unsigned long recvBuf[],
1849 const int recvCounts[],
1852 const Comm<int>& comm);
1856 const EReductionType reductType,
1858 const unsigned long sendBuffer[],
1859 unsigned long globalReducts[]);
1863 const ArrayRCP<unsigned long>& recvBuffer,
1864 const int sourceRank);
1868 const int sourceRank,
1870 const Comm<int>& comm);
1875 const unsigned long sendBuffer[],
1876 const int destRank);
1883 const Comm<int>& comm);
1889 const Comm<int>& comm);
1895 const int sendCount,
1897 const int recvCount,
1899 const Comm<int>& comm);
1903 const int sendCount,
1905 const int recvCounts[],
1908 const Comm<int>& comm);
1912 const int sendCount,
1914 const int recvCount,
1916 const Comm<int>& comm);
1922 const EReductionType reductType,
1924 const Comm<int>& comm);
1928 const EReductionType reductType,
1930 const int sendBuffer[],
1931 int globalReducts[]);
1936 const ArrayRCP<int>& recvBuffer,
1937 const int sourceRank);
1941 const int sourceRank,
1943 const Comm<int>& comm);
1948 const int sendBuffer[],
1949 const int destRank);
1956 const Comm<int>& comm);
1962 const Comm<int>& comm);
1968 const int sendCount,
1969 unsigned int recvBuf[],
1970 const int recvCount,
1972 const Comm<int>& comm);
1976 const int sendCount,
1977 unsigned int recvBuf[],
1978 const int recvCounts[],
1981 const Comm<int>& comm);
1985 const EReductionType reductType,
1987 const unsigned int sendBuffer[],
1988 unsigned int globalReducts[]);
1992 const ArrayRCP<unsigned int>& recvBuffer,
1993 const int sourceRank);
1997 const int sourceRank,
1999 const Comm<int>& comm);
2004 const unsigned int sendBuffer[],
2005 const int destRank);
2012 const Comm<int>& comm);
2018 const Comm<int>& comm);
2024 const int sendCount,
2026 const int recvCount,
2028 const Comm<int>& comm);
2032 const int sendCount,
2034 const int recvCounts[],
2037 const Comm<int>& comm);
2041 const EReductionType reductType,
2043 const short sendBuffer[],
2044 short globalReducts[]);
2048 const ArrayRCP<short>& recvBuffer,
2049 const int sourceRank);
2053 const int sourceRank,
2055 const Comm<int>& comm);
2060 const short sendBuffer[],
2061 const int destRank);
2068 const Comm<int>& comm);
2074 const Comm<int>& comm);
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[]
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[]
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[]
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[]
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[]
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[]
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[]
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
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,
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
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,
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
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[]
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[]
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,
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,
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,
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,
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)
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,
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
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,
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
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...
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned long >(const ArrayRCP< const unsigned long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void send< int, float >(const Comm< int > &comm, const int count, const float sendBuffer[], const int destRank)
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.
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, float >(const ArrayRCP< const float > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, float >(const Comm< int > &comm, const ArrayRCP< float > &recvBuffer, const int sourceRank)
static void max(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
void gatherv< int, short >(const short sendBuf[], const int sendCount, short recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
size_type size() const
The total number of entries in the array.
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, short >(const ArrayRCP< const short > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, long >(const Comm< int > &comm, const EReductionType reductType, const int count, const long sendBuffer[], long globalReducts[])
RCP< Teuchos::CommRequest< int > > ireceive< int, double >(const Comm< int > &comm, const ArrayRCP< double > &recvBuffer, const int sourceRank)
RCP< Teuchos::CommRequest< int > > ireceive< int, short >(const Comm< int > &comm, const ArrayRCP< short > &recvBuffer, const int sourceRank)
void send< int, long >(const Comm< int > &comm, const int count, const long sendBuffer[], const int destRank)
void gather< int, unsigned int >(const unsigned int sendBuf[], const int sendCount, unsigned int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
virtual RCP< CommRequest< Ordinal > > ireceive(const ArrayView< char > &recvBuffer, const int sourceRank) const =0
Non-blocking receive.
static void andOp(const Ordinal, const Packet[], Packet[])
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
RawPointerConversionTraits< Container >::Ptr_t getRawPtr(const Container &c)
virtual void send(const Ordinal bytes, const char sendBuffer[], const int destRank) const =0
Possibly blocking send of data from this process to another process.
void gatherv< int, int >(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, double >(const ArrayRCP< const double > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void gather< int, long >(const long sendBuf[], const int sendCount, long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void send< int, int >(const Comm< int > &comm, const int count, const int sendBuffer[], const int destRank)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, unsigned int >(const ArrayRCP< const unsigned int > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void send< int, double >(const Comm< int > &comm, const int count, const double sendBuffer[], const int destRank)
void gather< int, int >(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
Standard logical AND operator for booleans.
#define TEUCHOS_COMM_TIME_MONITOR(FUNCNAME)
void reduceAll(const Comm< Ordinal > &comm, const ValueTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet sendBuffer[], Packet globalReducts[])
Wrapper for MPI_Allreduce that takes a custom reduction operator.
Standard min operator for types with value semantics.
This structure defines some basic traits for a scalar field type.
void scatter(const Packet sendBuf[], const Ordinal sendCount, Packet recvBuf[], const Ordinal recvCount, const Ordinal root, const Comm< Ordinal > &comm)
Wrapper for MPI_Scatter; scatter collective.
std::string toString(const any &rhs)
Converts the value in any to a std::string.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
Standard summation operator for types with value semantics.
void gatherv< int, unsigned long >(const unsigned long sendBuf[], const int sendCount, unsigned long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
static void andOp(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
void reduceAll< int, unsigned int >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned int sendBuffer[], unsigned int globalReducts[])
void reduceAll< int, short >(const Comm< int > &comm, const EReductionType reductType, const int count, const short sendBuffer[], short globalReducts[])
static void min(const Ordinal, const Packet[], Packet[])
void reduce< int, int >(const int sendBuf[], int recvBuf[], const int count, const EReductionType reductType, const int root, const Comm< int > &comm)
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.
void reduceAll< int, double >(const Comm< int > &comm, const EReductionType reductType, const int count, const double sendBuffer[], double globalReducts[])
TEUCHOS_DEPRECATED void scan(const Comm< Ordinal > &comm, const EReductionType reductType, const Packet &send, Packet *scanReduct)
Deprecated.
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, long >(const ArrayRCP< const long > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
std::string toString(const HashSet< Key > &h)
Standard Max operator for types with value semantics.
void gatherv< int, long >(const long sendBuf[], const int sendCount, long recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
Implementation of Teuchos wrappers for MPI.
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 .
#define TEUCHOS_MAX(x, y)
void send(const Packet sendBuffer[], const Ordinal count, const int destRank, const int tag, const Comm< Ordinal > &comm)
Variant of send() that takes a tag (and restores the correct order of arguments). ...
void reduceAll< int, int >(const Comm< int > &comm, const EReductionType reductType, const int count, const int sendBuffer[], int globalReducts[])
void gatherv< int, unsigned int >(const unsigned int sendBuf[], const int sendCount, unsigned int recvBuf[], const int recvCounts[], const int displs[], const int root, const Comm< int > &comm)
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned int >(const Comm< int > &comm, const ArrayRCP< unsigned int > &recvBuffer, const int sourceRank)
TEUCHOSCOMM_LIB_DLL_EXPORT RCP< CommRequest< int > > isend< int, int >(const ArrayRCP< const int > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, unsigned long >(const Comm< int > &comm, const EReductionType reductType, const int count, const unsigned long sendBuffer[], unsigned long globalReducts[])
RCP< CommRequest< Ordinal > > ireceive(const ArrayRCP< Packet > &recvBuffer, const int sourceRank, const int tag, const Comm< Ordinal > &comm)
Variant of ireceive that takes a tag argument (and restores the correct order of arguments).
RCP< Teuchos::CommRequest< int > > ireceive< int, int >(const Comm< int > &comm, const ArrayRCP< int > &recvBuffer, const int sourceRank)
Templated array class derived from the STL std::vector.
RCP< Teuchos::CommRequest< int > > ireceive< int, unsigned long >(const Comm< int > &comm, const ArrayRCP< unsigned long > &recvBuffer, const int sourceRank)
Abstract interface for distributed-memory communication.
Defines basic traits for the ordinal field type.
Default traits class that just returns typeid(T).name().
RCP< Teuchos::CommRequest< int > > isend(const ArrayRCP< const double > &sendBuffer, const int destRank, const int tag, const Comm< int > &comm)
void reduceAll< int, float >(const Comm< int > &comm, const EReductionType reductType, const int count, const float sendBuffer[], float globalReducts[])
void ssend(const Packet sendBuffer[], const Ordinal count, const int destRank, const int tag, const Comm< Ordinal > &comm)
Variant of ssend() that takes a tag (and restores the correct order of arguments).
Defines basic traits for the scalar field type.
#define TEUCHOSCOMM_LIB_DLL_EXPORT
TEUCHOSCOMM_LIB_DLL_EXPORT void scatter(const int sendBuf[], const int sendCount, int recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
ArrayRCP< T > arcpWithEmbeddedObj(T *p, typename ArrayRCP< T >::size_type lowerOffset, typename ArrayRCP< T >::size_type size, const Embedded &embedded, bool owns_mem=true)
Create an ArrayRCP with and also put in an embedded object.
static void max(const Ordinal, const Packet[], Packet[])
Smart reference counting pointer class for automatic garbage collection.
RCP< Teuchos::CommRequest< int > > ireceive< int, long >(const Comm< int > &comm, const ArrayRCP< long > &recvBuffer, const int sourceRank)
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
void gather< int, short >(const short sendBuf[], const int sendCount, short recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
#define TEUCHOS_MIN(x, y)
void send< int, short >(const Comm< int > &comm, const int count, const short sendBuffer[], const int destRank)
Defines basic traits returning the name of a type in a portable and readable way. ...
Definition of Teuchos::as, for conversions between types.
void reduce(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[]) const
ValueTypeReductionOp< Ordinal, Packet > * createOp(const EReductionType reductType)
void readySend(const Packet sendBuffer[], const Ordinal count, const int destRank, const int tag, const Comm< Ordinal > &comm)
Variant of readySend() that accepts a message tag.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call...
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...
void scan(const Comm< Ordinal > &comm, const ValueTypeReductionOp< Ordinal, Packet > &reductOp, const Ordinal count, const Packet sendBuffer[], Packet scanReducts[])
Scan/Reduce array of objects that use value semantics using a user-defined reduction operator...
void gather< int, unsigned long >(const unsigned long sendBuf[], const int sendCount, unsigned long recvBuf[], const int recvCount, const int root, const Comm< int > &comm)
Encapsulate how an array of const objects with value sematics is serialized into a const char[] array...
void send< int, unsigned long >(const Comm< int > &comm, const int count, const unsigned long sendBuffer[], const int destRank)
static void min(const Ordinal count, const Packet inBuffer[], Packet inoutBuffer[])
Reference-counted smart pointer for managing arrays.
void send< int, unsigned int >(const Comm< int > &comm, const int count, const unsigned int sendBuffer[], const int destRank)