42 #ifndef TPETRA_DISTOBJECT_KA_DECL_HPP 43 #define TPETRA_DISTOBJECT_KA_DECL_HPP 45 #include "Tpetra_ConfigDefs.hpp" 46 #include "Tpetra_Map.hpp" 47 #include "Tpetra_Import.hpp" 48 #include "Tpetra_Export.hpp" 50 #include <Kokkos_NodeAPIConfigDefs.hpp> 52 #if TPETRA_USE_KOKKOS_DISTOBJECT 54 #include "KokkosCompat_View.hpp" 55 #include "Kokkos_Core.hpp" 61 #ifdef HAVE_TPETRA_TRANSFER_TIMERS 62 # undef HAVE_TPETRA_TRANSFER_TIMERS 63 #endif // HAVE_TPETRA_TRANSFER_TIMERS 75 template <
class Packet,
77 class GlobalOrdinal = Details::DefaultTypes::global_ordinal_type,
80 virtual public SrcDistObject,
81 virtual public Teuchos::Describable {
90 typedef Packet packet_type;
94 typedef GlobalOrdinal global_ordinal_type;
99 typedef typename Kokkos::Compat::NodeDevice<node_type>::type execution_space;
100 typedef typename execution_space::size_type view_size_type;
107 explicit DistObjectKA (
const Teuchos::RCP<
const Map<LocalOrdinal,GlobalOrdinal,Node> >& map);
110 DistObjectKA (
const DistObjectKA<Packet,LocalOrdinal,GlobalOrdinal,Node>& rhs);
113 virtual ~DistObjectKA ();
137 doImport (
const SrcDistObject& source,
138 const Import<LocalOrdinal,GlobalOrdinal,Node>& importer,
159 doExport (
const SrcDistObject& source,
160 const Export<LocalOrdinal,GlobalOrdinal,Node>& exporter,
182 doImport (
const SrcDistObject& source,
183 const Export<LocalOrdinal,GlobalOrdinal,Node>& exporter,
205 doExport (
const SrcDistObject& source,
206 const Import<LocalOrdinal,GlobalOrdinal,Node>& importer,
218 bool isDistributed ()
const;
226 virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
227 getMap()
const {
return map_; }
237 void print (std::ostream &os)
const;
247 virtual std::string description ()
const;
255 describe (Teuchos::FancyOStream &out,
256 const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default)
const;
310 template<
class PT,
class LO,
class GO,
class NT>
313 const Teuchos::RCP<
const Map<LO, GO, NT> >& newMap);
315 template<
class PT,
class LO,
class GO,
class NT>
348 virtual size_t constantNumberOfPackets ()
const;
373 doTransfer (
const SrcDistObject& src,
376 const Teuchos::ArrayView<const LocalOrdinal> &permuteToLIDs,
377 const Teuchos::ArrayView<const LocalOrdinal> &permuteFromLIDs,
378 const Teuchos::ArrayView<const LocalOrdinal> &remoteLIDs,
379 const Teuchos::ArrayView<const LocalOrdinal> &exportLIDs,
381 ReverseOption revOp);
399 checkSizes (
const SrcDistObject& source) = 0;
420 const SrcDistObject& source,
422 const Kokkos::View<const LocalOrdinal*, execution_space> &permuteToLIDs,
423 const Kokkos::View<const LocalOrdinal*, execution_space> &permuteFromLIDs) = 0;
449 const SrcDistObject& source,
450 const Kokkos::View<const LocalOrdinal*, execution_space> &exportLIDs,
451 Kokkos::View<Packet*, execution_space> &exports,
452 const Kokkos::View<size_t*, execution_space> &numPacketsPerLID,
453 size_t& constantNumPackets,
454 Distributor &distor) = 0;
479 const Kokkos::View<const LocalOrdinal*, execution_space> &importLIDs,
480 const Kokkos::View<const Packet*, execution_space> &imports,
481 const Kokkos::View<size_t*, execution_space> &numPacketsPerLID,
482 size_t constantNumPackets,
493 virtual void createViews ()
const;
510 virtual void createViewsNonConst (KokkosClassic::ReadWriteOption rwo);
522 virtual void releaseViews ()
const;
525 Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > map_;
529 Kokkos::View<packet_type*,execution_space> imports_;
541 Kokkos::View<size_t*,execution_space> numImportPacketsPerLID_;
542 typename Kokkos::View<size_t*,execution_space>::HostMirror host_numImportPacketsPerLID_;
545 Kokkos::View<packet_type*,execution_space> exports_;
557 Kokkos::View<size_t*,execution_space> numExportPacketsPerLID_;
559 #ifdef HAVE_TPETRA_TRANSFER_TIMERS 560 Teuchos::RCP<Teuchos::Time> doXferTimer_;
561 Teuchos::RCP<Teuchos::Time> copyAndPermuteTimer_;
562 Teuchos::RCP<Teuchos::Time> packAndPrepareTimer_;
563 Teuchos::RCP<Teuchos::Time> doPostsAndWaitsTimer_;
564 Teuchos::RCP<Teuchos::Time> unpackAndCombineTimer_;
565 #endif // HAVE_TPETRA_TRANSFER_TIMERS 652 template<
class DistObjectType>
655 const Teuchos::RCP<
const Map<
typename DistObjectType::local_ordinal_type,
656 typename DistObjectType::global_ordinal_type,
657 typename DistObjectType::node_type> >& newMap);
695 template<
class DistObjectType>
Namespace Tpetra contains the class and methods constituting the Tpetra library.
KokkosClassic::DefaultNode::DefaultNodeType node_type
Default value of Node template parameter.
Abstract base class for sources of an Import or Export.
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.
int local_ordinal_type
Default value of LocalOrdinal template parameter.
CombineMode
Rule for combining data in an Import or Export.