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