32 using mv_scalar_type =
33 typename LocalOperator<MultiVectorScalar, Device>::scalar_type;
34 using matrix_scalar_type =
35 typename LocalOperator<MatrixScalar, Device>::scalar_type;
37 typename LocalOperator<MultiVectorScalar, Device>::array_layout;
39 typename LocalOperator<MultiVectorScalar, Device>::device_type;
42 using execution_space =
typename Device::execution_space;
45 using local_matrix_device_type =
46 KokkosSparse::CrsMatrix<matrix_scalar_type,
54 using local_cusparse_matrix_type =
55 KokkosSparse::CrsMatrix<matrix_scalar_type,
60 using local_graph_device_type =
typename local_matrix_device_type::StaticCrsGraphType;
63 using ordinal_view_type =
typename local_graph_device_type::entries_type::non_const_type;
78 apply(Kokkos::View<
const mv_scalar_type**, array_layout,
79 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
81 Kokkos::View<mv_scalar_type**, array_layout,
82 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
84 const Teuchos::ETransp
mode,
85 const mv_scalar_type
alpha,
86 const mv_scalar_type
beta)
const override;
99 Kokkos::View<
const mv_scalar_type**, array_layout,
100 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
102 Kokkos::View<mv_scalar_type**, array_layout,
103 device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
105 const Teuchos::ETransp
mode,
106 const mv_scalar_type
alpha,
107 const mv_scalar_type
beta)
const;
109 bool hasTransposeApply()
const override;
111 const local_matrix_device_type& getLocalMatrixDevice()
const;
114 std::shared_ptr<local_matrix_device_type> A_;
115 local_cusparse_matrix_type A_cusparse;
116 const bool have_A_cusparse;
void apply(Kokkos::View< const mv_scalar_type **, array_layout, device_type, Kokkos::MemoryTraits< Kokkos::Unmanaged > > X, Kokkos::View< mv_scalar_type **, array_layout, device_type, Kokkos::MemoryTraits< Kokkos::Unmanaged > > Y, const Teuchos::ETransp mode, const mv_scalar_type alpha, const mv_scalar_type beta) const override
Compute Y := beta*Y + alpha*Op(A)*X.
void applyImbalancedRows(Kokkos::View< const mv_scalar_type **, array_layout, device_type, Kokkos::MemoryTraits< Kokkos::Unmanaged > > X, Kokkos::View< mv_scalar_type **, array_layout, device_type, Kokkos::MemoryTraits< Kokkos::Unmanaged > > Y, const Teuchos::ETransp mode, const mv_scalar_type alpha, const mv_scalar_type beta) const
Compute Y := beta*Y + alpha*Op(A)*X, with a hint to use an SPMV algorithm for imbalanced rows.