Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tpetra,Stokhos: Fix #4870 (prefer running MV norms on device) #4899

Merged
merged 3 commits into from
Apr 17, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions packages/stokhos/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,9 @@ IF (Stokhos_ENABLE_Sacado)
MatrixMatrix
TripleMatrixMultiply
)
SET(TPETRA_SD_ETI_CLASSES
Details::normImpl
)
IF(Stokhos_ENABLE_Ensemble_Scalar_Type)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/sacado/kokkos/vector/tpetra)
APPEND_GLOB(TPETRA_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/sacado/kokkos/vector/tpetra/*.hpp)
Expand All @@ -804,6 +807,15 @@ IF (Stokhos_ENABLE_Sacado)
"${STOKHOS_DEPLIBS}"
DEPLIBS_OUT)
LIST(APPEND STOKHOS_TPETRA_DEPLIBS ${DEPLIBS_OUT})
PROCESS_ENSEMBLE_ETI(
"${Stokhos_ETI_Ensemble_Sizes}"
"${TPETRA_SD_ETI_CLASSES}"
"sacado/kokkos/vector/tpetra"
"Tpetra_SD"
TRUE
"${STOKHOS_DEPLIBS}"
DEPLIBS_OUT)
LIST(APPEND STOKHOS_TPETRA_DEPLIBS ${DEPLIBS_OUT})
# TpetraExt depends on Tpetra
SET(STOKHOS_TPETRAEXT_DEPS ${STOKHOS_DEPLIBS} ${STOKHOS_TPETRA_DEPLIBS})
PROCESS_ENSEMBLE_ETI(
Expand All @@ -815,11 +827,6 @@ IF (Stokhos_ENABLE_Sacado)
"${STOKHOS_TPETRAEXT_DEPS}"
DEPLIBS_OUT)
LIST(APPEND STOKHOS_TPETRA_DEPLIBS ${DEPLIBS_OUT})

LIST(APPEND TPETRA_CPP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sacado/kokkos/vector/tpetra/Tpetra_Details_normImpl_MP_Vector_Cuda.cpp)
LIST(APPEND TPETRA_CPP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sacado/kokkos/vector/tpetra/Tpetra_Details_normImpl_MP_Vector_OpenMP.cpp)
LIST(APPEND TPETRA_CPP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sacado/kokkos/vector/tpetra/Tpetra_Details_normImpl_MP_Vector_Serial.cpp)
LIST(APPEND TPETRA_CPP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sacado/kokkos/vector/tpetra/Tpetra_Details_normImpl_MP_Vector_Threads.cpp)
ENDIF()
ENDIF()
IF(Stokhos_ENABLE_PCE_Scalar_Type)
Expand All @@ -830,7 +837,6 @@ IF (Stokhos_ENABLE_Sacado)
LIST(REMOVE_ITEM TPETRA_ETI_CLASSES CrsMatrix)
SET(EXTRA_TPETRA_ETI_CLASSES
CrsMatrix
Details::normImpl
)
PROCESS_PCE_ETI(
"${TPETRA_ETI_CLASSES}"
Expand All @@ -841,6 +847,15 @@ IF (Stokhos_ENABLE_Sacado)
"${STOKHOS_DEPLIBS}"
DEPLIBS_OUT)
LIST(APPEND STOKHOS_TPETRA_DEPLIBS ${DEPLIBS_OUT})
PROCESS_PCE_ETI(
"${TPETRA_SD_ETI_CLASSES}"
""
"sacado/kokkos/pce/tpetra"
"Tpetra_SD"
TRUE
"${STOKHOS_DEPLIBS}"
DEPLIBS_OUT)
LIST(APPEND STOKHOS_TPETRA_DEPLIBS ${DEPLIBS_OUT})
# TpetraExt depends on Tpetra
SET(STOKHOS_TPETRAEXT_DEPS ${STOKHOS_DEPLIBS} ${STOKHOS_TPETRA_DEPLIBS})
PROCESS_PCE_ETI(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,43 @@
#define INSTANTIATE_UQ_PCE_STORAGE(INSTMACRO, STORAGE, LO, GO, N) \
INSTMACRO( Sacado::UQ::PCE<STORAGE>, LO, GO, N )

#define INSTANTIATE_UQ_PCE_STORAGE_SD(INSTMACRO, STORAGE, N) \
INSTMACRO( Sacado::UQ::PCE<STORAGE>, N )

#define INSTANTIATE_UQ_PCE_DS_SLD(INSTMACRO, S, L, D, LO, GO, N) \
typedef Stokhos::DynamicStorage<L,S,D::execution_space> DS_ ## L ## _ ## S ## _ ## _ ## D; \
INSTANTIATE_UQ_PCE_STORAGE(INSTMACRO, DS_ ## L ## _ ## S ## _ ## _ ## D, LO, GO, N)

#define INSTANTIATE_UQ_PCE_DS_SLD_SD(INSTMACRO, S, L, D, N) \
typedef Stokhos::DynamicStorage<L,S,D::execution_space> DS_ ## L ## _ ## S ## _ ## _ ## D ## _2; \
INSTANTIATE_UQ_PCE_STORAGE_SD(INSTMACRO, DS_ ## L ## _ ## S ## _ ## _ ## D ## _2, N)

#define INSTANTIATE_UQ_PCE_S_D(INSTMACRO, D, LO, GO, N) \
INSTANTIATE_UQ_PCE_DS_SLD(INSTMACRO, double, int, D, LO, GO, N)

#define INSTANTIATE_UQ_PCE_S_D_SD(INSTMACRO, D, N) \
INSTANTIATE_UQ_PCE_DS_SLD_SD(INSTMACRO, double, int, D, N)

#define INSTANTIATE_UQ_PCE_S(INSTMACRO, LO, GO, N) \
typedef Stokhos::DeviceForNode2<N>::type DFN_ ## LO ## _ ## GO ## _ ## N; \
INSTANTIATE_UQ_PCE_S_D(INSTMACRO, DFN_ ## LO ## _ ## GO ## _ ## N, LO, GO, N)

#define INSTANTIATE_UQ_PCE_S_SD(INSTMACRO, N) \
typedef Stokhos::DeviceForNode2<N>::type DFN_ ## N; \
INSTANTIATE_UQ_PCE_S_D_SD(INSTMACRO, DFN_ ## N, N)

#define INSTANTIATE_UQ_PCE(INSTMACRO, LO, GO, N) \
INSTANTIATE_UQ_PCE_S(INSTMACRO, LO, GO, N)

#define INSTANTIATE_UQ_PCE_SD(INSTMACRO, N) \
INSTANTIATE_UQ_PCE_S_SD(INSTMACRO, N)

#define INSTANTIATE_TPETRA_UQ_PCE_N(INSTMACRO, N) \
INSTANTIATE_UQ_PCE_S(INSTMACRO, int, int, N)

#define INSTANTIATE_TPETRA_UQ_PCE_N_SD(INSTMACRO, N) \
INSTANTIATE_UQ_PCE_S_SD(INSTMACRO, N)

#define INSTANTIATE_TPETRA_UQ_PCE_WRAPPER_NODES(INSTMACRO) \
INSTMACRO(Kokkos_Compat_Kokkos@DEVICE@WrapperNode)

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -40,28 +40,16 @@
// @HEADER

#include "TpetraCore_config.h"
#if defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION) && defined(HAVE_TPETRA_INST_OPENMP)
#ifdef HAVE_TPETRA_EXPLICIT_INSTANTIATION

// mfh 13 Apr 2019: I can't just use Stokhos' system for Tpetra ETI,
// because that only works for Tpetra ETI macros that take four
// arguments (SCALAR, LO, GO, NODE). The macro for ETI of
// Tpetra::Details::normImpl only takes two arguments: (SCALAR, NODE).
#include "Stokhos_Tpetra_ETI_Helpers_UQ_PCE_@[email protected]"

#include "Stokhos_Tpetra_UQ_PCE.hpp"
#include "Tpetra_Details_normImpl_decl.hpp"
#include "Tpetra_Details_normImpl_def.hpp"
#include "TpetraCore_ETIHelperMacros.h"
#include "Tpetra_@[email protected]"
#include "Tpetra_@CLASS_FILE_NAME@_def.hpp"

#define TPETRA_DETAILS_NORMIMPL_INSTANT_N( NODE ) \
using scalar_type_##NODE = Sacado::UQ::PCE<Stokhos::DynamicStorage<int, double, NODE::execution_space> >; \
TPETRA_DETAILS_NORMIMPL_INSTANT( scalar_type_##NODE, NODE )
#define TPETRA_LOCAL_INST_N(N) \
INSTANTIATE_TPETRA_UQ_PCE_N_SD(TPETRA_@UPPER_CASE_CLASS@_INSTANT, N)

namespace Tpetra {
INSTANTIATE_TPETRA_UQ_PCE(TPETRA_LOCAL_INST_N)

TPETRA_ETI_MANGLING_TYPEDEFS()

TPETRA_DETAILS_NORMIMPL_INSTANT_N( Kokkos_Compat_KokkosOpenMPWrapperNode )

} // namespace Tpetra

#endif // HAVE_TPETRA_EXPLICIT_INSTANTIATION && HAVE_TPETRA_INST_OPENMP
#endif // HAVE_TPETRA_EXPLICIT_INSTANTIATION
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,43 @@
#define INSTANTIATE_MP_VECTOR_STORAGE(INSTMACRO, STORAGE, LO, GO, N) \
INSTMACRO( Sacado::MP::Vector<STORAGE>, LO, GO, N )

#define INSTANTIATE_MP_VECTOR_STORAGE_SD(INSTMACRO, STORAGE, N) \
INSTMACRO( Sacado::MP::Vector<STORAGE>, N )

#define INSTANTIATE_MP_VECTOR_SFS_SLND(INSTMACRO, S, L, NUM, D, LO, GO, N) \
typedef Stokhos::StaticFixedStorage<L,S,NUM,D::execution_space> SFS_ ## L ## _ ## S ## _ ## NUM ## _ ## D; \
INSTANTIATE_MP_VECTOR_STORAGE(INSTMACRO, SFS_ ## L ## _ ## S ## _ ## NUM ## _ ## D, LO, GO, N)

#define INSTANTIATE_MP_VECTOR_SFS_SLND_SD(INSTMACRO, S, L, NUM, D, N) \
typedef Stokhos::StaticFixedStorage<L,S,NUM,D::execution_space> SFS_ ## L ## _ ## S ## _ ## NUM ## _ ## D ## _2; \
INSTANTIATE_MP_VECTOR_STORAGE_SD(INSTMACRO, SFS_ ## L ## _ ## S ## _ ## NUM ## _ ## D ## _2, N)

#define INSTANTIATE_MP_VECTOR_SFS_SLD(INSTMACRO, S, L, D, LO, GO, N) \
INSTANTIATE_MP_VECTOR_SFS_SLND(INSTMACRO, S, L, @ENSEMBLE_SIZE@, D, LO, GO, N)

#define INSTANTIATE_MP_VECTOR_SFS_SLD_SD(INSTMACRO, S, L, D, N) \
INSTANTIATE_MP_VECTOR_SFS_SLND_SD(INSTMACRO, S, L, @ENSEMBLE_SIZE@, D, N)

#define INSTANTIATE_MP_VECTOR_S_D(INSTMACRO, D, LO, GO, N) \
INSTANTIATE_MP_VECTOR_SFS_SLD(INSTMACRO, double, int, D, LO, GO, N)

#define INSTANTIATE_MP_VECTOR_S_D_SD(INSTMACRO, D, N) \
INSTANTIATE_MP_VECTOR_SFS_SLD_SD(INSTMACRO, double, int, D, N)

#define INSTANTIATE_MP_VECTOR_S(INSTMACRO, LO, GO, N) \
typedef Stokhos::DeviceForNode<N>::type DFN_CPU_ ## LO ## _ ## GO ## _ ## N; \
INSTANTIATE_MP_VECTOR_S_D(INSTMACRO, DFN_CPU_ ## LO ## _ ## GO ## _ ## N, LO, GO, N)

#define INSTANTIATE_MP_VECTOR_S_SD(INSTMACRO, N) \
typedef Stokhos::DeviceForNode<N>::type DFN_CPU_ ## N; \
INSTANTIATE_MP_VECTOR_S_D_SD(INSTMACRO, DFN_CPU_ ## N, N)

#define INSTANTIATE_TPETRA_MP_VECTOR_WRAPPER_NODES(INSTMACRO) \
INSTANTIATE_MP_VECTOR_S(INSTMACRO, int, int, Kokkos_Compat_Kokkos@DEVICE@WrapperNode)

#define INSTANTIATE_TPETRA_MP_VECTOR_WRAPPER_NODES_SD(INSTMACRO) \
INSTANTIATE_MP_VECTOR_S_SD(INSTMACRO, Kokkos_Compat_Kokkos@DEVICE@WrapperNode)

#define INSTANTIATE_TPETRA_MP_VECTOR(INSTMACRO) \
namespace Tpetra { \
\
Expand All @@ -71,3 +91,12 @@
INSTANTIATE_TPETRA_MP_VECTOR_WRAPPER_NODES(INSTMACRO) \
\
}

#define INSTANTIATE_TPETRA_MP_VECTOR_SD(INSTMACRO) \
namespace Tpetra { \
\
TPETRA_ETI_MANGLING_TYPEDEFS() \
\
INSTANTIATE_TPETRA_MP_VECTOR_WRAPPER_NODES_SD(INSTMACRO) \
\
}
Loading