From 1696340ada377ed0dc5b06183d8155bebfcba69a Mon Sep 17 00:00:00 2001 From: Hamidreza Norouzi Date: Wed, 27 Sep 2023 11:28:39 +0330 Subject: [PATCH] updated cmake for version-1.0 and including MPI --- CMakeLists.txt | 56 +++++++++++++++---------------- cmake/bashrc | 2 +- cmake/globals.cmake | 49 +++++++++++++++++++++++++++ cmake/makeExecutableGlobals.cmake | 2 +- cmake/makeLibraryGlobals.cmake | 2 +- phasicFlowConfig.H.in | 5 +-- 6 files changed, 82 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9740a90..6dc84aef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,52 +1,66 @@ cmake_minimum_required(VERSION 3.16 FATAL_ERROR) # set the project name and version -project(phasicFlow VERSION 0.1 ) +project(phasicFlow VERSION 1.0 ) set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_INSTALL_PREFIX ${phasicFlow_SOURCE_DIR} CACHE PATH "Install path of phasicFlow" FORCE) set(CMAKE_BUILD_TYPE Release CACHE STRING "build type" FORCE) +set(BUILD_SHARED_LIBS ON CACHE BOOL "Build using shared libraries" FORCE) +mark_as_advanced(FORCE var BUILD_SHARED_LIBS) message(STATUS ${CMAKE_INSTALL_PREFIX}) -mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA_LAMBDA) -mark_as_advanced(FORCE var Kokkos_ENABLE_OPENMP) -mark_as_advanced(FORCE var Kokkos_ENABLE_SERIAL) -mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA_LAMBDA) -mark_as_advanced(FORCE var BUILD_SHARED_LIBS) +include(cmake/globals.cmake) -option(USE_STD_PARALLEL_ALG "Use TTB std parallel algorithms" ON) +#Kokkos directory to be included +set(Kokkos_Source_DIR) + +if(DEFINED ENV{Kokkos_DIR}) + set(Kokkos_Source_DIR $ENV{Kokkos_DIR}) +else() + set(Kokkos_Source_DIR $ENV{HOME}/Kokkos/kokkos) +endif() +message(STATUS "Kokkos source directory is ${Kokkos_Source_DIR}") +add_subdirectory(${Kokkos_Source_DIR} ${phasicFlow_BINARY_DIR}/kokkos) +Kokkos_cmake_settings() + + +option(pFlow_STD_Parallel_Alg "Use TTB std parallel algorithms" ON) option(pFlow_Build_Serial "Build phasicFlow and backends for serial execution" OFF) option(pFlow_Build_OpenMP "Build phasicFlow and backends for OpenMP execution" OFF) option(pFlow_Build_Cuda "Build phasicFlow and backends for Cuda execution" OFF) -option(pFlow_Build_Double "Build phasicFlow with double precision variables" ON) +option(pFlow_Build_Double "Build phasicFlow with double precision floating-oint variables" ON) +option(pFlow_Build_MPI "Build for MPI parallelization. This will enable multi-gpu run, CPU run on clusters (distributed memory machine). Use this combination Cuda+MPI, OpenMP + MPI or Serial+MPI " OFF) -set(BUILD_SHARED_LIBS ON CACHE BOOL "Build using shared libraries" FORCE) if(pFlow_Build_Serial) set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "Serial execution" FORCE) set(Kokkos_ENABLE_OPENMP OFF CACHE BOOL "OpenMP execution" FORCE) set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "Cuda execution" FORCE) set(Kokkos_ENABLE_CUDA_LAMBDA OFF CACHE BOOL "Cuda execution" FORCE) + set(Kokkos_ENABLE_CUDA_CONSTEXPR OFF CACHE BOOL "Enable constexpr on cuda code" FORCE) elseif(pFlow_Build_OpenMP ) set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "Serial execution" FORCE) set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "OpenMP execution" FORCE) set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "Cuda execution" FORCE) set(Kokkos_ENABLE_CUDA_LAMBDA OFF CACHE BOOL "Cuda execution" FORCE) set(Kokkos_DEFAULT_HOST_PARALLEL_EXECUTION_SPACE SERIAL CACHE STRING "" FORCE) + set(Kokkos_ENABLE_CUDA_CONSTEXPR OFF CACHE BOOL "Enable constexpr on cuda code" FORCE) elseif(pFlow_Build_Cuda) set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "Serial execution" FORCE) set(Kokkos_ENABLE_OPENMP OFF CACHE BOOL "OpenMP execution" FORCE) set(Kokkos_ENABLE_CUDA ON CACHE BOOL "Cuda execution" FORCE) set(Kokkos_ENABLE_CUDA_LAMBDA ON CACHE BOOL "Cuda execution" FORCE) + set(Kokkos_ENABLE_CUDA_CONSTEXPR ON CACHE BOOL "Enable constexpr on cuda code" FORCE) endif() +if(pFlow_Build_MPI) + find_package(MPI REQUIRED) +endif() -include(cmake/globals.cmake) -message(STATUS "Valid file extensions are ${validFiles}") - include(cmake/makeLibraryGlobals.cmake) include(cmake/makeExecutableGlobals.cmake) @@ -55,20 +69,6 @@ configure_file(phasicFlowConfig.H.in phasicFlowConfig.H) #add a global include directory include_directories(src/setHelpers src/demComponent "${PROJECT_BINARY_DIR}") -#main subdirectories of the code -set(Kokkos_Source_DIR) - -if(DEFINED ENV{Kokkos_DIR}) - set(Kokkos_Source_DIR $ENV{Kokkos_DIR}) -# add_subdirectory($ENV{Kokkos_DIR} ${phasicFlow_BINARY_DIR}/kokkos) -# message(STATUS "Kokkos directory is $ENV{Kokkos_DIR}") -else() -# add_subdirectory($ENV{HOME}/Kokkos/kokkos ${phasicFlow_BINARY_DIR}/kokkos) - set(Kokkos_Source_DIR $ENV{HOME}/Kokkos/kokkos) -endif() - -message(STATUS "Kokkos source directory is ${Kokkos_Source_DIR}") -add_subdirectory(${Kokkos_Source_DIR} ${phasicFlow_BINARY_DIR}/kokkos) add_subdirectory(src) @@ -79,10 +79,8 @@ add_subdirectory(utilities) add_subdirectory(DEMSystems) #add_subdirectory(testIO) - install(FILES "${PROJECT_BINARY_DIR}/phasicFlowConfig.H" - DESTINATION include -) + DESTINATION include) include(InstallRequiredSystemLibraries) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") diff --git a/cmake/bashrc b/cmake/bashrc index 50f8fa60..976d8c5f 100644 --- a/cmake/bashrc +++ b/cmake/bashrc @@ -1,5 +1,5 @@ -export pFlow_PROJECT_VERSION=v0.1 +export pFlow_PROJECT_VERSION=v-1.0 export pFlow_PROJECT=phasicFlow diff --git a/cmake/globals.cmake b/cmake/globals.cmake index b3158dd8..b2c084a3 100644 --- a/cmake/globals.cmake +++ b/cmake/globals.cmake @@ -2,3 +2,52 @@ set(validFiles) list(APPEND validFiles *.C *.cpp *.cxx *.c *.cu *.H *.hpp *.hxx *.h *.cuh) +macro(Kokkos_cmake_settings) + +mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA_LAMBDA) +mark_as_advanced(FORCE var Kokkos_CXX_STANDARD) +mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA_CONSTEXPR) +mark_as_advanced(FORCE var Kokkos_ENABLE_OPENMP) +mark_as_advanced(FORCE var Kokkos_ENABLE_SERIAL) +mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA) +mark_as_advanced(FORCE var Kokkos_ENABLE_HIP) +mark_as_advanced(FORCE var Kokkos_ENABLE_AGGRESSIVE_VECTORIZATION) +mark_as_advanced(FORCE var Kokkos_ENABLE_BENCHMARKS) +mark_as_advanced(FORCE var Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE) +mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA_LDG_INTRINSIC) +mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE) +mark_as_advanced(FORCE var Kokkos_ENABLE_CUDA_UVM) +mark_as_advanced(FORCE var Kokkos_ENABLE_DEPRECATED_CODE_3) +mark_as_advanced(FORCE var Kokkos_ENABLE_DEPRECATED_CODE_4) +mark_as_advanced(FORCE var Kokkos_ENABLE_DEPRECATION_WARNINGS) +mark_as_advanced(FORCE var Kokkos_ENABLE_DESUL_ATOMICS_EXTERNAL) +mark_as_advanced(FORCE var Kokkos_ENABLE_EXAMPLES) +mark_as_advanced(FORCE var Kokkos_ENABLE_HEADER_SELF_CONTAINMENT_TESTS) +mark_as_advanced(FORCE var Kokkos_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS) +mark_as_advanced(FORCE var Kokkos_ENABLE_HIP_RELOCATABLE_DEVICE_CODE) +mark_as_advanced(FORCE var Kokkos_ENABLE_HPX) +mark_as_advanced(FORCE var Kokkos_ENABLE_HWLOC) +mark_as_advanced(FORCE var Kokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC) +mark_as_advanced(FORCE var Kokkos_ENABLE_IMPL_HPX_ASYNC_DISPATCH) +mark_as_advanced(FORCE var Kokkos_ENABLE_LARGE_MEM_TESTS) +mark_as_advanced(FORCE var Kokkos_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK) +mark_as_advanced(FORCE var Kokkos_ENABLE_LIBQUADMATH) +mark_as_advanced(FORCE var Kokkos_ENABLE_LIBRT) +mark_as_advanced(FORCE var Kokkos_ENABLE_MEMKIND) +mark_as_advanced(FORCE var Kokkos_ENABLE_ONEDPL) +mark_as_advanced(FORCE var Kokkos_ENABLE_OPENACC) +mark_as_advanced(FORCE var Kokkos_ENABLE_OPENMPTARGET) +mark_as_advanced(FORCE var Kokkos_ENABLE_ROCM) +mark_as_advanced(FORCE var Kokkos_ENABLE_SYCL) +mark_as_advanced(FORCE var Kokkos_ENABLE_TESTS) +mark_as_advanced(FORCE var Kokkos_ENABLE_THREADS) +mark_as_advanced(FORCE var Kokkos_ENABLE_TUNING) +mark_as_advanced(FORCE var Kokkos_ENABLE_UNSUPPORTED_ARCHS) +mark_as_advanced(FORCE var Kokkos_HPX_DIR) +mark_as_advanced(FORCE var Kokkos_HWLOC_DIR) +mark_as_advanced(FORCE var Kokkos_MEMKIND_DIR) +mark_as_advanced(FORCE var Kokkos_ROCM_DIR) +mark_as_advanced(FORCE var Kokkos_THREADS_DIR) + +endmacro() + diff --git a/cmake/makeExecutableGlobals.cmake b/cmake/makeExecutableGlobals.cmake index 24eb6e0f..06c48e14 100644 --- a/cmake/makeExecutableGlobals.cmake +++ b/cmake/makeExecutableGlobals.cmake @@ -31,7 +31,7 @@ target_include_directories(${target_name} message(STATUS "\nCreating make file for executable ${target_name}") message(STATUS " ${target_name} link libraries are: ${${target_link_libs}}") -message(STATUS " ${target_name} source files are: ${source_files}") +message(STATUS " ${target_name} source files are: ${${source_files}}") message(STATUS " ${target_name} include dirs are: ${includeDirs}\n") diff --git a/cmake/makeLibraryGlobals.cmake b/cmake/makeLibraryGlobals.cmake index b5e30156..4197983b 100644 --- a/cmake/makeLibraryGlobals.cmake +++ b/cmake/makeLibraryGlobals.cmake @@ -42,7 +42,7 @@ target_include_directories(${target_name} message(STATUS "\nCreating make file for library ${target_name}") message(STATUS " ${target_name} link libraries are: ${${target_link_libs}}") message(STATUS " ${target_name} source files are: ${source_files}") -message(STATUS " ${target_name} include dirs are: ${includeDirs}\n") +message(STATUS " ${target_name} include dirs are: ${includeDirs}\n \n") install(TARGETS ${target_name} DESTINATION lib) install(FILES ${includeFiles} DESTINATION include/${target_name}) diff --git a/phasicFlowConfig.H.in b/phasicFlowConfig.H.in index 919867e4..0f1b3224 100644 --- a/phasicFlowConfig.H.in +++ b/phasicFlowConfig.H.in @@ -5,5 +5,6 @@ #cmakedefine pFlow_Build_Serial #cmakedefine pFlow_Build_OpenMP #cmakedefine pFlow_Build_Cuda -#cmakedefine USE_STD_PARALLEL_ALG -#cmakedefine pFlow_Build_Double \ No newline at end of file +#cmakedefine pFlow_STD_Parallel_Alg +#cmakedefine pFlow_Build_Double +#cmakedefine pFlow_Build_MPI