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" 57 #include "Kokkos_NodeAPIConfigDefs.hpp" 58 #include "Kokkos_ArithTraits.hpp" 64 #ifdef HAVE_TPETRA_TRANSFER_TIMERS 65 # undef HAVE_TPETRA_TRANSFER_TIMERS 66 #endif // HAVE_TPETRA_TRANSFER_TIMERS 207 template <
class Packet,
209 class GlobalOrdinal = ::Tpetra::Details::DefaultTypes::global_ordinal_type,
211 const bool classic = Node::classic>
214 virtual public Teuchos::Describable
224 typedef typename Kokkos::Details::ArithTraits<Packet>::val_type
packet_type;
238 typedef typename Kokkos::View<packet_type*, device_type>::size_type view_size_type;
250 explicit DistObject (
const Teuchos::RCP<const map_type>& map);
373 virtual Teuchos::RCP<const map_type>
getMap ()
const {
return map_; }
383 void print (std::ostream &os)
const;
400 describe (Teuchos::FancyOStream &out,
401 const Teuchos::EVerbosityLevel verbLevel =
402 Teuchos::Describable::verbLevel_default)
const;
458 template<
class PT,
class LO,
class GO,
class NT>
463 template<
class PT,
class LO,
class GO,
class NT>
526 const Teuchos::ArrayView<const local_ordinal_type> &permuteToLIDs,
527 const Teuchos::ArrayView<const local_ordinal_type> &permuteFromLIDs,
528 const Teuchos::ArrayView<const local_ordinal_type> &remoteLIDs,
529 const Teuchos::ArrayView<const local_ordinal_type> &exportLIDs,
537 const Teuchos::ArrayView<const local_ordinal_type> &permuteToLIDs,
538 const Teuchos::ArrayView<const local_ordinal_type> &permuteFromLIDs,
539 const Teuchos::ArrayView<const local_ordinal_type> &remoteLIDs,
540 const Teuchos::ArrayView<const local_ordinal_type> &exportLIDs,
547 const size_t numSameIDs,
558 const bool commOnHost);
613 const Teuchos::ArrayView<const local_ordinal_type>& permuteToLIDs,
614 const Teuchos::ArrayView<const local_ordinal_type>& permuteFromLIDs)
618 const size_t numSameIDs,
619 const Kokkos::DualView<const local_ordinal_type*, device_type>& permuteToLIDs,
620 const Kokkos::DualView<const local_ordinal_type*, device_type>& permuteFromLIDs)
647 const Teuchos::ArrayView<const local_ordinal_type>& exportLIDs,
648 Teuchos::Array<packet_type>& exports,
649 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
650 size_t& constantNumPackets,
656 const Kokkos::DualView<const local_ordinal_type*, device_type>& exportLIDs,
657 Kokkos::DualView<packet_type*, device_type>& exports,
658 const Kokkos::DualView<size_t*, device_type>& numPacketsPerLID,
659 size_t& constantNumPackets,
688 const Teuchos::ArrayView<const packet_type>& imports,
689 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
690 size_t constantNumPackets,
722 const Kokkos::DualView<const packet_type*, device_type>& imports,
723 const Kokkos::DualView<const size_t*, device_type>& numPacketsPerLID,
724 const size_t constantNumPackets,
772 Teuchos::RCP<const map_type>
map_;
781 Kokkos::DualView<packet_type*, execution_space>
imports_;
813 Kokkos::DualView<packet_type*, device_type>
exports_;
830 #ifdef HAVE_TPETRA_TRANSFER_TIMERS 832 Teuchos::RCP<Teuchos::Time> doXferTimer_;
833 Teuchos::RCP<Teuchos::Time> copyAndPermuteTimer_;
834 Teuchos::RCP<Teuchos::Time> packAndPrepareTimer_;
835 Teuchos::RCP<Teuchos::Time> doPostsAndWaitsTimer_;
836 Teuchos::RCP<Teuchos::Time> unpackAndCombineTimer_;
837 #endif // HAVE_TPETRA_TRANSFER_TIMERS 923 template<
class DistObjectType>
926 const Teuchos::RCP<
const Map<
typename DistObjectType::local_ordinal_type,
927 typename DistObjectType::global_ordinal_type,
928 typename DistObjectType::node_type> >& newMap);
966 template<
class DistObjectType>
972 #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 void createViews() const
Hook for creating a const view.
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.
Kokkos::DualView< size_t *, execution_space > numExportPacketsPerLID_
Number of packets to send for each send operation.
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 entries in this object's Map.
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 std::string description() const
One-line descriptiion of this object.
int local_ordinal_type
Default value of LocalOrdinal template parameter.
Kokkos::DualView< packet_type *, execution_space > imports_
Buffer into which packed data are imported (received from other processes).
Node::device_type device_type
The Kokkos Device type.
void print(std::ostream &os) const
Print this object to the given output stream.
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 releaseViews() const
Hook for releasing views.
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 (old version that uses Teuchos memory managem...
virtual void unpackAndCombineNew(const Kokkos::DualView< const local_ordinal_type *, device_type > &importLIDs, const Kokkos::DualView< const packet_type *, device_type > &imports, const Kokkos::DualView< const size_t *, device_type > &numPacketsPerLID, const size_t constantNumPackets, Distributor &distor, const CombineMode CM)
Perform any unpacking and combining after communication (new version that uses Kokkos data structures...
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.
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.
virtual Teuchos::RCP< const map_type > getMap() const
The Map describing the parallel distribution of this object.
Abstract base class for objects that can be the source of an Import or Export operation.
Kokkos::DualView< packet_type *, device_type > exports_
Buffer from which packed data are exported (sent to other processes).
ReverseOption
Whether the data transfer should be performed in forward or reverse mode.
DistObject(const Teuchos::RCP< const map_type > &map)
Constructor.
Kokkos::DualView< size_t *, execution_space > numImportPacketsPerLID_
Number of packets to receive for each receive operation.
virtual void createViewsNonConst(KokkosClassic::ReadWriteOption rwo)
Hook for creating a nonconst view.
Describes a parallel distribution of objects over processes.
virtual bool useNewInterface()
Whether the subclass implements the "old" or "new" (Kokkos-friendly) interface.
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.
void doExport(const SrcDistObject &source, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, CombineMode CM)
Export data into this object using an Export object ("forward mode").
bool isDistributed() const
Whether this is a globally distributed object.
Base class for distributed Tpetra objects that support data redistribution.
void reallocImportsIfNeeded(const size_t newSize, const bool debug=false)
Reallocate imports_ if needed.
virtual size_t constantNumberOfPackets() const
Whether the implementation's instance promises always to have a constant number of packets per LID (l...
void doImport(const SrcDistObject &source, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, CombineMode CM)
Import data into this object using an Import object ("forward mode").