diff --git a/cmake/KokkosKernelsConfig.cmake.in b/cmake/KokkosKernelsConfig.cmake.in index 6b95ff91ae..f930dd51a0 100644 --- a/cmake/KokkosKernelsConfig.cmake.in +++ b/cmake/KokkosKernelsConfig.cmake.in @@ -9,12 +9,13 @@ include(CMakeFindDependencyMacro) find_dependency(Kokkos HINTS @Kokkos_DIR@) -SET(Kokkos_ENABLE_OPENMP @Kokkos_ENABLE_OPENMP@) -SET(Kokkos_ENABLE_CUDA @Kokkos_ENABLE_CUDA@) -SET(Kokkos_ENABLE_HIP @Kokkos_ENABLE_HIP@) -SET(Kokkos_ENABLE_SYCL @Kokkos_ENABLE_SYCL@) -SET(Kokkos_ENABLE_PTHREAD @Kokkos_ENABLE_PTHREAD@) -SET(Kokkos_ENABLE_SERIAL @Kokkos_ENABLE_SERIAL@) +SET(Kokkos_ENABLE_OPENMP @Kokkos_ENABLE_OPENMP@) +SET(Kokkos_ENABLE_OPENMPTARGET @Kokkos_ENABLE_OPENMPTARGET@) +SET(Kokkos_ENABLE_CUDA @Kokkos_ENABLE_CUDA@) +SET(Kokkos_ENABLE_HIP @Kokkos_ENABLE_HIP@) +SET(Kokkos_ENABLE_SYCL @Kokkos_ENABLE_SYCL@) +SET(Kokkos_ENABLE_PTHREAD @Kokkos_ENABLE_PTHREAD@) +SET(Kokkos_ENABLE_SERIAL @Kokkos_ENABLE_SERIAL@) INCLUDE("${KokkosKernels_CMAKE_DIR}/KokkosKernelsTargets.cmake") diff --git a/cmake/KokkosKernels_config.h.in b/cmake/KokkosKernels_config.h.in index 9326edc47a..31198cfeb9 100644 --- a/cmake/KokkosKernels_config.h.in +++ b/cmake/KokkosKernels_config.h.in @@ -41,6 +41,9 @@ #cmakedefine KOKKOSKERNELS_INST_EXECSPACE_SYCL #cmakedefine KOKKOSKERNELS_INST_MEMSPACE_SYCLSPACE #cmakedefine KOKKOSKERNELS_INST_MEMSPACE_SYCLSHAREDSPACE +/* Whether to build kernels for execution space Kokkos::Experimental::HIP */ +#cmakedefine KOKKOSKERNELS_INST_EXECSPACE_OPENMPTARGET +#cmakedefine KOKKOSKERNELS_INST_MEMSPACE_OPENMPTARGETSPACE /* Whether to build kernels for execution space Kokkos::OpenMP */ #cmakedefine KOKKOSKERNELS_INST_EXECSPACE_OPENMP /* Whether to build kernels for execution space Kokkos::Threads */ diff --git a/cmake/kokkos_backends.cmake b/cmake/kokkos_backends.cmake index eb7d8602b7..11c51eed53 100644 --- a/cmake/kokkos_backends.cmake +++ b/cmake/kokkos_backends.cmake @@ -9,9 +9,10 @@ MACRO(CHECK_KOKKOS_BACKEND BE) SET(KOKKOSKERNELS_INST_EXECSPACE_${BE}_DEFAULT ${KOKKOS_ENABLE_${BE}}) ENDMACRO(CHECK_KOKKOS_BACKEND) +CHECK_KOKKOS_BACKEND(SERIAL) +CHECK_KOKKOS_BACKEND(PTHREAD) +CHECK_KOKKOS_BACKEND(OPENMP) +CHECK_KOKKOS_BACKEND(OPENMPTARGET) CHECK_KOKKOS_BACKEND(CUDA) CHECK_KOKKOS_BACKEND(HIP) CHECK_KOKKOS_BACKEND(SYCL) -CHECK_KOKKOS_BACKEND(OPENMP) -CHECK_KOKKOS_BACKEND(PTHREAD) -CHECK_KOKKOS_BACKEND(SERIAL) diff --git a/cmake/kokkoskernels_eti_devices.cmake b/cmake/kokkoskernels_eti_devices.cmake index ad7ef15e55..81ab89508e 100644 --- a/cmake/kokkoskernels_eti_devices.cmake +++ b/cmake/kokkoskernels_eti_devices.cmake @@ -6,16 +6,18 @@ SET(EXEC_SPACES EXECSPACE_CUDA EXECSPACE_HIP EXECSPACE_SYCL + EXECSPACE_OPENMPTARGET EXECSPACE_OPENMP EXECSPACE_PTHREAD EXECSPACE_SERIAL ) -SET(EXECSPACE_CUDA_CPP_TYPE Kokkos::Cuda) -SET(EXECSPACE_HIP_CPP_TYPE Kokkos::Experimental::HIP) -SET(EXECSPACE_SYCL_CPP_TYPE Kokkos::Experimental::SYCL) -SET(EXECSPACE_OPENMP_CPP_TYPE Kokkos::OpenMP) -SET(EXECSPACE_PTHREAD_CPP_TYPE Kokkos::Threads) -SET(EXECSPACE_SERIAL_CPP_TYPE Kokkos::Serial) +SET(EXECSPACE_CUDA_CPP_TYPE Kokkos::Cuda) +SET(EXECSPACE_HIP_CPP_TYPE Kokkos::Experimental::HIP) +SET(EXECSPACE_SYCL_CPP_TYPE Kokkos::Experimental::SYCL) +SET(EXECSPACE_OPENMPTARGET_CPP_TYPE Kokkos::Experimental::OpenMPTarget) +SET(EXECSPACE_OPENMP_CPP_TYPE Kokkos::OpenMP) +SET(EXECSPACE_PTHREAD_CPP_TYPE Kokkos::Threads) +SET(EXECSPACE_SERIAL_CPP_TYPE Kokkos::Serial) SET(MEM_SPACES MEMSPACE_CUDASPACE @@ -23,16 +25,18 @@ SET(MEM_SPACES MEMSPACE_HIPSPACE MEMSPACE_SYCLSPACE MEMSPACE_SYCLSHAREDSPACE + MEMSPACE_OPENMPTARGET MEMSPACE_HOSTSPACE MEMSPACE_HBWSPACE ) -SET(MEMSPACE_CUDASPACE_CPP_TYPE Kokkos::CudaSpace) -SET(MEMSPACE_CUDAUVMSPACE_CPP_TYPE Kokkos::CudaUVMSpace) -SET(MEMSPACE_HIPSPACE_CPP_TYPE Kokkos::Experimental::HIPSpace) -SET(MEMSPACE_SYCLSPACE_CPP_TYPE Kokkos::Experimental::SYCLDeviceUSMSpace) -SET(MEMSPACE_SYCLSHAREDSPACE_CPP_TYPE Kokkos::Experimental::SYCLSharedUSMSpace) -SET(MEMSPACE_HOSTSPACE_CPP_TYPE Kokkos::HostSpace) -SET(MEMSPACE_HBWSPACE_CPP_TYPE Kokkos::HBWSpace) +SET(MEMSPACE_CUDASPACE_CPP_TYPE Kokkos::CudaSpace) +SET(MEMSPACE_CUDAUVMSPACE_CPP_TYPE Kokkos::CudaUVMSpace) +SET(MEMSPACE_HIPSPACE_CPP_TYPE Kokkos::Experimental::HIPSpace) +SET(MEMSPACE_SYCLSPACE_CPP_TYPE Kokkos::Experimental::SYCLDeviceUSMSpace) +SET(MEMSPACE_SYCLSHAREDSPACE_CPP_TYPE Kokkos::Experimental::SYCLSharedUSMSpace) +SET(MEMSPACE_OPENMPTARGETSPACE_CPP_TYPE Kokkos::Experimental::OpenMPTargetSpace) +SET(MEMSPACE_HOSTSPACE_CPP_TYPE Kokkos::HostSpace) +SET(MEMSPACE_HBWSPACE_CPP_TYPE Kokkos::HBWSpace) IF(KOKKOS_ENABLE_CUDA) KOKKOSKERNELS_ADD_OPTION( @@ -113,9 +117,31 @@ IF(KOKKOS_ENABLE_SYCL) ENDIF() IF( Trilinos_ENABLE_COMPLEX_DOUBLE AND ((NOT DEFINED CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS) OR (NOT CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS)) ) - MESSAGE( WARNING "The CMake option CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS is either undefined or OFF. Please set CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL=ON when building with SYCL and complex double enabled.") + MESSAGE( WARNING "The CMake option CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS is either undefined or OFF. Please set CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL=ON when building with SYCL and complex double enabled.") + ENDIF() +ENDIF() + +IF(KOKKOS_ENABLE_OPENMPTARGET) + KOKKOSKERNELS_ADD_OPTION( + INST_EXECSPACE_OPENMPTARGET + ${KOKKOSKERNELS_INST_EXECSPACE_OPENMPTARGET_DEFAULT} + BOOL + "Whether to pre instantiate kernels for the execution space Kokkos::Experimental::OpenMPTarget. Disabling this when Kokkos_ENABLE_OpenMPTarget is enabled may increase build times. Default: ON if Kokkos is OpenMPTarget-enabled, OFF otherwise." + ) + KOKKOSKERNELS_ADD_OPTION( + INST_MEMSPACE_OPENMPTARGETSPACE + ${KOKKOSKERNELS_INST_EXECSPACE_OPENMPTARGET_DEFAULT} + BOOL + "Whether to pre instantiate kernels for the memory space Kokkos::Experimental::OpenMPTargetSpace. Disabling this when Kokkos_ENABLE_OPENMPTARGET is enabled may increase build times. Default: ON if Kokkos is OpenMPTarget-enabled, OFF otherwise." + ) + + IF(KOKKOSKERNELS_INST_EXECSPACE_OPENMPTARGET AND KOKKOSKERNELS_INST_MEMSPACE_OPENMPTARGETSPACE) + LIST(APPEND DEVICE_LIST "") ENDIF() + IF( Trilinos_ENABLE_COMPLEX_DOUBLE AND ((NOT DEFINED CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS) OR (NOT CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS)) ) + MESSAGE( WARNING "The CMake option CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS is either undefined or OFF. Please set CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL=ON when building with OpenMPTarget and complex double enabled.") + ENDIF() ENDIF() KOKKOSKERNELS_ADD_OPTION( @@ -169,12 +195,13 @@ KOKKOSKERNELS_ADD_OPTION( "Whether to build kernels for the execution space Kokkos::Serial. If explicit template instantiation (ETI) is enabled in Trilinos, disabling this when Kokkos_ENABLE_SERIAL is enabled may increase build times. Default: ON when Kokkos is Serial-enabled, OFF otherwise." ) -SET(EXECSPACE_CUDA_VALID_MEM_SPACES CUDASPACE CUDAUVMSPACE) -SET(EXECSPACE_HIP_VALID_MEM_SPACES HIPSPACE) -SET(EXECSPACE_SYCL_VALID_MEM_SPACES SYCLSPACE SYCLSHAREDSPACE) -SET(EXECSPACE_SERIAL_VALID_MEM_SPACES HBWSPACE HOSTSPACE) -SET(EXECSPACE_OPENMP_VALID_MEM_SPACES HBWSPACE HOSTSPACE) -SET(EXECSPACE_PTHREAD_VALID_MEM_SPACES HBWSPACE HOSTSPACE) +SET(EXECSPACE_CUDA_VALID_MEM_SPACES CUDASPACE CUDAUVMSPACE) +SET(EXECSPACE_HIP_VALID_MEM_SPACES HIPSPACE) +SET(EXECSPACE_SYCL_VALID_MEM_SPACES SYCLSPACE SYCLSHAREDSPACE) +SET(EXECSPACE_OPENMPTARGET_VALID_MEM_SPACES OPENMPTARGETSPACE) +SET(EXECSPACE_SERIAL_VALID_MEM_SPACES HBWSPACE HOSTSPACE) +SET(EXECSPACE_OPENMP_VALID_MEM_SPACES HBWSPACE HOSTSPACE) +SET(EXECSPACE_PTHREAD_VALID_MEM_SPACES HBWSPACE HOSTSPACE) SET(DEVICES) FOREACH(EXEC ${EXEC_SPACES}) IF (KOKKOSKERNELS_INST_${EXEC}) diff --git a/perf_test/blas/blas/KokkosBlas_trtri_perf_test.hpp b/perf_test/blas/blas/KokkosBlas_trtri_perf_test.hpp index d60f15b92b..3dcf156bf8 100644 --- a/perf_test/blas/blas/KokkosBlas_trtri_perf_test.hpp +++ b/perf_test/blas/blas/KokkosBlas_trtri_perf_test.hpp @@ -191,7 +191,9 @@ static void __print_trtri_perf_test_options(options_t options) { template void __do_trtri_serial_blas(options_t options, trtri_args_t trtri_args) { // Need to take subviews on the device -#if !defined(KOKKOS_ENABLE_CUDA) +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) uint32_t warm_up_n = options.warm_up_n; uint32_t n = options.n; Kokkos::Timer timer; @@ -221,7 +223,7 @@ void __do_trtri_serial_blas(options_t options, trtri_args_t trtri_args) { __trtri_output_csv_row(options, trtri_args, timer.seconds()); #else std::cerr << std::string(__func__) - << " disabled since KOKKOS_ENABLE_CUDA is defined." << std::endl; + << " disabled since KOKKOS_ENABLE_DEVICE is defined." << std::endl; #endif // !KOKKOS_ENABLE_CUDA return; } @@ -230,7 +232,9 @@ template void __do_trtri_serial_batched_template(options_t options, trtri_args_t trtri_args) { // Need to take subviews on the device -#if !defined(KOKKOS_ENABLE_CUDA) +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) uint32_t warm_up_n = options.warm_up_n; uint32_t n = options.n; Kokkos::Timer timer; @@ -259,7 +263,7 @@ void __do_trtri_serial_batched_template(options_t options, __trtri_output_csv_row(options, trtri_args, timer.seconds()); #else std::cerr << std::string(__func__) - << " disabled since KOKKOS_ENABLE_CUDA is defined." << std::endl; + << " disabled since KOKKOS_ENABLE_DEVICE is defined." << std::endl; #endif // !KOKKOS_ENABLE_CUDA } @@ -292,7 +296,9 @@ void __do_trtri_serial_batched(options_t options, trtri_args_t trtri_args) { return; } -#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) template struct parallel_blas_trtri { trtri_args_t trtri_args_; @@ -306,11 +312,13 @@ struct parallel_blas_trtri { KokkosBlas::trtri(&trtri_args_.uplo, &trtri_args_.diag, svA); } }; -#endif // !KOKKOS_ENABLE_CUDA && !KOKKOS_ENABLE_HIP +#endif // !KOKKOS_ENABLE_CUDA && !KOKKOS_ENABLE_HIP && !KOKKOS_ENABLE_OPENMPTARGET template void __do_trtri_parallel_blas(options_t options, trtri_args_t trtri_args) { -#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) uint32_t warm_up_n = options.warm_up_n; uint32_t n = options.n; Kokkos::Timer timer; @@ -339,9 +347,9 @@ void __do_trtri_parallel_blas(options_t options, trtri_args_t trtri_args) { __trtri_output_csv_row(options, trtri_args, timer.seconds()); #else std::cerr << std::string(__func__) - << " disabled since KOKKOS_ENABLE_CUDA and/or KOKKOS_ENABLE_HIP is defined." << std::endl; + << " disabled since KOKKOS_ENABLE_CUDA, KOKKOS_ENABLE_HIP or KOKKOS_ENABLE_OPENMPTARGET is defined." << std::endl; __trtri_output_csv_row(options, trtri_args, -1); -#endif // !KOKKOS_ENABLE_CUDA && !KOKKOS_ENABLE_HIP +#endif // !KOKKOS_ENABLE_CUDA && !KOKKOS_ENABLE_HIP && !defined(KOKKOS_ENABLE_OPENMPTARGET) return; } diff --git a/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp b/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp index de2bbd9ce9..a9b76af1e0 100644 --- a/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp +++ b/perf_test/blas/blas3/KokkosBlas3_trmm_perf_test.hpp @@ -215,7 +215,9 @@ static void __print_trmm_perf_test_options(options_t options) { template void __do_trmm_serial_blas(options_t options, trmm_args_t trmm_args) { // Need to take subviews on the device -#if !defined(KOKKOS_ENABLE_CUDA) +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) uint32_t warm_up_n = options.warm_up_n; uint32_t n = options.n; Kokkos::Timer timer; @@ -249,8 +251,8 @@ void __do_trmm_serial_blas(options_t options, trmm_args_t trmm_args) { __trmm_output_csv_row(options, trmm_args, timer.seconds()); #else std::cerr << std::string(__func__) - << " disabled since KOKKOS_ENABLE_CUDA is defined." << std::endl; -#endif // !KOKKOS_ENABLE_CUDA + << " disabled since KOKKOS_ENABLE_CUDA or KOKKOS_ENABLE_OPENMPTARGET is defined." << std::endl; +#endif // !KOKKOS_ENABLE_CUDA && !KOKKOS_ENABLE_OPENMPTARGET return; } @@ -258,7 +260,9 @@ template void __do_trmm_serial_batched_template(options_t options, trmm_args_t trmm_args) { // Need to take subviews on the device -#if !defined(KOKKOS_ENABLE_CUDA) +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) uint32_t warm_up_n = options.warm_up_n; uint32_t n = options.n; Kokkos::Timer timer; @@ -289,8 +293,8 @@ void __do_trmm_serial_batched_template(options_t options, __trmm_output_csv_row(options, trmm_args, timer.seconds()); #else std::cerr << std::string(__func__) - << " disabled since KOKKOS_ENABLE_CUDA is defined." << std::endl; -#endif // !KOKKOS_ENABLE_CUDA + << " disabled since KOKKOS_ENABLE_CUDA or KOKKOS_ENABLE_OPENMPTARGET is defined." << std::endl; +#endif // !KOKKOS_ENABLE_CUDA && !KOKKOS_ENABLE_OPENMPTARGET } template @@ -390,7 +394,9 @@ void __do_trmm_serial_batched(options_t options, trmm_args_t trmm_args) { return; } -#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) template struct parallel_blas_trmm { trmm_args_t trmm_args_; @@ -406,12 +412,14 @@ struct parallel_blas_trmm { &trmm_args_.diag, trmm_args_.alpha, svA, svB); } }; -#endif // !KOKKOS_ENABLE_CUDA +#endif // !KOKKOSKERNELS_ENABLE_DEVICE template void __do_trmm_parallel_blas(options_t options, trmm_args_t trmm_args) { -// TODO: Note why this is disabled on CUDA and HIP -#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) +// TODO: Note why this is disabled on CUDA, OPENMPTARGET and HIP +#if !defined(KOKKOS_ENABLE_CUDA) \ + && !defined(KOKKOS_ENABLE_HIP) \ + && !defined(KOKKOS_ENABLE_OPENMPTARGET) uint32_t warm_up_n = options.warm_up_n; uint32_t n = options.n; Kokkos::Timer timer; @@ -442,11 +450,11 @@ void __do_trmm_parallel_blas(options_t options, trmm_args_t trmm_args) { __trmm_output_csv_row(options, trmm_args, timer.seconds()); #else std::cerr << std::string(__func__) - << " disabled since KOKKOS_ENABLE_CUDA and/or KOKKOS_ENABLE_HIP is " - "defined." + << " disabled since KOKKOS_ENABLE_CUDA, KOKKOS_ENABLE_HIP " + "or KOKKOS_ENABLE_OPENMPTARGET is defined." << std::endl; __trmm_output_csv_row(options, trmm_args, -1); -#endif // !KOKKOS_ENABLE_CUDA +#endif // !KOKKOS_ENABLE_DEVICE return; } diff --git a/src/common/KokkosKernels_default_types.hpp b/src/common/KokkosKernels_default_types.hpp index 0b8724b794..4ceff74e00 100644 --- a/src/common/KokkosKernels_default_types.hpp +++ b/src/common/KokkosKernels_default_types.hpp @@ -49,47 +49,49 @@ #include //for all the ETI #cmakedefine macros #if defined(KOKKOSKERNELS_INST_ORDINAL_INT) - typedef int default_lno_t; + using default_lno_t = int; #elif defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T) - typedef int64_t default_lno_t; + using default_lno_t = int64_t; #else #error "Expect INT and/or INT64_T to be enabled as ORDINAL (lno_t) types" #endif //Prefer int as the default offset type, because cuSPARSE doesn't support size_t for rowptrs. #if defined(KOKKOSKERNELS_INST_OFFSET_INT) - typedef int default_size_type; + using default_size_type = int; #elif defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T) - typedef size_t default_size_type; + using default_size_type = size_t; #else #error "Expect SIZE_T and/or INT to be enabled as OFFSET (size_type) types" #endif #if defined(KOKKOSKERNELS_INST_LAYOUTLEFT) - typedef Kokkos::LayoutLeft default_layout; + using default_layout = Kokkos::LayoutLeft; #elif defined(KOKKOSKERNELS_INST_LAYOUTRIGHT) - typedef Kokkos::LayoutRight default_layout; + using default_layout = Kokkos::LayoutRight; #else #error "Expect LAYOUTLEFT and/or LAYOUTRIGHT to be enabled as layout types" #endif #if defined(KOKKOSKERNELS_INST_DOUBLE) - typedef double default_scalar; + using default_scalar = double; #elif defined(KOKKOSKERNELS_INST_FLOAT) - typedef float default_scalar; + using default_scalar = float; #else #error "Expect at least one real-valued scalar type (double or float) to be enabled" #endif #if defined(KOKKOS_ENABLE_CUDA) - typedef Kokkos::Cuda default_device; + using default_device = Kokkos::Cuda; #elif defined(KOKKOS_ENABLE_HIP) - typedef Kokkos::Experimental::HIP default_device; + using default_device = Kokkos::Experimental::HIP; +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) + using default_device = Kokkos::Experimental::OpenMPTarget; #elif defined(KOKKOS_ENABLE_OPENMP) - typedef Kokkos::OpenMP default_device; + using default_device = Kokkos::OpenMP; #elif defined(KOKKOS_ENABLE_PTHREAD) || defined(KOKKOS_ENABLE_THREADS) - typedef Kokkos::Threads default_device; + using default_device = Kokkos::Threads; #else - typedef Kokkos::Serial default_device; + using default_device = Kokkos::Serial; #endif #endif // KOKKOSKERNELS_DEFAULT_TYPES_H diff --git a/unit_test/CMakeLists.txt b/unit_test/CMakeLists.txt index ef13b0dd38..553f1231a1 100644 --- a/unit_test/CMakeLists.txt +++ b/unit_test/CMakeLists.txt @@ -132,6 +132,51 @@ IF (KOKKOS_ENABLE_HIP) ) ENDIF () +IF (KOKKOS_ENABLE_OPENMPTARGET) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/openmp_target) + KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/openmptarget) + + KOKKOSKERNELS_ADD_UNIT_TEST( + blas_openmptarget + SOURCES + Test_Main.cpp + openmptarget/Test_OpenMPTarget_Blas.cpp + COMPONENTS blas + ) + + # KOKKOSKERNELS_ADD_UNIT_TEST( + # batched_dla_openmptarget + # SOURCES + # Test_Main.cpp + # openmptarget/Test_OpenMPTarget_Batched.cpp + # COMPONENTS batched + # ) + + # KOKKOSKERNELS_ADD_UNIT_TEST( + # sparse_openmptarget + # SOURCES + # Test_Main.cpp + # openmptarget/Test_OpenMPTarget_Sparse.cpp + # COMPONENTS sparse + # ) + + KOKKOSKERNELS_ADD_UNIT_TEST( + graph_openmptarget + SOURCES + Test_Main.cpp + openmptarget/Test_OpenMPTarget_Graph.cpp + COMPONENTS graph + ) + + # KOKKOSKERNELS_ADD_UNIT_TEST( + # common_openmptarget + # SOURCES + # Test_Main.cpp + # openmptarget/Test_OpenMPTarget_Common.cpp + # COMPONENTS common + # ) +ENDIF () + IF (KOKKOS_ENABLE_OPENMP) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/openmp) KOKKOSKERNELS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/openmp) diff --git a/unit_test/batched/Test_Batched_VectorArithmatic.hpp b/unit_test/batched/Test_Batched_VectorArithmatic.hpp index 03c444ee7c..b57decf2a9 100644 --- a/unit_test/batched/Test_Batched_VectorArithmatic.hpp +++ b/unit_test/batched/Test_Batched_VectorArithmatic.hpp @@ -6,7 +6,8 @@ // to ensure it is not included in these // backends unit-test -#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) +#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) \ + && !defined(TEST_OPENMPTARGET_BATCHED_CPP) #include "gtest/gtest.h" #include "Kokkos_Core.hpp" @@ -308,4 +309,4 @@ TEST_F( TestCategory, batched_vector_dcomplex_real_imag_value4 ) { #endif #undef __DO_NOT_TEST__ -#endif // check on TEST_CUDA_BATCHED_CPP and TEST_HIP_BATCHED_CPP +#endif // check to not include this in a device test diff --git a/unit_test/batched/Test_Batched_VectorLogical.hpp b/unit_test/batched/Test_Batched_VectorLogical.hpp index 1288b7e389..5aa9a1edf9 100644 --- a/unit_test/batched/Test_Batched_VectorLogical.hpp +++ b/unit_test/batched/Test_Batched_VectorLogical.hpp @@ -6,7 +6,8 @@ // to ensure it is not included in these // backends unit-test -#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) +#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) \ + && !defined(TEST_OPENMPTARGET_BATCHED_CPP) #include "gtest/gtest.h" #include "Kokkos_Core.hpp" @@ -131,4 +132,4 @@ TEST_F( TestCategory, batched_vector_logical_simd_double4 ) { // } // #endif -#endif // check on TEST_CUDA_BATCHED_CPP and TEST_HIP_BATCHED_CPP +#endif // check to not include this in a device test diff --git a/unit_test/batched/Test_Batched_VectorMath.hpp b/unit_test/batched/Test_Batched_VectorMath.hpp index 4742f869ab..a9f24b2333 100644 --- a/unit_test/batched/Test_Batched_VectorMath.hpp +++ b/unit_test/batched/Test_Batched_VectorMath.hpp @@ -6,7 +6,8 @@ // to ensure it is not included in these // backends unit-test -#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) +#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) \ + && !defined(TEST_OPENMPTARGET_BATCHED_CPP) #include "gtest/gtest.h" #include "Kokkos_Core.hpp" @@ -178,4 +179,4 @@ TEST_F( TestCategory, batched_vector_math_simd_double4 ) { // } // #endif -#endif // check on TEST_CUDA_BATCHED_CPP and TEST_HIP_BATCHED_CPP +#endif // check to not include this in a device test diff --git a/unit_test/batched/Test_Batched_VectorMisc.hpp b/unit_test/batched/Test_Batched_VectorMisc.hpp index 74bebeaed7..0c366104f4 100644 --- a/unit_test/batched/Test_Batched_VectorMisc.hpp +++ b/unit_test/batched/Test_Batched_VectorMisc.hpp @@ -6,7 +6,8 @@ // to ensure it is not included in these // backends unit-test -#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) +#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) \ + && !defined(TEST_OPENMPTARGET_BATCHED_CPP) #include "gtest/gtest.h" #include "Kokkos_Core.hpp" @@ -183,4 +184,4 @@ TEST_F( TestCategory, batched_vector_misc_simd_double4 ) { // } // #endif -#endif // check on TEST_CUDA_BATCHED_CPP and TEST_HIP_BATCHED_CPP +#endif // check to not include this in a device test diff --git a/unit_test/batched/Test_Batched_VectorRelation.hpp b/unit_test/batched/Test_Batched_VectorRelation.hpp index 733782e7fa..8b23d3b93e 100644 --- a/unit_test/batched/Test_Batched_VectorRelation.hpp +++ b/unit_test/batched/Test_Batched_VectorRelation.hpp @@ -6,7 +6,8 @@ // to ensure it is not included in these // backends unit-test -#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) +#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) \ + && !defined(TEST_OPENMPTARGET_BATCHED_CPP) #include "gtest/gtest.h" #include "Kokkos_Core.hpp" @@ -140,4 +141,4 @@ TEST_F( TestCategory, batched_vector_relation_simd_double4 ) { // } // #endif -#endif // check on TEST_CUDA_BATCHED_CPP and TEST_HIP_BATCHED_CPP +#endif // check to not include this in a device test diff --git a/unit_test/batched/Test_Batched_VectorView.hpp b/unit_test/batched/Test_Batched_VectorView.hpp index e153597310..fb9b2d20be 100644 --- a/unit_test/batched/Test_Batched_VectorView.hpp +++ b/unit_test/batched/Test_Batched_VectorView.hpp @@ -6,7 +6,8 @@ // to ensure it is not included in these // backends unit-test -#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) +#if !defined(TEST_CUDA_BATCHED_CPP) && !defined(TEST_HIP_BATCHED_CPP) \ + && !defined(TEST_OPENMPTARGET_BATCHED_CPP) #include "gtest/gtest.h" #include "Kokkos_Core.hpp" @@ -249,4 +250,4 @@ TEST_F( TestCategory, batched_vector_view_simd_dcomplex4 ) { } #endif -#endif // check on TEST_CUDA_BATCHED_CPP and TEST_HIP_BATCHED_CPP +#endif // check to not include this in a device test diff --git a/unit_test/openmptarget/Test_OpenMPTarget.hpp b/unit_test/openmptarget/Test_OpenMPTarget.hpp new file mode 100644 index 0000000000..fcd41552b4 --- /dev/null +++ b/unit_test/openmptarget/Test_OpenMPTarget.hpp @@ -0,0 +1,26 @@ +#ifndef TEST_OPENMPTARGET_HPP +#define TEST_OPENMPTARGET_HPP + +#include +#include +#include + +#if defined(KOKKOSKERNELS_TEST_ETI_ONLY) && !defined(KOKKOSKERNELS_ETI_ONLY) +#define KOKKOSKERNELS_ETI_ONLY +#endif + +class openmptarget : public ::testing::Test { +protected: + static void SetUpTestCase() + { + } + + static void TearDownTestCase() + { + } +}; + +#define TestCategory openmptarget +#define TestExecSpace Kokkos::Experimental::OpenMPTarget + +#endif // TEST_OPENMPTARGET_HPP diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Batched.cpp b/unit_test/openmptarget/Test_OpenMPTarget_Batched.cpp new file mode 100644 index 0000000000..09ab866f11 --- /dev/null +++ b/unit_test/openmptarget/Test_OpenMPTarget_Batched.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_OPENMPTARGET_BATCHED_CPP +#define TEST_OPENMPTARGET_BATCHED_CPP + +#include "Test_OpenMPTarget.hpp" +#include "Test_Batched.hpp" + +#endif // TEST_OPENMPTARGET_BATCHED_CPP diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Blas.cpp b/unit_test/openmptarget/Test_OpenMPTarget_Blas.cpp new file mode 100644 index 0000000000..3309b180e4 --- /dev/null +++ b/unit_test/openmptarget/Test_OpenMPTarget_Blas.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_OPENMPTARGET_BLAS_CPP +#define TEST_OPENMPTARGET_BLAS_CPP + +#include "Test_OpenMPTarget.hpp" +#include "Test_Blas.hpp" + +#endif // TEST_OPENMPTARGET_BLAS_CPP diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Common.cpp b/unit_test/openmptarget/Test_OpenMPTarget_Common.cpp new file mode 100644 index 0000000000..9db895b058 --- /dev/null +++ b/unit_test/openmptarget/Test_OpenMPTarget_Common.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_OPENMPTARGET_COMMON_CPP +#define TEST_OPENMPTARGET_COMMON_CPP + +#include "Test_OpenMPTarget.hpp" +#include "Test_Common.hpp" + +#endif // TEST_OPENMPTARGET_COMMON_CPP diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Graph.cpp b/unit_test/openmptarget/Test_OpenMPTarget_Graph.cpp new file mode 100644 index 0000000000..26fbeb9db7 --- /dev/null +++ b/unit_test/openmptarget/Test_OpenMPTarget_Graph.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_OPENMPTARGET_GRAPH_CPP +#define TEST_OPENMPTARGET_GRAPH_CPP + +#include "Test_OpenMPTarget.hpp" +#include "Test_Graph.hpp" + +#endif // TEST_OPENMPTARGET_GRAPH_CPP diff --git a/unit_test/openmptarget/Test_OpenMPTarget_Sparse.cpp b/unit_test/openmptarget/Test_OpenMPTarget_Sparse.cpp new file mode 100644 index 0000000000..ef13be4d28 --- /dev/null +++ b/unit_test/openmptarget/Test_OpenMPTarget_Sparse.cpp @@ -0,0 +1,7 @@ +#ifndef TEST_OPENMPTARGET_SPARSE_CPP +#define TEST_OPENMPTARGET_SPARSE_CPP + +#include "Test_OpenMPTarget.hpp" +#include "Test_Sparse.hpp" + +#endif // TEST_OPENMPTARGET_SPARSE_CPP