42 #ifndef TPETRA_DISTOBJECT_DECL_HPP
43 #define TPETRA_DISTOBJECT_DECL_HPP
53 #include "Tpetra_Map.hpp"
54 #include "Tpetra_Import.hpp"
55 #include "Tpetra_Export.hpp"
58 #include "Kokkos_ArithTraits.hpp"
59 #include <type_traits>
65 #ifdef HAVE_TPETRA_TRANSFER_TIMERS
66 # undef HAVE_TPETRA_TRANSFER_TIMERS
67 #endif // HAVE_TPETRA_TRANSFER_TIMERS
69 namespace KokkosClassic {
74 enum ReadWriteOption {
164 template<
class DistObjectType>
167 const Teuchos::RCP<
const Map<
typename DistObjectType::local_ordinal_type,
168 typename DistObjectType::global_ordinal_type,
169 typename DistObjectType::node_type> >& newMap);
207 template<
class DistObjectType>
322 template <
class Packet,
328 virtual public Teuchos::Describable
338 using packet_type = typename ::Kokkos::Details::ArithTraits<Packet>::val_type;
361 explicit DistObject (
const Teuchos::RCP<const map_type>& map);
421 const bool restrictedMode =
false);
454 const bool restrictedMode =
false);
488 const bool restrictedMode =
false);
522 const bool restrictedMode =
false);
541 virtual Teuchos::RCP<const map_type>
getMap ()
const {
return map_; }
551 void print (std::ostream& os)
const;
568 describe (Teuchos::FancyOStream &out,
569 const Teuchos::EVerbosityLevel verbLevel =
570 Teuchos::Describable::verbLevel_default)
const;
680 const ::Tpetra::Details::Transfer<local_ordinal_type, global_ordinal_type, node_type>& transfer,
681 const char modeString[],
684 const bool restrictedMode);
702 const size_t numImportLIDs);
704 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
705 virtual void TPETRA_DEPRECATED
714 const Teuchos::ArrayView<const local_ordinal_type> &permuteToLIDs,
715 const Teuchos::ArrayView<const local_ordinal_type> &permuteFromLIDs,
716 const Teuchos::ArrayView<const local_ordinal_type> &remoteLIDs,
717 const Teuchos::ArrayView<const local_ordinal_type> &exportLIDs,
720 const bool restrictedMode);
721 #endif // TPETRA_ENABLE_DEPRECATED_CODE
727 #ifdef KOKKOS_ENABLE_CUDA
729 std::is_same<typename device_type::execution_space, Kokkos::Cuda>::value,
731 typename device_type::memory_space>::type;
734 #endif // KOKKOS_ENABLE_CUDA
748 Kokkos::Device<
typename device_type::execution_space,
759 const size_t numSameIDs,
770 const bool commOnHost,
771 const bool restrictedMode);
791 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
820 const size_t numSameIDs,
825 #else // TPETRA_ENABLE_DEPRECATED_CODE
854 const size_t numSameIDs,
859 #endif // TPETRA_ENABLE_DEPRECATED_CODE
861 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
908 Kokkos::DualView<
size_t*,
910 size_t& constantNumPackets,
912 #else // TPETRA_ENABLE_DEPRECATED_CODE
959 Kokkos::DualView<
size_t*,
961 size_t& constantNumPackets,
963 #endif // TPETRA_ENABLE_DEPRECATED_CODE
965 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
1013 Kokkos::DualView<
size_t*,
1015 const size_t constantNumPackets,
1018 #else // TPETRA_ENABLE_DEPRECATED_CODE
1066 Kokkos::DualView<
size_t*,
1068 const size_t constantNumPackets,
1071 #endif // TPETRA_ENABLE_DEPRECATED_CODE
1073 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
1074 virtual bool TPETRA_DEPRECATED useNewInterface () {
return true; }
1085 virtual void TPETRA_DEPRECATED
1087 const size_t numSameIDs,
1088 const Teuchos::ArrayView<const local_ordinal_type>& permuteToLIDs,
1089 const Teuchos::ArrayView<const local_ordinal_type>& permuteFromLIDs);
1096 virtual void TPETRA_DEPRECATED
1098 const Teuchos::ArrayView<const local_ordinal_type>& exportLIDs,
1099 Teuchos::Array<packet_type>& exports,
1100 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
1101 size_t& constantNumPackets,
1109 virtual void TPETRA_DEPRECATED
1110 unpackAndCombine (
const Teuchos::ArrayView<const local_ordinal_type>& importLIDs,
1111 const Teuchos::ArrayView<const packet_type>& imports,
1112 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
1113 const size_t constantNumPackets,
1122 virtual void TPETRA_DEPRECATED
1123 createViews ()
const;
1129 virtual void TPETRA_DEPRECATED
1130 createViewsNonConst (KokkosClassic::ReadWriteOption rwo);
1136 virtual void TPETRA_DEPRECATED releaseViews ()
const;
1137 #endif // TPETRA_ENABLE_DEPRECATED_CODE
1149 Kokkos::DualView<packet_type*, buffer_device_type>
imports_;
1172 const std::string* prefix);
1194 Kokkos::DualView<packet_type*, buffer_device_type>
exports_;
1214 #ifdef HAVE_TPETRA_TRANSFER_TIMERS
1215 Teuchos::RCP<Teuchos::Time> doXferTimer_;
1216 Teuchos::RCP<Teuchos::Time> copyAndPermuteTimer_;
1217 Teuchos::RCP<Teuchos::Time> packAndPrepareTimer_;
1218 Teuchos::RCP<Teuchos::Time> doPostsAndWaitsTimer_;
1219 Teuchos::RCP<Teuchos::Time> unpackAndCombineTimer_;
1220 #endif // HAVE_TPETRA_TRANSFER_TIMERS
1224 #endif // TPETRA_DISTOBJECT_DECL_HPP
Communication plan for data redistribution from a uniquely-owned to a (possibly) multiply-owned distr...
Node node_type
The Node type. If you don't know what this is, don't use it.
Kokkos::DualView< size_t *, buffer_device_type > numExportPacketsPerLID_
Number of packets to send for each send operation.
void doImport(const SrcDistObject &source, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, const CombineMode CM, const bool restrictedMode=false)
Import data into this object using an Import object ("forward mode").
virtual void packAndPrepare(const SrcDistObject &source, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &exportLIDs, Kokkos::DualView< packet_type *, buffer_device_type > &exports, Kokkos::DualView< size_t *, buffer_device_type > numPacketsPerLID, size_t &constantNumPackets, Distributor &distor)
Pack data and metadata for communication (sends).
virtual void doTransferNew(const SrcDistObject &src, const CombineMode CM, const size_t numSameIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &permuteToLIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &permuteFromLIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &remoteLIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &exportLIDs, Distributor &distor, const ReverseOption revOp, const bool commOnHost, const bool restrictedMode)
Implementation detail of doTransfer.
void print(std::ostream &os) const
Print this object to the given output stream.
virtual bool reallocArraysForNumPacketsPerLid(const size_t numExportLIDs, const size_t numImportLIDs)
Reallocate numExportPacketsPerLID_ and/or numImportPacketsPerLID_, if necessary.
Abstract base class for sources of an Import or Export.
bool isDistributed() const
Whether this is a globally distributed object.
Forward declaration of Tpetra::DistObject.
void removeEmptyProcessesInPlace(Teuchos::RCP< DistObjectType > &input, const Teuchos::RCP< const Map< typename DistObjectType::local_ordinal_type, typename DistObjectType::global_ordinal_type, typename DistObjectType::node_type > > &newMap)
Remove processes which contain no elements in this object's Map.
virtual void doTransfer(const SrcDistObject &src, const ::Tpetra::Details::Transfer< local_ordinal_type, global_ordinal_type, node_type > &transfer, const char modeString[], const ReverseOption revOp, const CombineMode CM, const bool restrictedMode)
Redistribute data across (MPI) processes.
typename Node::device_type device_type
The Kokkos Device type.
GlobalOrdinal global_ordinal_type
The type of global indices.
virtual ~DistObject()=default
Destructor (virtual for memory safety of derived classes).
typename::Kokkos::Details::ArithTraits< GlobalOrdinal >::val_type packet_type
The type of each datum being sent or received in an Import or Export.
Kokkos::DualView< size_t *, buffer_device_type > numImportPacketsPerLID_
Number of packets to receive for each receive operation.
typename device_type::execution_space execution_space
The Kokkos execution space.
Kokkos::DualView< packet_type *, buffer_device_type > imports_
Buffer into which packed data are imported (received from other processes).
Kokkos::DualView< packet_type *, buffer_device_type > exports_
Buffer from which packed data are exported (sent to other processes).
typename device_type::memory_space buffer_memory_space
Kokkos memory space for communication buffers.
Communication plan for data redistribution from a (possibly) multiply-owned to a uniquely-owned distr...
Sets up and executes a communication plan for a Tpetra DistObject.
CombineMode
Rule for combining data in an Import or Export.
Teuchos::RCP< const map_type > map_
The Map over which this object is distributed.
Abstract base class for objects that can be the source of an Import or Export operation.
bool reallocImportsIfNeeded(const size_t newSize, const bool verbose, const std::string *prefix)
Reallocate imports_ if needed.
DistObject & operator=(const DistObject< Packet, LocalOrdinal, GlobalOrdinal, Node > &)=default
Assignment operator (default).
LocalOrdinal local_ordinal_type
The type of local indices.
DistObject(const Teuchos::RCP< const map_type > &map)
Constructor.
virtual std::string description() const
One-line descriptiion of this object.
virtual size_t constantNumberOfPackets() const
Whether the implementation's instance promises always to have a constant number of packets per LID (l...
A parallel distribution of indices over processes.
void doExport(const SrcDistObject &source, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, const CombineMode CM, const bool restrictedMode=false)
Export data into this object using an Export object ("forward mode").
virtual Teuchos::RCP< const map_type > getMap() const
The Map describing the parallel distribution of this object.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print a descriptiion of this object to the given output stream.
Kokkos::Device< typename device_type::execution_space, buffer_memory_space > buffer_device_type
virtual void copyAndPermute(const SrcDistObject &source, const size_t numSameIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &permuteToLIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &permuteFromLIDs)
Perform copies and permutations that are local to the calling (MPI) process.
Base class for distributed Tpetra objects that support data redistribution.
virtual void unpackAndCombine(const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &importLIDs, Kokkos::DualView< packet_type *, buffer_device_type > imports, Kokkos::DualView< size_t *, buffer_device_type > numPacketsPerLID, const size_t constantNumPackets, Distributor &distor, const CombineMode combineMode)
Perform any unpacking and combining after communication.
virtual void removeEmptyProcessesInPlace(const Teuchos::RCP< const map_type > &newMap)
Remove processes which contain no entries in this object's Map.
virtual bool checkSizes(const SrcDistObject &source)=0
Compare the source and target (this) objects for compatibility.