diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..45ed7cd4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +Exercises/dep +*.o +*.host +*.cuda +KokkosCore_config.h +KokkosCore_config.tmp +*.a + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..e00c197b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorials) + +# These directories follow IntroFull order of introduction + +add_subdirectory(Exercises/01) +add_subdirectory(Exercises/02) +add_subdirectory(Exercises/03) +add_subdirectory(Exercises/04) + +add_subdirectory(Exercises/dualview) +add_subdirectory(Exercises/mdrange) +add_subdirectory(Exercises/subview) +add_subdirectory(Exercises/scatter_view) +add_subdirectory(Exercises/team_policy) +add_subdirectory(Exercises/team_vector_loop) +add_subdirectory(Exercises/team_scratch_memory) +add_subdirectory(Exercises/simd) +# FIXME update the code +# add_subdirectory(Exercises/simd_warp) + +add_subdirectory(Exercises/advanced_reductions) +add_subdirectory(Exercises/instances) +add_subdirectory(Exercises/multi_gpu_cuda) +add_subdirectory(Exercises/parallel_scan) +add_subdirectory(Exercises/random_number) +add_subdirectory(Exercises/tools_minimd) +add_subdirectory(Exercises/unique_token) +add_subdirectory(Exercises/unordered_map) +add_subdirectory(Exercises/virtualfunction) + +# Not done yet +# TODO, require Kokkos Kernels +# add_subdirectory(Exercises/kokkoskernels) +# require remote spaces +# add_subdirectory(Exercises/vectorshift) diff --git a/Exercises/01/Begin/CMakeLists.txt b/Exercises/01/Begin/CMakeLists.txt index 9181d277..2c1955e7 100644 --- a/Exercises/01/Begin/CMakeLists.txt +++ b/Exercises/01/Begin/CMakeLists.txt @@ -1,7 +1,10 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial01) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +KokkosTutorials_WarnGPU() add_executable(01_Exercise exercise_1_begin.cpp) target_link_libraries(01_Exercise Kokkos::kokkos) - diff --git a/Exercises/01/CMakeLists.txt b/Exercises/01/CMakeLists.txt new file mode 100644 index 00000000..0768411c --- /dev/null +++ b/Exercises/01/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorial01) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/01/Solution/CMakeLists.txt b/Exercises/01/Solution/CMakeLists.txt index 7493cfd5..b7284372 100644 --- a/Exercises/01/Solution/CMakeLists.txt +++ b/Exercises/01/Solution/CMakeLists.txt @@ -1,8 +1,10 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial01) -include(../../common.cmake) -add_executable(01_Exercise exercise_1_solution.cpp) -target_link_libraries(01_Exercise Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +KokkosTutorials_WarnGPU() +add_executable(01_Solution exercise_1_solution.cpp) +target_link_libraries(01_Solution Kokkos::kokkos) diff --git a/Exercises/02/Begin/CMakeLists.txt b/Exercises/02/Begin/CMakeLists.txt index d7c83abf..b644ccaf 100644 --- a/Exercises/02/Begin/CMakeLists.txt +++ b/Exercises/02/Begin/CMakeLists.txt @@ -1,8 +1,10 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial02) -include(../../common.cmake) -add_executable(02_Exercise exercise_2_begin.cpp) -target_link_libraries(02_Exercise Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +KokkosTutorials_WarnGPU() +add_executable(02_Exercise exercise_2_begin.cpp) +target_link_libraries(02_Exercise Kokkos::kokkos) diff --git a/Exercises/02/CMakeLists.txt b/Exercises/02/CMakeLists.txt new file mode 100644 index 00000000..557bb89a --- /dev/null +++ b/Exercises/02/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorial02) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/02/Solution/CMakeLists.txt b/Exercises/02/Solution/CMakeLists.txt index 940870cd..1e0beeba 100644 --- a/Exercises/02/Solution/CMakeLists.txt +++ b/Exercises/02/Solution/CMakeLists.txt @@ -1,8 +1,10 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial02) -include(../../common.cmake) -add_executable(02_Exercise exercise_2_solution.cpp) -target_link_libraries(02_Exercise Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +KokkosTutorials_WarnGPU() +add_executable(02_Solution exercise_2_solution.cpp) +target_link_libraries(02_Solution Kokkos::kokkos) diff --git a/Exercises/03/Begin/CMakeLists.txt b/Exercises/03/Begin/CMakeLists.txt index f65fe9f8..6b6f174b 100644 --- a/Exercises/03/Begin/CMakeLists.txt +++ b/Exercises/03/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial03) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(03_Exercise exercise_3_begin.cpp) target_link_libraries(03_Exercise Kokkos::kokkos) - - diff --git a/Exercises/03/CMakeLists.txt b/Exercises/03/CMakeLists.txt new file mode 100644 index 00000000..40f48f58 --- /dev/null +++ b/Exercises/03/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorial03) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/03/Solution/CMakeLists.txt b/Exercises/03/Solution/CMakeLists.txt index 16890057..4b31b52d 100644 --- a/Exercises/03/Solution/CMakeLists.txt +++ b/Exercises/03/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial03) -include(../../common.cmake) - -add_executable(03_Exercise exercise_3_solution.cpp) -target_link_libraries(03_Exercise Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(03_Solution exercise_3_solution.cpp) +target_link_libraries(03_Solution Kokkos::kokkos) diff --git a/Exercises/04/Begin/CMakeLists.txt b/Exercises/04/Begin/CMakeLists.txt index e391e636..b3d0199a 100644 --- a/Exercises/04/Begin/CMakeLists.txt +++ b/Exercises/04/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial04) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(04_Exercise exercise_4_begin.cpp) target_link_libraries(04_Exercise Kokkos::kokkos) - - diff --git a/Exercises/04/CMakeLists.txt b/Exercises/04/CMakeLists.txt new file mode 100644 index 00000000..26a0a17f --- /dev/null +++ b/Exercises/04/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorial04) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/04/Solution/CMakeLists.txt b/Exercises/04/Solution/CMakeLists.txt index cfea54b0..b714305b 100644 --- a/Exercises/04/Solution/CMakeLists.txt +++ b/Exercises/04/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorial04) -include(../../common.cmake) - -add_executable(04_Exercise exercise_4_solution.cpp) -target_link_libraries(04_Exercise Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(04_Solution exercise_4_solution.cpp) +target_link_libraries(04_Solution Kokkos::kokkos) diff --git a/Exercises/SetUpKokkos.cmake b/Exercises/SetUpKokkos.cmake new file mode 100644 index 00000000..7f936782 --- /dev/null +++ b/Exercises/SetUpKokkos.cmake @@ -0,0 +1,51 @@ +# Convenience macro to warn the user if a GPU backend is enabled +macro(KokkosTutorials_WarnGPU) + if (Kokkos_ENABLE_CUDA OR Kokkos_ENABLE_HIP OR Kokkos_ENABLE_SYCL OR Kokkos_ENABLE_OPENMPTARGET OR Kokkos_ENABLE_HPX) + message(WARNING "cmake" + "a Kokkos accelerator backend is enabled, it might cause issue with the current program" + "Please recompile with only a host backend enabled (e.g. -DKokkos_ENABLE_OPENMP=ON)") + endif () +endmacro() + +# Early return if Kokkos is already set up +# We do not use Kokkos_FOUND as it is not globally defined +if (TARGET Kokkos::kokkos) + return() +endif () + +if (NOT CMAKE_BUILD_TYPE) + set(default_build_type "RelWithDebInfo") + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING + "Choose the type of build, options are: Debug, Release, RelWithDebInfo and MinSizeRel." + FORCE) +endif () + +# Where to find Kokkos' source code. This might be set by the user. +# In order to automatically share the download between exercises when they are compiled individually, +# the default directory is inside the source tree. +# This might break if the default in source directory is called from multiple cmake instances at the same time. + +set(KokkosTutorials_KOKKOS_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/dep/kokkos" CACHE PATH "Where Kokkos sources are located") + +find_package(Kokkos QUIET) + +if (Kokkos_FOUND) + message(STATUS "Found Kokkos: ${Kokkos_DIR} (version \"${Kokkos_VERSION}\")") +else () + if (EXISTS ${KokkosTutorials_KOKKOS_SOURCE_DIR}) + message(STATUS "Using Kokkos from ${KokkosTutorials_KOKKOS_SOURCE_DIR}") + add_subdirectory(${KokkosTutorials_KOKKOS_SOURCE_DIR} Kokkos) + else () + message(STATUS "Downloading Kokkos to ${KokkosTutorials_KOKKOS_SOURCE_DIR}") + include(FetchContent) + FetchContent_Declare( + Kokkos + URL https://github.com/kokkos/kokkos/releases/download/4.6.02/kokkos-4.6.02.tar.gz + URL_HASH SHA256=baf1ebbe67abe2bbb8bb6aed81b4247d53ae98ab8475e516d9c87e87fa2422ce + SOURCE_DIR ${KokkosTutorials_KOKKOS_SOURCE_DIR} + DOWNLOAD_EXTRACT_TIMESTAMP ON + ) + FetchContent_MakeAvailable(Kokkos) + endif () +endif () diff --git a/Exercises/advanced_reductions/Begin/CMakeLists.txt b/Exercises/advanced_reductions/Begin/CMakeLists.txt index 51527870..5ed570eb 100644 --- a/Exercises/advanced_reductions/Begin/CMakeLists.txt +++ b/Exercises/advanced_reductions/Begin/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 3.16) -project(KokkosTutorial01) -include(../../common.cmake) +project(KokkosTutorialAdvancedReductions) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(AdvancedReductions advanced_reductions.cpp) target_link_libraries(AdvancedReductions Kokkos::kokkos) - diff --git a/Exercises/advanced_reductions/Begin/advanced_reductions.cpp b/Exercises/advanced_reductions/Begin/advanced_reductions.cpp index ef9943ca..d5c66460 100644 --- a/Exercises/advanced_reductions/Begin/advanced_reductions.cpp +++ b/Exercises/advanced_reductions/Begin/advanced_reductions.cpp @@ -40,7 +40,8 @@ int main(int argc, char *argv[]) { n, KOKKOS_LAMBDA(int i) { view(i) = 1 + i / 10.; }); double result; - Kokkos::parallel_reduce(n, GeometricMean{view}, result); + // EXERCISE uncomment the following line when GeometricMean is implemented + // Kokkos::parallel_reduce(n, GeometricMean{view}, result); auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace{}, view); diff --git a/Exercises/advanced_reductions/CMakeLists.txt b/Exercises/advanced_reductions/CMakeLists.txt new file mode 100644 index 00000000..92d62f93 --- /dev/null +++ b/Exercises/advanced_reductions/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialAdvancedReductions) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/advanced_reductions/Solution/CMakeLists.txt b/Exercises/advanced_reductions/Solution/CMakeLists.txt index 51527870..3082148f 100644 --- a/Exercises/advanced_reductions/Solution/CMakeLists.txt +++ b/Exercises/advanced_reductions/Solution/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 3.16) -project(KokkosTutorial01) -include(../../common.cmake) +project(KokkosTutorialAdvancedReductions) -add_executable(AdvancedReductions advanced_reductions.cpp) -target_link_libraries(AdvancedReductions Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(AdvancedReductions_Solution advanced_reductions.cpp) +target_link_libraries(AdvancedReductions_Solution Kokkos::kokkos) diff --git a/Exercises/common.cmake b/Exercises/common.cmake deleted file mode 100644 index b648a210..00000000 --- a/Exercises/common.cmake +++ /dev/null @@ -1,27 +0,0 @@ -if(NOT CMAKE_BUILD_TYPE) - set(default_build_type "RelWithDebInfo") - message(STATUS "Setting build type to '${default_build_type}' as none was specified.") - set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING - "Choose the type of build, options are: Debug, Release, RelWithDebInfo and MinSizeRel." - FORCE) -endif() - -set(Kokkos_COMMON_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../dep/Kokkos) - -find_package(Kokkos CONFIG) -if(Kokkos_FOUND) - message(STATUS "Found Kokkos: ${Kokkos_DIR} (version \"${Kokkos_VERSION}\")") -else() - if(EXISTS ${Kokkos_COMMON_SOURCE_DIR}) - add_subdirectory(${Kokkos_COMMON_SOURCE_DIR} Kokkos) - else() - include(FetchContent) - FetchContent_Declare( - Kokkos - GIT_REPOSITORY https://github.com/kokkos/kokkos.git - GIT_TAG 4.5.01 - SOURCE_DIR ${Kokkos_COMMON_SOURCE_DIR} - ) - FetchContent_MakeAvailable(Kokkos) - endif() -endif() diff --git a/Exercises/dualview/Begin/CMakeLists.txt b/Exercises/dualview/Begin/CMakeLists.txt index 56688fb3..5b73704d 100644 --- a/Exercises/dualview/Begin/CMakeLists.txt +++ b/Exercises/dualview/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialDualView) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(dualview dual_view_exercise.cpp) target_link_libraries(dualview Kokkos::kokkos) - - diff --git a/Exercises/dualview/CMakeLists.txt b/Exercises/dualview/CMakeLists.txt new file mode 100644 index 00000000..da22cd69 --- /dev/null +++ b/Exercises/dualview/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialDualView) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/dualview/Solution/CMakeLists.txt b/Exercises/dualview/Solution/CMakeLists.txt index 56688fb3..621514e8 100644 --- a/Exercises/dualview/Solution/CMakeLists.txt +++ b/Exercises/dualview/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialDualView) -include(../../common.cmake) - -add_executable(dualview dual_view_exercise.cpp) -target_link_libraries(dualview Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(dualview_Solution dual_view_exercise.cpp) +target_link_libraries(dualview_Solution Kokkos::kokkos) diff --git a/Exercises/instances/Begin/CMakeLists.txt b/Exercises/instances/Begin/CMakeLists.txt new file mode 100644 index 00000000..25157210 --- /dev/null +++ b/Exercises/instances/Begin/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialInstances) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +add_executable(Instances_exercise instances_begin.cpp) +target_link_libraries(Instances_exercise Kokkos::kokkos) diff --git a/Exercises/instances/Begin/instances_begin.cpp b/Exercises/instances/Begin/instances_begin.cpp index 1510ef1c..da43dcdd 100644 --- a/Exercises/instances/Begin/instances_begin.cpp +++ b/Exercises/instances/Begin/instances_begin.cpp @@ -137,4 +137,3 @@ int main( int argc, char* argv[] ) return 0; } - diff --git a/Exercises/instances/CMakeLists.txt b/Exercises/instances/CMakeLists.txt index f02f488e..a74722aa 100644 --- a/Exercises/instances/CMakeLists.txt +++ b/Exercises/instances/CMakeLists.txt @@ -1 +1,5 @@ -#Todo: Add CMake build +cmake_minimum_required(VERSION 3.16) +project(KokkosInstances) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/instances/Solution/CMakeLists.txt b/Exercises/instances/Solution/CMakeLists.txt new file mode 100644 index 00000000..731780cb --- /dev/null +++ b/Exercises/instances/Solution/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialInstances) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +add_executable(Instances_solution instances_solution.cpp) +target_link_libraries(Instances_solution Kokkos::kokkos) diff --git a/Exercises/instances/Solution/instances_solution.cpp b/Exercises/instances/Solution/instances_solution.cpp index b6111043..04fcc057 100644 --- a/Exercises/instances/Solution/instances_solution.cpp +++ b/Exercises/instances/Solution/instances_solution.cpp @@ -126,4 +126,3 @@ int main( int argc, char* argv[] ) return 0; } - diff --git a/Exercises/mdrange/Begin/CMakeLists.txt b/Exercises/mdrange/Begin/CMakeLists.txt index 7a959829..f84586dd 100644 --- a/Exercises/mdrange/Begin/CMakeLists.txt +++ b/Exercises/mdrange/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialMdRange) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(mdrange_exercise exercise_mdrange_begin.cpp) target_link_libraries(mdrange_exercise Kokkos::kokkos) - - diff --git a/Exercises/mdrange/CMakeLists.txt b/Exercises/mdrange/CMakeLists.txt new file mode 100644 index 00000000..53a9db19 --- /dev/null +++ b/Exercises/mdrange/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialMDRange) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/mdrange/Solution/CMakeLists.txt b/Exercises/mdrange/Solution/CMakeLists.txt index 75262d21..9687ada7 100644 --- a/Exercises/mdrange/Solution/CMakeLists.txt +++ b/Exercises/mdrange/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialMdRange) -include(../../common.cmake) - -add_executable(mdrange_exercise exercise_mdrange_solution.cpp) -target_link_libraries(mdrange_exercise Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(mdrange_Solution exercise_mdrange_solution.cpp) +target_link_libraries(mdrange_Solution Kokkos::kokkos) diff --git a/Exercises/mpi_exch/CMakeLists.txt b/Exercises/mpi_exch/CMakeLists.txt index 2d25a70a..eb5be6ec 100755 --- a/Exercises/mpi_exch/CMakeLists.txt +++ b/Exercises/mpi_exch/CMakeLists.txt @@ -1,7 +1,9 @@ cmake_minimum_required(VERSION 3.16) project(mpi_exch) -find_package(Kokkos REQUIRED) +# Add a custom module path for find_package(Kokkos) +include(../SetUpKokkos.cmake) + find_package(MPI REQUIRED) add_executable(mpi_exch mpi_exch.cpp) diff --git a/Exercises/mpi_heat_conduction/Solution/CMakeLists.txt b/Exercises/mpi_heat_conduction/Solution/CMakeLists.txt index 7e3645c4..9b8eaa8c 100755 --- a/Exercises/mpi_heat_conduction/Solution/CMakeLists.txt +++ b/Exercises/mpi_heat_conduction/Solution/CMakeLists.txt @@ -1,7 +1,9 @@ cmake_minimum_required(VERSION 3.16) project(heat3d) -find_package(Kokkos REQUIRED) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + find_package(MPI REQUIRED) add_executable(heat3d mpi_heat_conduction_solution.cpp) diff --git a/Exercises/mpi_pack_unpack/Begin/CMakeLists.txt b/Exercises/mpi_pack_unpack/Begin/CMakeLists.txt index 997a34a8..33198dfb 100644 --- a/Exercises/mpi_pack_unpack/Begin/CMakeLists.txt +++ b/Exercises/mpi_pack_unpack/Begin/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialMPIPackUnpack) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(MPIPackUnpack mpi_pack_unpack_begin.cpp) target_link_libraries(MPIPackUnpack Kokkos::kokkos) diff --git a/Exercises/mpi_pack_unpack/Solution/CMakeLists.txt b/Exercises/mpi_pack_unpack/Solution/CMakeLists.txt index d5296d06..f73da47b 100644 --- a/Exercises/mpi_pack_unpack/Solution/CMakeLists.txt +++ b/Exercises/mpi_pack_unpack/Solution/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialMPIPackUnpack) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(MPIPackUnpack mpi_pack_unpack_solution.cpp) target_link_libraries(MPIPackUnpack Kokkos::kokkos) diff --git a/Exercises/multi_gpu_cuda/Begin/CMakeLists.txt b/Exercises/multi_gpu_cuda/Begin/CMakeLists.txt index fa346abe..54c0037e 100644 --- a/Exercises/multi_gpu_cuda/Begin/CMakeLists.txt +++ b/Exercises/multi_gpu_cuda/Begin/CMakeLists.txt @@ -1,7 +1,13 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialMultiGpuCuda) -include(../../common.cmake) - -add_executable(ExerciseMultiGPU multi_gpu_cuda.cpp) -target_link_libraries(ExerciseMultiGPU Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +if (NOT Kokkos_ENABLE_CUDA) + message(WARNING "This example requires CUDA, enable with -DKokkos_ENABLE_CUDA=ON") + return() +endif() + +add_executable(MultiGPU_exercise multi_gpu_cuda.cpp) +target_link_libraries(MultiGPU_exercise Kokkos::kokkos) diff --git a/Exercises/multi_gpu_cuda/CMakeLists.txt b/Exercises/multi_gpu_cuda/CMakeLists.txt new file mode 100644 index 00000000..154ee8b1 --- /dev/null +++ b/Exercises/multi_gpu_cuda/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialMultiGPUCuda) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/multi_gpu_cuda/Solution/CMakeLists.txt b/Exercises/multi_gpu_cuda/Solution/CMakeLists.txt index 99ffce5a..ad8fe5e7 100644 --- a/Exercises/multi_gpu_cuda/Solution/CMakeLists.txt +++ b/Exercises/multi_gpu_cuda/Solution/CMakeLists.txt @@ -1,7 +1,13 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialMultiGpuCuda) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +if (NOT Kokkos_ENABLE_CUDA) + message(WARNING "This example requires CUDA, enable with -DKokkos_ENABLE_CUDA=ON") + return() +endif() add_executable(ExerciseMultiGPU multi_gpu_cuda.cpp) target_link_libraries(ExerciseMultiGPU Kokkos::kokkos) - diff --git a/Exercises/parallel_scan/Begin/CMakeLists.txt b/Exercises/parallel_scan/Begin/CMakeLists.txt index 43c86bd2..812feba4 100644 --- a/Exercises/parallel_scan/Begin/CMakeLists.txt +++ b/Exercises/parallel_scan/Begin/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 3.16) -project(KokkosTutorial01) -include(../../common.cmake) +project(KokkosTutorialParallelScan) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(ParallelScan parallel_scan.cpp) target_link_libraries(ParallelScan Kokkos::kokkos) - diff --git a/Exercises/parallel_scan/Begin/parallel_scan.cpp b/Exercises/parallel_scan/Begin/parallel_scan.cpp index 8cef5fad..9eb7e056 100644 --- a/Exercises/parallel_scan/Begin/parallel_scan.cpp +++ b/Exercises/parallel_scan/Begin/parallel_scan.cpp @@ -27,7 +27,8 @@ int main(int argc, char *argv[]) { int n = 10; Kokkos::View view("view", n); - Kokkos::parallel_scan(n, Factorial{view}); + // EXERCISE Uncomment when Factorial is implemented + // Kokkos::parallel_scan(n, Factorial{view}); auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace{}, view); diff --git a/Exercises/parallel_scan/CMakeLists.txt b/Exercises/parallel_scan/CMakeLists.txt new file mode 100644 index 00000000..09a316ce --- /dev/null +++ b/Exercises/parallel_scan/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialParallelScan) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/parallel_scan/Solution/CMakeLists.txt b/Exercises/parallel_scan/Solution/CMakeLists.txt index 43c86bd2..c9d3dae4 100644 --- a/Exercises/parallel_scan/Solution/CMakeLists.txt +++ b/Exercises/parallel_scan/Solution/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 3.16) -project(KokkosTutorial01) -include(../../common.cmake) +project(KokkosTutorialParallelScan) -add_executable(ParallelScan parallel_scan.cpp) -target_link_libraries(ParallelScan Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(ParallelScan_Solution parallel_scan.cpp) +target_link_libraries(ParallelScan_Solution Kokkos::kokkos) diff --git a/Exercises/random_number/Begin/CMakeLists.txt b/Exercises/random_number/Begin/CMakeLists.txt index 8115ede2..0c6a4c75 100644 --- a/Exercises/random_number/Begin/CMakeLists.txt +++ b/Exercises/random_number/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialRNG) -include(../../common.cmake) - -add_executable(MC_DartSampler MC_DartSampler.cpp) -target_link_libraries(MC_DartSampler Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(random_number_exercise MC_DartSampler.cpp) +target_link_libraries(random_number_exercise Kokkos::kokkos) diff --git a/Exercises/random_number/CMakeLists.txt b/Exercises/random_number/CMakeLists.txt new file mode 100644 index 00000000..7b5acdb5 --- /dev/null +++ b/Exercises/random_number/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialRNG) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/random_number/Solution/CMakeLists.txt b/Exercises/random_number/Solution/CMakeLists.txt index 8115ede2..3750bd8a 100644 --- a/Exercises/random_number/Solution/CMakeLists.txt +++ b/Exercises/random_number/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialRNG) -include(../../common.cmake) - -add_executable(MC_DartSampler MC_DartSampler.cpp) -target_link_libraries(MC_DartSampler Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(random_number_solution MC_DartSampler.cpp) +target_link_libraries(random_number_solution Kokkos::kokkos) diff --git a/Exercises/scatter_view/Begin/CMakeLists.txt b/Exercises/scatter_view/Begin/CMakeLists.txt index 152e6c3c..f5d4ca30 100644 --- a/Exercises/scatter_view/Begin/CMakeLists.txt +++ b/Exercises/scatter_view/Begin/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialScatterView) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(scatterview scatter_view.cpp) target_link_libraries(scatterview Kokkos::kokkos) diff --git a/Exercises/scatter_view/CMakeLists.txt b/Exercises/scatter_view/CMakeLists.txt new file mode 100644 index 00000000..0d7b8549 --- /dev/null +++ b/Exercises/scatter_view/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialScatterView) + +add_subdirectory(Begin) +add_subdirectory(Solution) +add_subdirectory(Usage) diff --git a/Exercises/scatter_view/Solution/CMakeLists.txt b/Exercises/scatter_view/Solution/CMakeLists.txt index 97610b91..3ac54e5d 100644 --- a/Exercises/scatter_view/Solution/CMakeLists.txt +++ b/Exercises/scatter_view/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialScatterView) -include(../../common.cmake) - -add_executable(scatterview scatter_view.cpp) -target_link_libraries(scatterview Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(scatterview_Solution scatter_view.cpp) +target_link_libraries(scatterview_Solution Kokkos::kokkos) diff --git a/Exercises/scatter_view/Usage/CMakeLists.txt b/Exercises/scatter_view/Usage/CMakeLists.txt new file mode 100644 index 00000000..124196ed --- /dev/null +++ b/Exercises/scatter_view/Usage/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialScatterView) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +add_executable(scatterview_usage usage.cpp) +target_link_libraries(scatterview_usage Kokkos::kokkos) diff --git a/Exercises/simd/Begin/CMakeLists.txt b/Exercises/simd/Begin/CMakeLists.txt index ba471215..9974c453 100644 --- a/Exercises/simd/Begin/CMakeLists.txt +++ b/Exercises/simd/Begin/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialSIMD) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(SIMD simd_begin.cpp) target_link_libraries(SIMD Kokkos::kokkos) diff --git a/Exercises/simd/CMakeLists.txt b/Exercises/simd/CMakeLists.txt new file mode 100644 index 00000000..fe1d67c9 --- /dev/null +++ b/Exercises/simd/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialSIMD) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/simd/Solution/CMakeLists.txt b/Exercises/simd/Solution/CMakeLists.txt index 580f4633..892c5a8a 100644 --- a/Exercises/simd/Solution/CMakeLists.txt +++ b/Exercises/simd/Solution/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialSIMD) -include(../../common.cmake) -add_executable(SIMD simd_solution.cpp) -target_link_libraries(SIMD Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +add_executable(SIMD_Solution simd_solution.cpp) +target_link_libraries(SIMD_Solution Kokkos::kokkos) diff --git a/Exercises/simd_warp/Begin/CMakeLists.txt b/Exercises/simd_warp/Begin/CMakeLists.txt index 83dcecbe..6d90c712 100644 --- a/Exercises/simd_warp/Begin/CMakeLists.txt +++ b/Exercises/simd_warp/Begin/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialSIMDWarp) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(SIMDWarp simd_warp_begin.cpp) target_link_libraries(SIMDWarp Kokkos::kokkos) diff --git a/Exercises/simd_warp/CMakeLists.txt b/Exercises/simd_warp/CMakeLists.txt new file mode 100644 index 00000000..5d41647c --- /dev/null +++ b/Exercises/simd_warp/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialSIMDWARP) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/simd_warp/Solution/CMakeLists.txt b/Exercises/simd_warp/Solution/CMakeLists.txt index 80cc6654..9d551cd4 100644 --- a/Exercises/simd_warp/Solution/CMakeLists.txt +++ b/Exercises/simd_warp/Solution/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialSIMDWarp) -include(../../common.cmake) -add_executable(SIMDWarp simd_warp_solution.cpp) -target_link_libraries(SIMDWarp Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) + +add_executable(SIMDWarp_Solution simd_warp_solution.cpp) +target_link_libraries(SIMDWarp_Solution Kokkos::kokkos) diff --git a/Exercises/subview/Begin/CMakeLists.txt b/Exercises/subview/Begin/CMakeLists.txt index 56198faa..7f0bd7a7 100644 --- a/Exercises/subview/Begin/CMakeLists.txt +++ b/Exercises/subview/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialSubview) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(subview_exercise exercise_subview_begin.cpp) target_link_libraries(subview_exercise Kokkos::kokkos) - - diff --git a/Exercises/subview/Begin/exercise_subview_begin.cpp b/Exercises/subview/Begin/exercise_subview_begin.cpp index 935c9770..fc2d774f 100644 --- a/Exercises/subview/Begin/exercise_subview_begin.cpp +++ b/Exercises/subview/Begin/exercise_subview_begin.cpp @@ -71,15 +71,19 @@ int main( int argc, char* argv[] ) Kokkos::initialize( argc, argv ); { + using ExecSpace = Kokkos::DefaultExecutionSpace; // using ExecSpace = Kokkos::Serial; // using ExecSpace = Kokkos::Threads; // using ExecSpace = Kokkos::OpenMP; - using ExecSpace = Kokkos::Cuda; + // using ExecSpace = Kokkos::Cuda; + // using ExecSpace = Kokkos::HIP; + using MemSpace = Kokkos::DefaultExecutionSpace::memory_space; // using MemSpace = Kokkos::HostSpace; // using MemSpace = Kokkos::OpenMP; - using MemSpace = Kokkos::CudaSpace; + // using MemSpace = Kokkos::CudaSpace; // using MemSpace = Kokkos::CudaUVMSpace; + // using MemSpace = Kokkos::HIPSpace; using Layout = Kokkos::LayoutLeft; // using Layout = Kokkos::LayoutRight; diff --git a/Exercises/subview/CMakeLists.txt b/Exercises/subview/CMakeLists.txt new file mode 100644 index 00000000..403a7cd1 --- /dev/null +++ b/Exercises/subview/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialSubview) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/subview/Solution/CMakeLists.txt b/Exercises/subview/Solution/CMakeLists.txt index 7dcbd6bb..bcd499d8 100644 --- a/Exercises/subview/Solution/CMakeLists.txt +++ b/Exercises/subview/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialSubview) -include(../../common.cmake) - -add_executable(subview_exercise exercise_subview_solution.cpp) -target_link_libraries(subview_exercise Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(subview_Solution exercise_subview_solution.cpp) +target_link_libraries(subview_Solution Kokkos::kokkos) diff --git a/Exercises/subview/Solution/exercise_subview_solution.cpp b/Exercises/subview/Solution/exercise_subview_solution.cpp index 80372f08..2808c29c 100644 --- a/Exercises/subview/Solution/exercise_subview_solution.cpp +++ b/Exercises/subview/Solution/exercise_subview_solution.cpp @@ -65,14 +65,16 @@ int main( int argc, char* argv[] ) Kokkos::initialize( argc, argv ); { + using ExecSpace = Kokkos::DefaultExecutionSpace; // using ExecSpace = Kokkos::Serial; // using ExecSpace = Kokkos::Threads; - using ExecSpace = Kokkos::OpenMP; + // using ExecSpace = Kokkos::OpenMP; // using ExecSpace = Kokkos::Cuda; // using ExecSpace = Kokkos::HIP; + using MemSpace = Kokkos::DefaultExecutionSpace::memory_space; // using MemSpace = Kokkos::HostSpace; - using MemSpace = Kokkos::OpenMP; + // using MemSpace = Kokkos::OpenMP; // using MemSpace = Kokkos::CudaSpace; // using MemSpace = Kokkos::CudaUVMSpace; // using MemSpace = Kokkos::HIPSpace; diff --git a/Exercises/team_policy/Begin/CMakeLists.txt b/Exercises/team_policy/Begin/CMakeLists.txt index 96647790..68db5016 100644 --- a/Exercises/team_policy/Begin/CMakeLists.txt +++ b/Exercises/team_policy/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialTeamPolicy) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(TeamPolicy team_policy_begin.cpp) target_link_libraries(TeamPolicy Kokkos::kokkos) - - diff --git a/Exercises/team_policy/CMakeLists.txt b/Exercises/team_policy/CMakeLists.txt new file mode 100644 index 00000000..8ddf29eb --- /dev/null +++ b/Exercises/team_policy/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialTeamPolicy) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/team_policy/Solution/CMakeLists.txt b/Exercises/team_policy/Solution/CMakeLists.txt index 37563f53..14ea9f18 100644 --- a/Exercises/team_policy/Solution/CMakeLists.txt +++ b/Exercises/team_policy/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialTeamPolicy) -include(../../common.cmake) - -add_executable(TeamPolicy team_policy_solution.cpp) -target_link_libraries(TeamPolicy Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(TeamPolicy_Solution team_policy_solution.cpp) +target_link_libraries(TeamPolicy_Solution Kokkos::kokkos) diff --git a/Exercises/team_scratch_memory/Begin/CMakeLists.txt b/Exercises/team_scratch_memory/Begin/CMakeLists.txt index b9dbe069..ebefee7a 100644 --- a/Exercises/team_scratch_memory/Begin/CMakeLists.txt +++ b/Exercises/team_scratch_memory/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialTeamScratchMemory) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(TeamScratchMemory team_scratch_memory_begin.cpp) target_link_libraries(TeamScratchMemory Kokkos::kokkos) - - diff --git a/Exercises/team_scratch_memory/CMakeLists.txt b/Exercises/team_scratch_memory/CMakeLists.txt new file mode 100644 index 00000000..a31685f2 --- /dev/null +++ b/Exercises/team_scratch_memory/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialTeamScratchMemory) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/team_scratch_memory/Solution/CMakeLists.txt b/Exercises/team_scratch_memory/Solution/CMakeLists.txt index b38ec15a..4a9def20 100644 --- a/Exercises/team_scratch_memory/Solution/CMakeLists.txt +++ b/Exercises/team_scratch_memory/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialTeamScratchMemory) -include(../../common.cmake) - -add_executable(TeamScratchMemory team_scratch_memory_solution.cpp) -target_link_libraries(TeamScratchMemory Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(TeamScratchMemory_Solution team_scratch_memory_solution.cpp) +target_link_libraries(TeamScratchMemory_Solution Kokkos::kokkos) diff --git a/Exercises/team_vector_loop/Begin/CMakeLists.txt b/Exercises/team_vector_loop/Begin/CMakeLists.txt index ffe63b4e..9998b394 100644 --- a/Exercises/team_vector_loop/Begin/CMakeLists.txt +++ b/Exercises/team_vector_loop/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialTeamVectorLoop) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(TeamVectorLoop team_vector_loop_begin.cpp) target_link_libraries(TeamVectorLoop Kokkos::kokkos) - - diff --git a/Exercises/team_vector_loop/CMakeLists.txt b/Exercises/team_vector_loop/CMakeLists.txt new file mode 100644 index 00000000..6ad47343 --- /dev/null +++ b/Exercises/team_vector_loop/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialTeamVectorLoop) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/team_vector_loop/Solution/CMakeLists.txt b/Exercises/team_vector_loop/Solution/CMakeLists.txt index 9543c837..9cde8392 100644 --- a/Exercises/team_vector_loop/Solution/CMakeLists.txt +++ b/Exercises/team_vector_loop/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialTeamVectorLoop) -include(../../common.cmake) - -add_executable(TeamVectorLoop team_vector_loop_solution.cpp) -target_link_libraries(TeamVectorLoop Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(TeamVectorLoop_Solution team_vector_loop_solution.cpp) +target_link_libraries(TeamVectorLoop_Solution Kokkos::kokkos) diff --git a/Exercises/tools_minimd/CMakeLists.txt b/Exercises/tools_minimd/CMakeLists.txt index 83db376e..32d82284 100644 --- a/Exercises/tools_minimd/CMakeLists.txt +++ b/Exercises/tools_minimd/CMakeLists.txt @@ -1,36 +1,38 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialTools) -include(../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../SetUpKokkos.cmake) option(ENABLE_MPI OFF "Whether to enable the Message Passing Interface (MPI)") -if(ENABLE_MPI) - find_package(MPI REQUIRED) -else() - add_library(mpi_stubs MPI-Stubs/mpi.c) - target_include_directories(mpi_stubs PUBLIC MPI-Stubs) -endif() +if (ENABLE_MPI) + find_package(MPI REQUIRED) +else () + add_library(mpi_stubs MPI-Stubs/mpi.c) + target_include_directories(mpi_stubs PUBLIC MPI-Stubs) +endif () add_executable(miniMD - atom.cpp - comm.cpp - force_eam.cpp - force_lj.cpp - input.cpp - integrate.cpp - ljs.cpp - neighbor.cpp - output.cpp - setup.cpp - thermo.cpp - timer.cpp + atom.cpp + comm.cpp + force_eam.cpp + force_lj.cpp + input.cpp + integrate.cpp + ljs.cpp + neighbor.cpp + output.cpp + setup.cpp + thermo.cpp + timer.cpp ) target_link_libraries(miniMD Kokkos::kokkos) -if(ENABLE_MPI) - target_link_libraries(miniMD MPI::MPI_CXX) -else() - target_link_libraries(miniMD mpi_stubs) -endif() +if (ENABLE_MPI) + target_link_libraries(miniMD MPI::MPI_CXX) +else () + target_link_libraries(miniMD mpi_stubs) +endif () diff --git a/Exercises/unique_token/Begin/CMakeLists.txt b/Exercises/unique_token/Begin/CMakeLists.txt index f8f18460..93b2205e 100644 --- a/Exercises/unique_token/Begin/CMakeLists.txt +++ b/Exercises/unique_token/Begin/CMakeLists.txt @@ -1,8 +1,13 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialUniqueToken) -include(../../common.cmake) -add_executable(uniquetoken unique_token.cpp) -target_link_libraries(uniquetoken Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +if (NOT Kokkos_ENABLE_OPENMP) + message(WARNING "This exercise requires OpenMP, enable with -DKokkos_ENABLE_OPENMP=ON") + return() +endif() +add_executable(uniquetoken_exercise unique_token.cpp) +target_link_libraries(uniquetoken_exercise Kokkos::kokkos) diff --git a/Exercises/unique_token/CMakeLists.txt b/Exercises/unique_token/CMakeLists.txt new file mode 100644 index 00000000..f29238ed --- /dev/null +++ b/Exercises/unique_token/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialUniqueToken) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/unique_token/Solution/CMakeLists.txt b/Exercises/unique_token/Solution/CMakeLists.txt index f8f18460..fd7696aa 100644 --- a/Exercises/unique_token/Solution/CMakeLists.txt +++ b/Exercises/unique_token/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialUniqueToken) -include(../../common.cmake) - -add_executable(uniquetoken unique_token.cpp) -target_link_libraries(uniquetoken Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(uniquetoken_solution unique_token.cpp) +target_link_libraries(uniquetoken_solution Kokkos::kokkos) diff --git a/Exercises/unique_token/Solution/unique_token.cpp b/Exercises/unique_token/Solution/unique_token.cpp index b13db287..d25c52a7 100644 --- a/Exercises/unique_token/Solution/unique_token.cpp +++ b/Exercises/unique_token/Solution/unique_token.cpp @@ -1,4 +1,5 @@ -#include +#include +#include using atomic_2d_view = Kokkos::View >; diff --git a/Exercises/unordered_map/Begin/CMakeLists.txt b/Exercises/unordered_map/Begin/CMakeLists.txt index 0788b5a0..b7c749f2 100644 --- a/Exercises/unordered_map/Begin/CMakeLists.txt +++ b/Exercises/unordered_map/Begin/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialUnorderedMap) -include(../../common.cmake) - -add_executable(unordered_map unordered_map.cpp) -target_link_libraries(unordered_map Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(unordered_map_exercise unordered_map.cpp) +target_link_libraries(unordered_map_exercise Kokkos::kokkos) diff --git a/Exercises/unordered_map/CMakeLists.txt b/Exercises/unordered_map/CMakeLists.txt new file mode 100644 index 00000000..2f9a2bb1 --- /dev/null +++ b/Exercises/unordered_map/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialUnorderedMap) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/unordered_map/Solution/CMakeLists.txt b/Exercises/unordered_map/Solution/CMakeLists.txt index 0788b5a0..a417766d 100644 --- a/Exercises/unordered_map/Solution/CMakeLists.txt +++ b/Exercises/unordered_map/Solution/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialUnorderedMap) -include(../../common.cmake) - -add_executable(unordered_map unordered_map.cpp) -target_link_libraries(unordered_map Kokkos::kokkos) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(unordered_map_solution unordered_map.cpp) +target_link_libraries(unordered_map_solution Kokkos::kokkos) diff --git a/Exercises/virtualfunction/Begin/CMakeLists.txt b/Exercises/virtualfunction/Begin/CMakeLists.txt index 1a934426..f62e9416 100644 --- a/Exercises/virtualfunction/Begin/CMakeLists.txt +++ b/Exercises/virtualfunction/Begin/CMakeLists.txt @@ -1,9 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialVirtualFunction) -include(../../common.cmake) + +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) add_executable(virtual_function virtual_function.cpp classes.cpp) target_link_libraries(virtual_function Kokkos::kokkos) -target_include_directories(virtual_function PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) - - diff --git a/Exercises/virtualfunction/Begin/classes.cpp b/Exercises/virtualfunction/Begin/classes.cpp index 1b9d7cb3..bf5212cd 100644 --- a/Exercises/virtualfunction/Begin/classes.cpp +++ b/Exercises/virtualfunction/Begin/classes.cpp @@ -1,4 +1,4 @@ -#include +#include "classes.hpp" KOKKOS_FUNCTION Foo::Foo() { diff --git a/Exercises/virtualfunction/Begin/virtual_function.cpp b/Exercises/virtualfunction/Begin/virtual_function.cpp index 4ec7a531..73624aa7 100644 --- a/Exercises/virtualfunction/Begin/virtual_function.cpp +++ b/Exercises/virtualfunction/Begin/virtual_function.cpp @@ -1,4 +1,4 @@ -#include +#include "classes.hpp" // Exercise // 1. Launch a parallel kernel an use placement new to create virtual objects on diff --git a/Exercises/virtualfunction/CMakeLists.txt b/Exercises/virtualfunction/CMakeLists.txt new file mode 100644 index 00000000..e7ceb40c --- /dev/null +++ b/Exercises/virtualfunction/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.16) +project(KokkosTutorialVirtualFunction) + +add_subdirectory(Begin) +add_subdirectory(Solution) diff --git a/Exercises/virtualfunction/Solution/CMakeLists.txt b/Exercises/virtualfunction/Solution/CMakeLists.txt index 1a934426..640da0fb 100644 --- a/Exercises/virtualfunction/Solution/CMakeLists.txt +++ b/Exercises/virtualfunction/Solution/CMakeLists.txt @@ -1,9 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(KokkosTutorialVirtualFunction) -include(../../common.cmake) - -add_executable(virtual_function virtual_function.cpp classes.cpp) -target_link_libraries(virtual_function Kokkos::kokkos) -target_include_directories(virtual_function PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +# Add a custom module path for find_package(Kokkos) +include(../../SetUpKokkos.cmake) +add_executable(virtual_function_solution virtual_function.cpp classes.cpp) +target_link_libraries(virtual_function_solution Kokkos::kokkos) diff --git a/Exercises/virtualfunction/Solution/classes.cpp b/Exercises/virtualfunction/Solution/classes.cpp index 1b9d7cb3..bf5212cd 100644 --- a/Exercises/virtualfunction/Solution/classes.cpp +++ b/Exercises/virtualfunction/Solution/classes.cpp @@ -1,4 +1,4 @@ -#include +#include "classes.hpp" KOKKOS_FUNCTION Foo::Foo() { diff --git a/Exercises/virtualfunction/Solution/virtual_function.cpp b/Exercises/virtualfunction/Solution/virtual_function.cpp index a16e0cf7..0db73bb6 100644 --- a/Exercises/virtualfunction/Solution/virtual_function.cpp +++ b/Exercises/virtualfunction/Solution/virtual_function.cpp @@ -1,4 +1,4 @@ -#include +#include "classes.hpp" int main(int argc, char* argv[]) { Kokkos::initialize(argc,argv); diff --git a/README.md b/README.md index 0d88b6c9..6e225cb5 100644 --- a/README.md +++ b/README.md @@ -27,20 +27,22 @@ Tutorials in the **Intro-Full** directory cover # Building the Tutorials -All the tutorial folders can be built using CMake. +All the tutorials are built using CMake. -## CMake +## CMake Quickstart -CMake can build against an installed Kokkos library or download one automatically using `FetchContent`. - -Without any Kokkos already installed, from an exercise directory, one can run the following: +From the top level directory or from any exercise directory, you can build the tutorials using CMake: ```shell -cmake -B build_dir # -DKokkos_* options +cmake -B build_dir cmake --build build_dir ``` -Kokkos options are described in [CMake options](https://kokkos.org/kokkos-core-wiki/keywords.html). +Additional options can be passed to CMake to configure the build, such as the backend to use, the architecture to target, etc. + +## Examples + +Here are some examples of building the exercises with CMake: For example, OpenMP CPU exercises can be built as: ```shell @@ -61,6 +63,39 @@ cmake -B build_cuda -DKokkos_ENABLE_CUDA=ON cmake --build build_cuda ``` +For an AMD GPU with autodetection of the GPU architecture: + +```shell +cmake -B build_hip -DKokkos_ENABLE_HIP=ON +cmake --build build_hip +``` + +Kokkos setup is covered by the [quickstart guide](https://kokkos.org/kokkos-core-wiki/get-started/quick-start.html) and an exhaustive list of Kokkos options is detailed in the [CMake keywords documentation](https://kokkos.org/kokkos-core-wiki/get-started/configuration-guide.html). + +## Advanced CMake Usage + +CMake can build against an existing Kokkos installation or download the source files automatically using `FetchContent`. + To pass an already installed Kokkos library, you can use classical CMake variables, such as `Kokkos_ROOT`, or `CMAKE_PREFIX_PATH`. +A specific CMake option, `CMAKE_DISABLE_FIND_PACKAGE_Kokkos`, can be used to force the use of the internal Kokkos +library, discarding any already installed Kokkos. + +An opposite option, `CMAKE_REQUIRE_FIND_PACKAGE_Kokkos` can prevent Kokkos from being downloaded and is useful to +test against an already installed Kokkos. + +```shell +# Download and build Kokkos and the tutorials, forcing the use of the internal Kokkos +cmake -B build_dir -DCMAKE_DISABLE_FIND_PACKAGE_Kokkos=ON +cmake --build build_dir +``` + +For specific use-cases, like when an internet connection is not available, the `KokkosTutorials_KOKKOS_SOURCE_DIR` can +be used to point to a local Kokkos source directory. +For example, + +```shell +cmake -B build_dir -DKokkos_ENABLE_THREADS=ON -DCMAKE_DISABLE_FIND_PACKAGE_Kokkos=ON \ + -DKokkosTutorials_KOKKOS_SOURCE_DIR= +```