提交 a31b7c6e 编写于 作者: M Megvii Engine Team

build(rocm): partially support hcc compilation

GitOrigin-RevId: ca9f1f8e8e967565bafd65476a841c4570fb77ee
上级 621ae0a1
...@@ -13,89 +13,79 @@ else() ...@@ -13,89 +13,79 @@ else()
message(FATAL_ERROR "Could not find HIP. Ensure that HIP is either installed in /opt/rocm/hip or the variable HIP_PATH is set to point to the right location.") message(FATAL_ERROR "Could not find HIP. Ensure that HIP is either installed in /opt/rocm/hip or the variable HIP_PATH is set to point to the right location.")
endif() endif()
string(REPLACE "." ";" HIP_VERSION_LIST ${HIP_VERSION}) if (${HIP_VERSION} VERSION_LESS 3.0)
list(GET HIP_VERSION_LIST 0 HIP_VERSION_MAJOR) message(FATAL_ERROR "ROCM version needed 3. Please update ROCM.")
list(GET HIP_VERSION_LIST 1 HIP_VERSION_MINOR) endif()
if (NOT ${HIP_VERSION_MAJOR} STREQUAL "3")
message(FATAL_ERROR "ROCM version needed 3.x, Please update ROCM.") macro(hipconfig_get_option variable option)
else() if(NOT DEFINED ${variable})
if (${HIP_VERSION_MINOR} LESS "7") execute_process(
message(WARNING "ROCM version 3.x which x(got ${HIP_VERSION_MINOR}) greater equal 7 is prefered.") COMMAND ${HIP_HIPCONFIG_EXECUTABLE} ${option}
OUTPUT_VARIABLE ${variable})
endif() endif()
endmacro()
hipconfig_get_option(HIP_COMPILER "--compiler")
hipconfig_get_option(HIP_CPP_CONFIG "--cpp_config")
separate_arguments(HIP_CPP_CONFIG)
foreach(hip_config_item ${HIP_CPP_CONFIG})
foreach(macro_name "__HIP_PLATFORM_HCC__" "__HIP_ROCclr__")
if(${hip_config_item} STREQUAL "-D${macro_name}=")
set(HIP_CPP_DEFINE "${HIP_CPP_DEFINE}#define ${macro_name}\n")
set(HIP_CPP_UNDEFINE "${HIP_CPP_UNDEFINE}\
#ifdef ${macro_name}\n#undef ${macro_name}\n\
#else\n#error\n\
#endif\n")
elseif(${hip_config_item} STREQUAL "-D${macro_name}")
set(HIP_CPP_DEFINE "${HIP_CPP_DEFINE}#define ${macro_name} 1\n")
set(HIP_CPP_UNDEFINE "${HIP_CPP_UNDEFINE}\
#ifdef ${macro_name}\n#undef ${macro_name}\n\
#else\n#error\n\
#endif\n")
endif()
endforeach()
endforeach()
message(STATUS "Using HIP compiler ${HIP_COMPILER}")
if(${HIP_COMPILER} STREQUAL "hcc")
set(MGE_ROCM_LIBS hip_hcc)
message(WARNING "hcc is not well supported, please modify link.txt to link with hipcc")
elseif (${HIP_COMPILER} STREQUAL "clang")
set(MGE_ROCM_LIBS amdhip64)
endif() endif()
set(MGE_ROCM_LIBS OpenCL amdhip64 MIOpen rocblas rocrand) list(APPEND MGE_ROCM_LIBS amdocl64 MIOpen rocblas rocrand)
set(HIP_INCLUDE_DIR ${HIP_ROOT_DIR}/../include) set(HIP_INCLUDE_DIR ${HIP_ROOT_DIR}/../include)
set(HIP_LIBRARY_DIR ${HIP_ROOT_DIR}/../lib) set(HIP_LIBRARY_DIR ${HIP_ROOT_DIR}/../lib)
#miopen function(find_rocm_library name dirname include library)
get_filename_component(__found_miopen_library ${HIP_ROOT_DIR}/../miopen/lib REALPATH) find_path(${name}_LIBRARY_DIR
find_path(MIOPEN_LIBRARY_DIR NAMES ${library}
NAMES libMIOpen.so HINTS "${HIP_ROOT_DIR}/../${dirname}"
HINTS ${PC_MIOPEN_INCLUDE_DIRS} ${MIOPEN_ROOT_DIR} ${ROCM_TOOLKIT_INCLUDE} ${__found_miopen_library} PATH_SUFFIXES lib lib/x86_64
PATH_SUFFIXES lib DOC "Path to ${name} library directory")
DOC "Path to MIOPEN library directory." )
if(MIOPEN_LIBRARY_DIR STREQUAL "MIOPEN_LIBRARY_DIR-NOTFOUND")
message(FATAL_ERROR "Can not find MIOPEN Library")
endif()
get_filename_component(__found_miopen_include ${HIP_ROOT_DIR}/../miopen/include REALPATH)
find_path(MIOPEN_INCLUDE_DIR
NAMES miopen
HINTS ${PC_MIOPEN_INCLUDE_DIRS} ${MIOPEN_ROOT_DIR} ${ROCM_TOOLKIT_INCLUDE} ${__found_miopen_include}
PATH_SUFFIXES include
DOC "Path to MIOPEN include directory." )
if(MIOPEN_INCLUDE_DIR STREQUAL "MIOPEN_INCLUDE_DIR-NOTFOUND")
message(FATAL_ERROR "Can not find MIOEPN INCLUDE")
endif()
#rocblas
get_filename_component(__found_rocblas_library ${HIP_ROOT_DIR}/../rocblas/lib REALPATH)
find_path(ROCBLAS_LIBRARY_DIR
NAMES librocblas.so
HINTS ${PC_ROCBLAS_INCLUDE_DIRS} ${ROCBLAS_ROOT_DIR} ${ROCM_TOOLKIT_INCLUDE} ${__found_rocblas_library}
PATH_SUFFIXES lib
DOC "Path to ROCBLAS library directory." )
if(ROCBLAS_LIBRARY_DIR STREQUAL "ROCBLAS_LIBRARY_DIR-NOTFOUND")
message(FATAL_ERROR "Can not find ROCBLAS Library")
endif()
get_filename_component(__found_rocblas_include ${HIP_ROOT_DIR}/../rocblas/include REALPATH)
find_path(ROCBLAS_INCLUDE_DIR
NAMES rocblas.h
HINTS ${PC_ROCBLAS_INCLUDE_DIRS} ${ROCBLAS_ROOT_DIR} ${ROCM_TOOLKIT_INCLUDE} ${__found_rocblas_include}
PATH_SUFFIXES include
DOC "Path to ROCBLAS include directory." )
if(ROCBLAS_INCLUDE_DIR STREQUAL "ROCBLAS_INCLUDE_DIR-NOTFOUND")
message(FATAL_ERROR "Can not find ROCBLAS INCLUDE")
endif()
#rocrand
get_filename_component(__found_rocrand_library ${HIP_ROOT_DIR}/../rocrand/lib REALPATH)
find_path(ROCRAND_LIBRARY_DIR
NAMES librocrand.so
HINTS ${PC_ROCRAND_INCLUDE_DIRS} ${ROCRAND_ROOT_DIR} ${ROCM_TOOLKIT_INCLUDE} ${__found_rocrand_library}
PATH_SUFFIXES lib
DOC "Path to ROCRAND library directory." )
if(ROCRAND_LIBRARY_DIR STREQUAL "ROCRAND_LIBRARY_DIR-NOTFOUND") if(${${name}_LIBRARY_DIR} MATCHES "NOTFOUND$")
message(FATAL_ERROR "Can not find ROCRAND Library") message(FATAL_ERROR "Can not find ${name} library")
endif() endif()
get_filename_component(__found_rocrand_include ${HIP_ROOT_DIR}/../rocrand/include REALPATH) find_path(${name}_INCLUDE_DIR
find_path(ROCRAND_INCLUDE_DIR NAMES ${include}
NAMES rocrand.h HINTS "${HIP_ROOT_DIR}/../${dirname}"
HINTS ${PC_ROCRAND_INCLUDE_DIRS} ${ROCRAND_ROOT_DIR} ${ROCM_TOOLKIT_INCLUDE} ${__found_rocrand_include} PATH_SUFFIXES include
PATH_SUFFIXES include DOC "Path to ${name} include directory")
DOC "Path to ROCRAND include directory." )
if(ROCRAND_INCLUDE_DIR STREQUAL "ROCRAND_INCLUDE_DIR-NOTFOUND")
message(FATAL_ERROR "Can not find ROCRAND INCLUDE")
endif()
if(${name}_INCLUDE_DIR MATCHES "NOTFOUND$")
message(FATAL_ERROR "Can not find ${name} include")
endif()
message(DEBUG "Found lib ${${name}_LIBRARY_DIR}, include ${${name}_INCLUDE_DIR}")
endfunction()
find_rocm_library(MIOPEN miopen miopen libMIOpen.so)
find_rocm_library(ROCBLAS rocblas rocblas.h librocblas.so)
find_rocm_library(ROCRAND rocrand rocrand.h librocrand.so)
find_rocm_library(AMDOCL opencl CL libamdocl64.so)
...@@ -9,10 +9,6 @@ ...@@ -9,10 +9,6 @@
* "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*/ */
#ifdef __HIP_PLATFORM_HCC__ @HIP_CPP_UNDEFINE@
#undef __HIP_PLATFORM_HCC__
#else
#error "hcc_defs_epilogue.h must be included after hcc_defs_prologue.h"
#endif
// vim: syntax=cpp.doxygen // vim: syntax=cpp.doxygen
...@@ -9,6 +9,6 @@ ...@@ -9,6 +9,6 @@
* "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*/ */
#define __HIP_PLATFORM_HCC__ @HIP_CPP_DEFINE@
// vim: syntax=cpp.doxygen // vim: syntax=cpp.doxygen
...@@ -63,7 +63,7 @@ macro (HIP_COMPILE _hip_target _hip_objs) ...@@ -63,7 +63,7 @@ macro (HIP_COMPILE _hip_target _hip_objs)
add_custom_target(${_hip_target}) add_custom_target(${_hip_target})
# set return value # set return value
set (${_hip_objs} ${_generated_files}) set(${_hip_objs} ${_generated_files})
endmacro() endmacro()
if (MGE_WITH_ROCM) if (MGE_WITH_ROCM)
...@@ -74,14 +74,21 @@ if (MGE_WITH_ROCM) ...@@ -74,14 +74,21 @@ if (MGE_WITH_ROCM)
# empty file to bypass this error. # empty file to bypass this error.
file(GLOB start.cpp.hip "" ) file(GLOB start.cpp.hip "" )
list(APPEND HIP_SOURCES start.cpp.hip) list(APPEND HIP_SOURCES start.cpp.hip)
configure_file(
${PROJECT_SOURCE_DIR}/dnn/include/hcc_detail/hcc_defs_prologue.h.in
${PROJECT_BINARY_DIR}/dnn/include/hcc_detail/hcc_defs_prologue.h)
file (GLOB_RECURSE HIPSOURCES rocm/*.cpp.hip) configure_file(
set(HIP_TARGET_NAME hip_kernel) ${PROJECT_SOURCE_DIR}/dnn/include/hcc_detail/hcc_defs_epilogue.h.in
${PROJECT_BINARY_DIR}/dnn/include/hcc_detail/hcc_defs_epilogue.h)
file(GLOB_RECURSE HIP_SOURCES_ rocm/*.cpp.hip)
set(HIP_TARGET_NAME megdnn_hip_kernel)
set(_HIPCC_OPTIONS "-fPIC") set(_HIPCC_OPTIONS "-fPIC")
set(_HCC_OPTIONS "-fPIC") set(_HCC_OPTIONS "-fPIC")
set(_NVCC_OPTIONS "-fPIC") set(_NVCC_OPTIONS "-fPIC")
list(APPEND HIP_SOURCES ${HIPSOURCES}) list(APPEND HIP_SOURCES ${HIP_SOURCES_})
set_source_files_properties(${HIP_SOURCES} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1) set_source_files_properties(${HIP_SOURCES} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
HIP_INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/dnn HIP_INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/dnn
${PROJECT_SOURCE_DIR}/dnn/include ${PROJECT_SOURCE_DIR}/dnn/include
...@@ -91,13 +98,14 @@ if (MGE_WITH_ROCM) ...@@ -91,13 +98,14 @@ if (MGE_WITH_ROCM)
${HIP_INCLUDE_DIR} ${HIP_INCLUDE_DIR}
${MIOPEN_INCLUDE_DIR} ${MIOPEN_INCLUDE_DIR}
${ROCBLAS_INCLUDE_DIR} ${ROCBLAS_INCLUDE_DIR}
${ROCRAND_INCLUDE_DIR}) ${ROCRAND_INCLUDE_DIR}
${AMDOCL_INCLUDE_DIR})
hip_compile( hip_compile(
${HIP_TARGET_NAME} HIPOBJS ${HIP_SOURCES} ${HIP_TARGET_NAME} HIPOBJS ${HIP_SOURCES}
HIPCC_OPTIONS ${_HIPCC_OPTIONS} HIPCC_OPTIONS ${_HIPCC_OPTIONS}
HCC_OPTIONS ${_HCC_OPTIONS} HCC_OPTIONS ${_HCC_OPTIONS}
NVCC_OPTIONS ${_NVCC_OPTIONS}) NVCC_OPTIONS ${_NVCC_OPTIONS})
list (APPEND SOURCES ${HIPOBJS}) list(APPEND SOURCES ${HIPOBJS})
endif () endif ()
if(MGE_WITH_CUDA) if(MGE_WITH_CUDA)
...@@ -139,16 +147,18 @@ if(MGE_WITH_CUDA) ...@@ -139,16 +147,18 @@ if(MGE_WITH_CUDA)
endif() endif()
if(MGE_WITH_ROCM) if(MGE_WITH_ROCM)
target_include_directories(megdnn PUBLIC target_include_directories(megdnn PUBLIC
${HIP_INCLUDE_DIR} ${HIP_INCLUDE_DIR}
${MIOPEN_INCLUDE_DIR} ${MIOPEN_INCLUDE_DIR}
${ROCBLAS_INCLUDE_DIR} ${ROCBLAS_INCLUDE_DIR}
${ROCRAND_INCLUDE_DIR}) ${ROCRAND_INCLUDE_DIR}
target_link_directories(megdnn PUBLIC ${AMDOCL_INCLUDE_DIR})
target_link_directories(megdnn PUBLIC
${HIP_LIBRARY_DIR} ${HIP_LIBRARY_DIR}
${MIOPEN_LIBRARY_DIR} ${MIOPEN_LIBRARY_DIR}
${ROCBLAS_LIBRARY_DIR} ${ROCBLAS_LIBRARY_DIR}
${ROCRAND_LIBRARY_DIR}) ${ROCRAND_LIBRARY_DIR}
${AMDOCL_LIBRARY_DIR})
endif() endif()
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
*/ */
#include "./opr_impl.h" #include "./opr_impl.h"
#include "./algos.h" #include "./algos.h"
#include "hcc_detail/hcc_defs_prologue.h"
#include "src/common/algo_chooser.h" #include "src/common/algo_chooser.h"
#include "src/common/utils.cuh" #include "src/common/utils.cuh"
......
...@@ -11,9 +11,7 @@ ...@@ -11,9 +11,7 @@
#pragma once #pragma once
#ifndef __HIP_PLATFORM_HCC__ #include "hcc_detail/hcc_defs_prologue.h"
#define __HIP_PLATFORM_HCC__
#endif
#include <miopen/version.h> #include <miopen/version.h>
#pragma GCC diagnostic push #pragma GCC diagnostic push
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册