[BUILD] Enable RCCL build with amdclang++ (#1128)

Signed-off-by: nileshnegi <Nilesh.Negi@amd.com>
This commit is contained in:
Nilesh M Negi
2024-08-25 13:44:22 -04:00
zatwierdzone przez GitHub
rodzic bba3559334
commit 607e34dd99
2 zmienionych plików z 57 dodań i 28 usunięć
+53 -23
Wyświetl plik
@@ -102,21 +102,27 @@ include(cmake/Dependencies.cmake) # Reloading to use desired GPU_TARGETS instead
# Try to establish ROCM_PATH (for find_package)
#==================================================================================================
if(NOT DEFINED ROCM_PATH)
if("${CMAKE_CXX_COMPILER}" MATCHES ".*hipcc$")
# Guess based on provided compiler location
get_filename_component(_real_path ${CMAKE_CXX_COMPILER} REALPATH)
get_filename_component(_new_path "${_real_path}" DIRECTORY)
get_filename_component(ROCM_PATH "${_new_path}/.." REALPATH)
message(STATUS "Setting ROCM_PATH based on hipcc location to ${ROCM_PATH}")
else()
# Guess default location
set(ROCM_PATH "/opt/rocm")
message(WARNING "Unable to find ROCM_PATH: Falling back to ${ROCM_PATH}")
endif()
# Guess default location
set(ROCM_PATH "/opt/rocm")
message(WARNING "Unable to find ROCM_PATH: Falling back to ${ROCM_PATH}")
else()
message(STATUS "ROCM_PATH found: ${ROCM_PATH}")
endif()
if("${CMAKE_CXX_COMPILER}" MATCHES ".*amdclang\\+\\+")
message(STATUS "Compiling with amdclang++")
set(COMPILER_EXE_NAME amdclang++)
set(COMPILER_GREP_STRING "AMD clang version")
set(COMPILER_AWK_CMD "awk -F\" \" '{ printf $4}'")
elseif("${CMAKE_CXX_COMPILER}" MATCHES ".*hipcc$")
message(STATUS "Compiling with hipcc")
set(COMPILER_EXE_NAME hipcc)
set(COMPILER_GREP_STRING "HIP version")
set(COMPILER_AWK_CMD "awk -F\" \" '{ printf $3}' | awk -F\"-\" '{ printf $1}'")
else()
message(FATAL_ERROR "RCCL can be built only with hipcc or amdclang++")
endif()
# Set CMAKE flags
#==================================================================================================
set(CMAKE_INSTALL_PREFIX "${ROCM_PATH}" CACHE PATH "")
@@ -138,14 +144,24 @@ find_package(hip REQUIRED)
message(STATUS "HIP compiler: ${HIP_COMPILER}")
message(STATUS "HIP runtime: ${HIP_RUNTIME}")
if(NOT "${HIP_COMPILER}" MATCHES "clang")
message(FATAL_ERROR "RCCL requires clang-based compiler (hipcc)")
message(FATAL_ERROR "RCCL requires clang-based compiler (amdclang++ or hipcc)")
endif()
find_program(hipcc_executable hipcc)
message(STATUS "hipcc executable: ${hipcc_executable}")
## Check for compiler version
find_program(compiler_executable ${COMPILER_EXE_NAME})
message(STATUS "${COMPILER_EXE_NAME} executable: ${compiler_executable}")
execute_process(
COMMAND bash "-c" "${hipcc_executable} --version | grep 'HIP version' | awk -F\" \" '{ printf $3}' | awk -F\"-\" '{ printf $1}'"
OUTPUT_VARIABLE hipcc_version_string)
message(STATUS "hipcc version: ${hipcc_version_string}")
COMMAND bash "-c" "${compiler_executable} --version | grep \"${COMPILER_GREP_STRING}\" | ${COMPILER_AWK_CMD}"
OUTPUT_VARIABLE compiler_version_string)
message(STATUS "${COMPILER_EXE_NAME} version: ${compiler_version_string}")
## Check for HIP version
find_program(hipconfig_executable hipconfig)
message(STATUS "hipconfig executable: ${hipconfig_executable}")
execute_process(
COMMAND bash "-c" "${hipconfig_executable} -v | awk -F\"-\" '{ printf $1 }'"
OUTPUT_VARIABLE hip_version_string)
message(STATUS "${COMPILER_EXE_NAME} HIP version: ${hip_version_string}")
## Check for ROCm version
execute_process(
@@ -167,20 +183,25 @@ else()
message(WARNING "Failed to extract ROCm version.")
endif()
### Required for checking HIP device symbols when building with amdclang++
set(CMAKE_REQUIRED_LIBRARIES hip::device)
### Check for hipDeviceMallocUncached support
check_symbol_exists("hipDeviceMallocUncached" "hip/hip_runtime_api.h" HIP_UNCACHED_MEMORY)
### Check for hipDeviceMallocContiguous support
check_symbol_exists("hipDeviceMallocContiguous" "hip/hip_runtime_api.h" HIP_CONTIGUOUS_MEMORY)
unset(CMAKE_REQUIRED_LIBRARIES)
### Check for indirect function call support
if(ENABLE_IFC)
if(${hipcc_version_string} VERSION_GREATER_EQUAL "5.5.30201")
if(${hip_version_string} VERSION_GREATER_EQUAL "5.5.30201")
set(IFC_ENABLED ON)
message(STATUS "Indirect function call enabled")
else()
set(IFC_ENABLED OFF)
message(WARNING "Indirect function call disabled - requires hipcc version >= 5.5.30201")
message(WARNING "Indirect function call disabled - requires HIP version >= 5.5.30201")
endif()
endif()
@@ -632,14 +653,21 @@ if(TRACE)
endif()
if(${HIP_CONTIGUOUS_MEMORY})
target_compile_definitions(rccl PRIVATE HIP_CONTIGUOUS_MEMORY)
message(STATUS "HIP_CONTIGUOUS_MEMORY enabled")
else()
message(STATUS "HIP_CONTIGUOUS_MEMORY disabled")
endif()
if(${hipcc_version_string} VERSION_GREATER_EQUAL "5.7.31920")
if(${hip_version_string} VERSION_GREATER_EQUAL "5.7.31920")
target_compile_definitions(rccl PRIVATE HIP_UNCACHED_MEMORY)
message(STATUS "HIP_UNCACHED_MEMORY enabled")
else()
message(STATUS "HIP_UNCACHED_MEMORY disabled - requires HIP version >= 5.7.31920")
# keep --hipcc-func-supp on older HIP and compiler
if(NOT IFC_ENABLED)
target_compile_options(rccl PRIVATE --hipcc-func-supp)
message(STATUS "--hipcc-func-supp enabled")
else()
message(STATUS "--hipcc-func-supp disabled")
endif()
endif()
if (BUILD_BFD)
@@ -663,10 +691,12 @@ if(DEMANGLE_DIR)
target_compile_definitions(rccl PRIVATE "HAVE_CPLUS_DEMANGLE=1")
target_compile_definitions(rccl PRIVATE "HAVE_DECL_BASENAME=1")
endif()
if(${hipcc_version_string} VERSION_GREATER_EQUAL "6.1.33591")
if(${hip_version_string} VERSION_GREATER_EQUAL "6.1.33591")
set(LL128_ENABLED ON)
target_compile_definitions(rccl PRIVATE ENABLE_LL128)
message(STATUS "RCCL LL128 protocol enabled")
target_compile_definitions(rccl PRIVATE ENABLE_LL128)
message(STATUS "RCCL LL128 protocol enabled")
else()
message(STATUS "RCCL LL128 protocol disabled - requires HIP version >= 6.1.33591")
endif()
## Set RCCL compile options
+4 -5
Wyświetl plik
@@ -7,13 +7,12 @@ else()
endif()
if (NOT DEFINED ENV{CXX})
set(CMAKE_CXX_COMPILER "${rocm_bin}/hipcc" CACHE PATH "Path to the C++ compiler")
set(CMAKE_CXX_COMPILER "${rocm_bin}/amdclang++" CACHE PATH "Path to the C++ compiler")
else()
set(CMAKE_CXX_COMPILER "$ENV{CXX}" CACHE PATH "Path to the C++ compiler")
endif()
if (NOT DEFINED ENV{CC})
set(CMAKE_C_COMPILER "${rocm_bin}/hipcc" CACHE PATH "Path to the C compiler")
else()
set(CMAKE_C_COMPILER "$ENV{CC}" CACHE PATH "Path to the C compiler")
if (NOT DEFINED ENV{CXXFLAGS})
set(CMAKE_CXX_FLAGS_DEBUG "-g -O1")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
endif()