From cdd3470dcdcfc97b405e31292b105a608f3efce5 Mon Sep 17 00:00:00 2001 From: Pietro Incardona <incardon@mpi-cbg.de> Date: Tue, 13 Apr 2021 18:52:15 +0200 Subject: [PATCH] hip conversion --- CMakeLists.txt | 20 ++++++++++++++--- configure | 9 ++++++++ src/CMakeLists.txt | 41 +++++++++++++++++++++++++++------- src/VCluster/VCluster_base.hpp | 1 + src/config/config_cmake.h.in | 6 +++++ 5 files changed, 66 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c8e66c..1acd4ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,13 +14,17 @@ set(SE_CLASS3 CACHE BOOL "Activate compilation with SE_CLASS3") set(PETSC_ROOT CACHE PATH "If compiling with linear algebra indicate the PETSC root directory") set(ALPAKA_ROOT CACHE PATH "Alpaka root path") set(CUDA_ON_CPU CACHE BOOL "Make Cuda work on heap") +set(HIP_ENABLE CACHE BOOL "Enable HIP compiler") +set(AMD_ARCH_COMPILE "gfx900" CACHE STRING "AMD gpu architecture used to compile kernels") execute_process(COMMAND bash -c "cp ${CMAKE_CURRENT_SOURCE_DIR}/src/VCluster/VCluster.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VCluster/VCluster_cuda_on_cpu.cpp") if (ENABLE_GPU) - set(CUDA_ON_CPU OFF) - enable_language(CUDA) - find_package(CUDA) + set(CUDA_ON_CPU OFF) + if (NOT HIP_ENABLE) + enable_language(CUDA) + find_package(CUDA) + endif() endif() set(ENV{PETSC_DIR} ${PETSC_ROOT}) @@ -31,6 +35,16 @@ set (CMAKE_CUDA_STANDARD 14) find_package(Boost 1.72.0 REQUIRED COMPONENTS unit_test_framework iostreams program_options OPTIONAL_COMPONENTS fiber context) find_package(MPI REQUIRED) find_package(PETSc) +find_package(HIP) + +if(HIP_FOUND) + set(DEFINE_HIP_GPU "#define HIP_GPU") + set(DEFINE_CUDIFY_USE_HIP "#define CUDIFY_USE_HIP") +endif() + +if(HIP_FOUND) + set(DEFINE_CUDA_GPU "#define CUDA_GPU") +endif() if(CUDA_FOUND) set(OPENFPM_INIT_FILE "initialize/initialize_wrapper_cuda.cu") diff --git a/configure b/configure index b34c8af..e00aff0 100755 --- a/configure +++ b/configure @@ -122,6 +122,7 @@ with_petsc with_eigen with_vcdevel enable_gpu +enable_hip enable_asan ' @@ -251,8 +252,16 @@ do else conf_options="$conf_options -DCMAKE_CUDA_HOST_COMPILER=$(which $CXX)" fi + if [ x"$CXXCUDA" == x"" ]; then + conf_options="$conf_options" + else + conf_options="$conf_options -DCMAKE_CUDA_COMPILER=$(which $CXXCUDA)" + fi conf_options="$conf_options -DENABLE_GPU=ON" ;; + hip) + conf_options="$conf_options -DHIP_ENABLE=ON" + ;; asan) conf_options="$conf_options -DENABLE_ASAN=ON" ;; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 449f10b..593b5c8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.8 FATAL_ERROR) ########################### Executables -if (CUDA_FOUND OR CUDA_ON_CPU) +if (CUDA_FOUND OR CUDA_ON_CPU OR HIP_FOUND) set(CUDA_SOURCES VCluster/cuda/VCluster_semantic_unit_cuda_tests.cu VCluster/cuda/VCluster_unit_tests.cu ) endif() @@ -12,14 +12,41 @@ endif() if (CUDA_ON_CPU) add_definitions(-DCUDA_ON_CPU -D__NVCC__ -DCUDART_VERSION=11000) - set_source_files_properties(${CUDA_SOURCES} PROPERTIES LANGUAGE CXX) + set_source_files_properties(${CUDA_SOURCES} PROPERTIES LANGUAGE CXX) # set_source_files_properties(${CUDA_SOURCES} PROPERTIES COMPILE_FLAGS "-D__NVCC__ -DCUDA_GPU -DCUDART_VERSION=11000") - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - add_definitions("-x c++") - endif() + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + add_definitions("-x c++") + endif() endif() -add_executable(vcluster_test main.cpp VCluster/VCluster.cpp VCluster/VCluster_unit_tests.cpp VCluster/VCluster_semantic_unit_tests.cpp ${CUDA_SOURCES}) +if ( HIP_ENABLE AND HIP_FOUND ) + + list(APPEND HIP_HIPCC_FLAGS ${CMAKE_CXX_FLAGS_DEBUG}) + + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + list(APPEND HIP_HIPCC_FLAGS -O0) + endif() + + list(APPEND HIP_HIPCC_FLAGS -D__NVCC__ -D__HIP__ -DCUDART_VERSION=11000 -D__CUDACC__ -D__CUDACC_VER_MAJOR__=11 -D__CUDACC_VER_MINOR__=0 -D__CUDACC_VER_BUILD__=0) + set_source_files_properties(${CUDA_SOURCES} PROPERTIES LANGUAGE CXX) + + set(CMAKE_CXX_COMPILER ${HIP_HIPCC_EXECUTABLE}) + + set_source_files_properties(VCluster/VCluster.cpp PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1) + + hip_add_executable(vcluster_test main.cpp VCluster/VCluster.cpp VCluster/VCluster_unit_tests.cpp VCluster/VCluster_semantic_unit_tests.cpp ${CUDA_SOURCES}) + + hip_add_library(vcluster STATIC VCluster/VCluster.cpp) + hip_add_library(vcluster_dl SHARED VCluster/VCluster.cpp) + +else() + + add_executable(vcluster_test main.cpp VCluster/VCluster.cpp VCluster/VCluster_unit_tests.cpp VCluster/VCluster_semantic_unit_tests.cpp ${CUDA_SOURCES}) + + add_library(vcluster STATIC VCluster/VCluster.cpp) + add_library(vcluster_dl SHARED VCluster/VCluster.cpp) + +endif() if ( CMAKE_COMPILER_IS_GNUCC ) target_compile_options(vcluster_test PRIVATE "-Wno-deprecated-declarations") @@ -34,8 +61,6 @@ endif() ########################### -add_library(vcluster STATIC VCluster/VCluster.cpp) -add_library(vcluster_dl SHARED VCluster/VCluster.cpp) if ( CUDA_FOUND AND NOT CUDA_ON_CPU ) ### We construct cuda_on_cpu vcluster diff --git a/src/VCluster/VCluster_base.hpp b/src/VCluster/VCluster_base.hpp index fd89fce..b9b1a10 100644 --- a/src/VCluster/VCluster_base.hpp +++ b/src/VCluster/VCluster_base.hpp @@ -1,6 +1,7 @@ #ifndef VCLUSTER_BASE_HPP_ #define VCLUSTER_BASE_HPP_ + #include "util/cuda_util.hpp" #ifdef OPENMPI #include <mpi.h> diff --git a/src/config/config_cmake.h.in b/src/config/config_cmake.h.in index 01c1969..e77b8ff 100644 --- a/src/config/config_cmake.h.in +++ b/src/config/config_cmake.h.in @@ -1,6 +1,12 @@ /* Coverty scan */ ${DEFINE_COVERTY_SCAN} +/* HIP GPU support */ +${DEFINE_HIP_GPU} + +/* HIP Cudify GPU support */ +${DEFINE_CUDIFY_USE_HIP} + /* GPU support */ ${DEFINE_CUDA_GPU} -- GitLab