Tpetra::CrsMatrix: Implement "DualView" (better: "dual view") semantics
Created by: mhoemmen
@trilinos/tpetra Tpetra::MultiVector already implements "dual view" semantics. We need the other modifiable Tpetra classes to implement this as well.
Tpetra::CrsMatrix needs to implement the following interface:
-
sync<MemorySpace>()
: Sync to the given memory space -
modify<MemorySpace>()
: Mark data in the given memory space as modified -
bool need_sync<MemorySpace>() const
: Do we need a sync to the given memory space? -
local_matrix_type getLocalMatrix<MemorySpace>() const
: Get the KokkosSparse::CrsMatrix living in the given memory space
Currently, getLocalMatrix
is not templated, and returns the version of the data living in Tpetra::CrsMatrix::device_type::memory_space
. Tpetra::CrsMatrix does not yet provide any of the other methods.
It does not make sense for Tpetra::CrsGraph to implement dual view semantics until that class' interface allows thread-parallel graph construction (other than by constructing a Kokkos::StaticCrsGraph in a thread-parallel way, and handing it to Tpetra::CrsGraph's constructor). Thus, this Tpetra::CrsMatrix issue only refers to the fixed graph case -- either when the matrix was created using a const graph, or after the matrix's first fillComplete
call.