46 #ifndef MUELU_LWGRAPH_KOKKOS_DEF_HPP 47 #define MUELU_LWGRAPH_KOKKOS_DEF_HPP 49 #include <Kokkos_Core.hpp> 51 #include <Teuchos_ArrayView.hpp> 59 template<
class LocalOrdinal,
class RowType>
60 class MaxNumRowEntriesFunctor {
62 MaxNumRowEntriesFunctor(RowType rowPointers) :
rowPointers_(rowPointers) { }
64 KOKKOS_INLINE_FUNCTION
65 void operator()(
const LocalOrdinal i,
size_t& maxLength)
const {
68 maxLength = std::max(d, maxLength);
71 KOKKOS_INLINE_FUNCTION
72 void join(
volatile size_t& dest,
const volatile size_t& src) {
73 dest = std::max(dest, src);
76 KOKKOS_INLINE_FUNCTION
77 void init(
size_t& initValue) {
87 template<
class LocalOrdinal,
class GlobalOrdinal,
class DeviceType>
88 LWGraph_kokkos<LocalOrdinal,GlobalOrdinal,Kokkos::Compat::KokkosDeviceWrapperNode<DeviceType>>::
89 LWGraph_kokkos(
const local_graph_type& graph,
90 const RCP<const map_type>& domainMap,
91 const RCP<const map_type>& rangeMap,
92 const std::string& objectLabel)
93 : graph_(graph), domainMap_(domainMap), importMap_(rangeMap), objectLabel_(objectLabel)
95 minLocalIndex_ = domainMap_->getMinLocalIndex();
96 maxLocalIndex_ = domainMap_->getMaxLocalIndex();
98 MaxNumRowEntriesFunctor<LO,typename local_graph_type::row_map_type> maxNumRowEntriesFunctor(graph_.row_map);
99 Kokkos::parallel_reduce(graph_.row_map.dimension_0(), maxNumRowEntriesFunctor, maxNumRowEntries_,
"LWGraph:LWGraph:maxnonzeros");
102 template<
class LocalOrdinal,
class GlobalOrdinal,
class DeviceType>
103 ArrayView<const LocalOrdinal>
104 LWGraph_kokkos<LocalOrdinal,GlobalOrdinal,Kokkos::Compat::KokkosDeviceWrapperNode<DeviceType>>::
105 getNeighborVertices(LocalOrdinal i)
const {
106 typename local_graph_type::row_map_type rowPointers = graph_.row_map;
108 return ArrayView<const LO>(
reinterpret_cast<const LO*
>(rowPointers.ptr_on_device()) + i, rowPointers(i+1) - rowPointers(i));
113 #endif // MUELU_LWGRAPH_KOKKOS_DEF_HPP
Namespace for MueLu classes and methods.
void parallel_reduce(const ExecPolicy &policy, const FunctorType &functor, const std::string &str="", typename Impl::enable_if< !Impl::is_integral< ExecPolicy >::value >::type *=0)