42 #ifndef TPETRA_DISTOBJECT_DECL_HPP 43 #define TPETRA_DISTOBJECT_DECL_HPP 53 #include "Tpetra_ConfigDefs.hpp" 54 #include "Tpetra_Map.hpp" 55 #include "Tpetra_Import.hpp" 56 #include "Tpetra_Export.hpp" 58 #include "Kokkos_NodeAPIConfigDefs.hpp" 59 #include "KokkosCompat_ClassicNodeAPI_Wrapper.hpp" 60 #include "Kokkos_ArithTraits.hpp" 66 #ifdef HAVE_TPETRA_TRANSFER_TIMERS 67 # undef HAVE_TPETRA_TRANSFER_TIMERS 68 #endif // HAVE_TPETRA_TRANSFER_TIMERS 185 template <
class Packet,
187 class GlobalOrdinal = Details::DefaultTypes::global_ordinal_type,
189 const bool classic = Node::classic>
192 virtual public Teuchos::Describable
202 typedef typename Kokkos::Details::ArithTraits<Packet>::val_type
packet_type;
216 typedef typename Kokkos::View<packet_type*, device_type>::size_type view_size_type;
228 explicit DistObject (
const Teuchos::RCP<const map_type>& map);
347 virtual Teuchos::RCP<const map_type>
getMap ()
const {
return map_; }
357 void print (std::ostream &os)
const;
374 describe (Teuchos::FancyOStream &out,
375 const Teuchos::EVerbosityLevel verbLevel =
376 Teuchos::Describable::verbLevel_default)
const;
431 template<
class PT,
class LO,
class GO,
class NT>
436 template<
class PT,
class LO,
class GO,
class NT>
497 const Teuchos::ArrayView<const local_ordinal_type> &permuteToLIDs,
498 const Teuchos::ArrayView<const local_ordinal_type> &permuteFromLIDs,
499 const Teuchos::ArrayView<const local_ordinal_type> &remoteLIDs,
500 const Teuchos::ArrayView<const local_ordinal_type> &exportLIDs,
508 const Teuchos::ArrayView<const local_ordinal_type> &permuteToLIDs,
509 const Teuchos::ArrayView<const local_ordinal_type> &permuteFromLIDs,
510 const Teuchos::ArrayView<const local_ordinal_type> &remoteLIDs,
511 const Teuchos::ArrayView<const local_ordinal_type> &exportLIDs,
519 const Teuchos::ArrayView<const local_ordinal_type> &permuteToLIDs,
520 const Teuchos::ArrayView<const local_ordinal_type> &permuteFromLIDs,
521 const Teuchos::ArrayView<const local_ordinal_type> &remoteLIDs,
522 const Teuchos::ArrayView<const local_ordinal_type> &exportLIDs,
567 const Teuchos::ArrayView<const local_ordinal_type>& permuteToLIDs,
568 const Teuchos::ArrayView<const local_ordinal_type>& permuteFromLIDs)
573 const Kokkos::View<const local_ordinal_type*, execution_space> &permuteToLIDs,
574 const Kokkos::View<const local_ordinal_type*, execution_space> &permuteFromLIDs)
601 const Teuchos::ArrayView<const local_ordinal_type>& exportLIDs,
602 Teuchos::Array<packet_type>& exports,
603 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
604 size_t& constantNumPackets,
609 const Kokkos::View<const local_ordinal_type*, execution_space> &exportLIDs,
610 Kokkos::View<packet_type*, execution_space> &exports,
611 const Kokkos::View<size_t*, execution_space> &numPacketsPerLID,
612 size_t& constantNumPackets,
639 const Teuchos::ArrayView<const packet_type>& imports,
640 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
641 size_t constantNumPackets,
647 unpackAndCombineNew (
648 const Kokkos::View<const local_ordinal_type*, execution_space> &importLIDs,
649 const Kokkos::View<const packet_type*, execution_space> &imports,
650 const Kokkos::View<size_t*, execution_space> &numPacketsPerLID,
651 size_t constantNumPackets,
695 Teuchos::RCP<const map_type>
map_;
699 Kokkos::View<packet_type*, execution_space> imports_;
702 Teuchos::Array<packet_type> imports_old_;
715 Kokkos::View<size_t*, execution_space> numImportPacketsPerLID_;
716 typename Kokkos::View<size_t*, execution_space>::HostMirror host_numImportPacketsPerLID_;
719 Teuchos::Array<size_t> numImportPacketsPerLID_old_;
723 Kokkos::View<packet_type*, execution_space> exports_;
726 Teuchos::Array<packet_type> exports_old_;
739 Kokkos::View<size_t*,execution_space> numExportPacketsPerLID_;
741 Teuchos::Array<size_t> numExportPacketsPerLID_old_;
743 #ifdef HAVE_TPETRA_TRANSFER_TIMERS 745 Teuchos::RCP<Teuchos::Time> doXferTimer_;
746 Teuchos::RCP<Teuchos::Time> copyAndPermuteTimer_;
747 Teuchos::RCP<Teuchos::Time> packAndPrepareTimer_;
748 Teuchos::RCP<Teuchos::Time> doPostsAndWaitsTimer_;
749 Teuchos::RCP<Teuchos::Time> unpackAndCombineTimer_;
750 #endif // HAVE_TPETRA_TRANSFER_TIMERS 836 template<
class DistObjectType>
839 const Teuchos::RCP<
const Map<
typename DistObjectType::local_ordinal_type,
840 typename DistObjectType::global_ordinal_type,
841 typename DistObjectType::node_type> >& newMap);
879 template<
class DistObjectType>
885 #endif // TPETRA_DISTOBJECT_DECL_HPP Communication plan for data redistribution from a uniquely-owned to a (possibly) multiply-owned distr...
Namespace Tpetra contains the class and methods constituting the Tpetra library.
virtual std::string description() const
One-line descriptiion of this object.
device_type::execution_space execution_space
The Kokkos execution space.
Node node_type
The Kokkos Node type.
KokkosClassic::DefaultNode::DefaultNodeType node_type
Default value of Node template parameter.
Kokkos::Details::ArithTraits< Packet >::val_type packet_type
The type of each datum being sent or received in an Import or Export.
virtual size_t constantNumberOfPackets() const
Whether the implementation's instance promises always to have a constant number of packets per LID...
Abstract base class for sources of an Import or Export.
virtual void doTransfer(const SrcDistObject &src, CombineMode CM, size_t numSameIDs, const Teuchos::ArrayView< const local_ordinal_type > &permuteToLIDs, const Teuchos::ArrayView< const local_ordinal_type > &permuteFromLIDs, const Teuchos::ArrayView< const local_ordinal_type > &remoteLIDs, const Teuchos::ArrayView< const local_ordinal_type > &exportLIDs, Distributor &distor, ReverseOption revOp)
Redistribute data across memory images.
virtual void removeEmptyProcessesInPlace(const Teuchos::RCP< const map_type > &newMap)
Remove processes which contain no elements in this object's Map.
int local_ordinal_type
Default value of LocalOrdinal template parameter.
Node::device_type device_type
The Kokkos Device type.
virtual void releaseViews() const
Hook for releasing views.
virtual void packAndPrepare(const SrcDistObject &source, const Teuchos::ArrayView< const local_ordinal_type > &exportLIDs, Teuchos::Array< packet_type > &exports, const Teuchos::ArrayView< size_t > &numPacketsPerLID, size_t &constantNumPackets, Distributor &distor)
Perform any packing or preparation required for communication.
GlobalOrdinal global_ordinal_type
The type of global indices.
LocalOrdinal local_ordinal_type
The type of local indices.
virtual bool checkSizes(const SrcDistObject &source)=0
Compare the source and target (this) objects for compatibility.
virtual void unpackAndCombine(const Teuchos::ArrayView< const local_ordinal_type > &importLIDs, const Teuchos::ArrayView< const packet_type > &imports, const Teuchos::ArrayView< size_t > &numPacketsPerLID, size_t constantNumPackets, Distributor &distor, CombineMode CM)
Perform any unpacking and combining after communication.
Communication plan for data redistribution from a (possibly) multiply-owned to a uniquely-owned distr...
Map< local_ordinal_type, global_ordinal_type, node_type > map_type
The type of the Map specialization to use with this class.
virtual void createViews() const
Hook for creating a const view.
Sets up and executes a communication plan for a Tpetra DistObject.
CombineMode
Rule for combining data in an Import or Export.
virtual ~DistObject()
Destructor (virtual for memory safety of derived classes).
Teuchos::RCP< const map_type > map_
The Map over which this object is distributed.
virtual void copyAndPermute(const SrcDistObject &source, size_t numSameIDs, const Teuchos::ArrayView< const local_ordinal_type > &permuteToLIDs, const Teuchos::ArrayView< const local_ordinal_type > &permuteFromLIDs)
Perform copies and permutations that are local to this process.
bool isDistributed() const
Whether this is a globally distributed object.
Abstract base class for objects that can be the source of an Import or Export operation.
void print(std::ostream &os) const
Print this object to the given output stream.
DistObject(const Teuchos::RCP< const map_type > &map)
Constructor.
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.
virtual void createViewsNonConst(KokkosClassic::ReadWriteOption rwo)
Hook for creating a nonconst view.
Describes a parallel distribution of objects over processes.
virtual bool useNewInterface()
Whether lass (???) implements old or new interface.
void doExport(const SrcDistObject &source, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, CombineMode CM)
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.
Base class for distributed Tpetra objects that support data redistribution.
void doImport(const SrcDistObject &source, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, CombineMode CM)
Import data into this object using an Import object ("forward mode").