[GPU] Fix multi configuration build of onednn_gpu (#8743)

This commit is contained in:
Mikhail Letavin 2021-11-23 00:22:05 +03:00 committed by GitHub
parent d15dcd6833
commit a862331732
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 83 additions and 24 deletions

View File

@ -12,6 +12,18 @@ project("${CLDNN__PROJ_NAME}")
# ====================================== HELPER CONSTANT VARIABLES ===================================== # ====================================== HELPER CONSTANT VARIABLES =====================================
# ====================================================================================================== # ======================================================================================================
# ====================================================================================================== # ======================================================================================================
if (ENABLE_ONEDNN_FOR_GPU)
get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (isMultiConfig)
ExternalProject_Get_property(onednn_gpu_build SOURCE_DIR)
ExternalProject_Get_property(onednn_gpu_build BINARY_DIR)
set(ONEDNN_INCLUDE_DIRS "${BINARY_DIR}/include/" "${SOURCE_DIR}/include/")
set(ONEDNN_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/$<CONFIG>/${CMAKE_STATIC_LIBRARY_PREFIX}onednn_gpu${CMAKE_STATIC_LIBRARY_SUFFIX}")
else()
set(ONEDNN_LIBRARY "onednn_gpu")
endif()
endif()
if(ENABLE_GPU_DEBUG_CAPS) if(ENABLE_GPU_DEBUG_CAPS)
add_definitions(-DGPU_DEBUG_CONFIG=1) add_definitions(-DGPU_DEBUG_CONFIG=1)

View File

@ -67,7 +67,15 @@ target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE
) )
if(ENABLE_ONEDNN_FOR_GPU) if(ENABLE_ONEDNN_FOR_GPU)
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC onednn_gpu) get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (isMultiConfig)
add_dependencies(${CLDNN_BUILD__PROJ} onednn_gpu_build)
foreach(dir IN LISTS ONEDNN_INCLUDE_DIRS)
target_include_directories("${CLDNN_BUILD__PROJ}" PUBLIC $<BUILD_INTERFACE:${dir}>)
endforeach()
target_compile_definitions("${CLDNN_BUILD__PROJ}" PUBLIC ENABLE_ONEDNN_FOR_GPU)
endif()
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC ${ONEDNN_LIBRARY})
endif() endif()
if(WIN32) if(WIN32)

View File

@ -128,7 +128,15 @@ target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE
) )
if(ENABLE_ONEDNN_FOR_GPU) if(ENABLE_ONEDNN_FOR_GPU)
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC onednn_gpu) get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (isMultiConfig)
add_dependencies(${CLDNN_BUILD__PROJ} onednn_gpu_build)
foreach(dir IN LISTS ONEDNN_INCLUDE_DIRS)
target_include_directories("${CLDNN_BUILD__PROJ}" PUBLIC $<BUILD_INTERFACE:${dir}>)
endforeach()
target_compile_definitions("${CLDNN_BUILD__PROJ}" PUBLIC ENABLE_ONEDNN_FOR_GPU)
endif()
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC ${ONEDNN_LIBRARY})
endif() endif()
if(COMMAND add_cpplint_target) if(COMMAND add_cpplint_target)

View File

@ -135,9 +135,6 @@ if(ENABLE_ONEDNN_FOR_GPU)
include(ExternalProject) include(ExternalProject)
set(ONEDNN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/onednn_gpu_build/") set(ONEDNN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/onednn_gpu_build/")
set(ONEDNN_INSTALL_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") set(ONEDNN_INSTALL_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
set(ONEDNN_LIBRARY "${ONEDNN_BUILD_DIR}/src/${CMAKE_STATIC_LIBRARY_PREFIX}onednn_gpu${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(ONEDNN_OUTPUT_LIBRARY "${ONEDNN_INSTALL_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}onednn_gpu${CMAKE_STATIC_LIBRARY_SUFFIX}")
if(CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_COMPILER_IS_GNUCXX)
ie_add_compiler_flags(-Wno-undef) ie_add_compiler_flags(-Wno-undef)
endif() endif()
@ -148,13 +145,7 @@ if(ENABLE_ONEDNN_FOR_GPU)
if(CORES_COUNT EQUAL 0) if(CORES_COUNT EQUAL 0)
set(CORES_COUNT "") set(CORES_COUNT "")
endif() endif()
ExternalProject_Add(onednn_gpu_build set (ONEDNN_CMAKE_ARGS "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onednn_gpu"
BINARY_DIR "${ONEDNN_BUILD_DIR}"
INSTALL_DIR "${ONEDNN_INSTALL_DIR}"
PREFIX onednn_gpu_build
EXCLUDE_FROM_ALL ON
CMAKE_ARGS "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}" "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
"-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}" "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}"
"-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}" "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}"
@ -178,12 +169,50 @@ if(ENABLE_ONEDNN_FOR_GPU)
"-DDNNL_LIBRARY_TYPE=STATIC" "-DDNNL_LIBRARY_TYPE=STATIC"
"-DOpenCL_LIBRARY=${OpenCL_LIBRARY}" "-DOpenCL_LIBRARY=${OpenCL_LIBRARY}"
"-DOpenCL_INCLUDE_DIR=${OpenCL_INCLUDE_DIR}" "-DOpenCL_INCLUDE_DIR=${OpenCL_INCLUDE_DIR}"
"-DOPENCL_VERSION_2_2=${OPENCL_VERSION_2_2}" "-DOPENCL_VERSION_2_2=${OPENCL_VERSION_2_2}")
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} --target onednn_gpu --parallel ${CORES_COUNT}
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${ONEDNN_LIBRARY} ${ONEDNN_OUTPUT_LIBRARY} get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
COMMAND ${CMAKE_COMMAND} -E echo "OneDNN $<CONFIG> build for GPU complete" if (isMultiConfig)
BUILD_BYPRODUCTS ${ONEDNN_OUTPUT_LIBRARY} set(DIR_PREFIX "/$<CONFIG>/")
) set(ONEDNN_LIBRARY "${CMAKE_STATIC_LIBRARY_PREFIX}onednn_gpu${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(ONEDNN_OUTPUT_LIBRARY "${ONEDNN_INSTALL_DIR}${DIR_PREFIX}${ONEDNN_LIBRARY}")
if (WIN32)
set(DNNL_COMMAND_SUFFIX "bat" )
else()
set(DNNL_COMMAND_SUFFIX "sh" )
endif()
set(DNNL_BUILD_TARGET_COMMAND "${ONEDNN_BUILD_DIR}/target_$<CONFIG>_build.${DNNL_COMMAND_SUFFIX}" )
set(DNNL_COPY_TARGET_COMMAND "${ONEDNN_BUILD_DIR}/target_$<CONFIG>_copy.${DNNL_COMMAND_SUFFIX}" )
file( GENERATE OUTPUT "${DNNL_BUILD_TARGET_COMMAND}" CONTENT "\"${CMAKE_COMMAND}\" --build . --config $<CONFIG> --target onednn_gpu --parallel ${CORES_COUNT}")
file( GENERATE OUTPUT "${DNNL_COPY_TARGET_COMMAND}" CONTENT "\"${CMAKE_COMMAND}\" -E copy ${ONEDNN_BUILD_DIR}src${DIR_PREFIX}${ONEDNN_LIBRARY} ${ONEDNN_OUTPUT_LIBRARY}" )
ExternalProject_Add(onednn_gpu_build
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onednn_gpu"
BINARY_DIR "${ONEDNN_BUILD_DIR}"
INSTALL_DIR "${ONEDNN_INSTALL_DIR}"
PREFIX onednn_gpu_build
EXCLUDE_FROM_ALL ON
CMAKE_ARGS ${ONEDNN_CMAKE_ARGS}
BUILD_COMMAND ${DNNL_BUILD_TARGET_COMMAND}
INSTALL_COMMAND ${DNNL_COPY_TARGET_COMMAND}
COMMAND ${CMAKE_COMMAND} -E echo "OneDNN build for GPU complete"
)
else()
set(ONEDNN_LIBRARY "${ONEDNN_BUILD_DIR}/src/${CMAKE_STATIC_LIBRARY_PREFIX}onednn_gpu${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(ONEDNN_OUTPUT_LIBRARY "${ONEDNN_INSTALL_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}onednn_gpu${CMAKE_STATIC_LIBRARY_SUFFIX}")
ExternalProject_Add(onednn_gpu_build
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onednn_gpu"
BINARY_DIR "${ONEDNN_BUILD_DIR}"
INSTALL_DIR "${ONEDNN_INSTALL_DIR}"
PREFIX onednn_gpu_build
EXCLUDE_FROM_ALL ON
CMAKE_ARGS ${ONEDNN_CMAKE_ARGS}
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} --target onednn_gpu --parallel ${CORES_COUNT}
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${ONEDNN_LIBRARY} ${ONEDNN_OUTPUT_LIBRARY}
COMMAND ${CMAKE_COMMAND} -E echo "OneDNN $<CONFIG> build for GPU complete"
BUILD_BYPRODUCTS ${ONEDNN_OUTPUT_LIBRARY}
)
endif()
ExternalProject_Get_property(onednn_gpu_build SOURCE_DIR) ExternalProject_Get_property(onednn_gpu_build SOURCE_DIR)
ExternalProject_Get_property(onednn_gpu_build BINARY_DIR) ExternalProject_Get_property(onednn_gpu_build BINARY_DIR)
@ -191,12 +220,14 @@ if(ENABLE_ONEDNN_FOR_GPU)
# WA: create temp 'include' directory # WA: create temp 'include' directory
file(MAKE_DIRECTORY "${BINARY_DIR}/include") file(MAKE_DIRECTORY "${BINARY_DIR}/include")
add_library(onednn_gpu STATIC IMPORTED GLOBAL) if (NOT isMultiConfig)
set_target_properties(onednn_gpu PROPERTIES add_library(onednn_gpu STATIC IMPORTED GLOBAL)
IMPORTED_LOCATION ${ONEDNN_OUTPUT_LIBRARY} set_target_properties(onednn_gpu PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${BINARY_DIR}/include>;$<BUILD_INTERFACE:${SOURCE_DIR}/include>" IMPORTED_LOCATION ${ONEDNN_OUTPUT_LIBRARY}
INTERFACE_COMPILE_DEFINITIONS ENABLE_ONEDNN_FOR_GPU) INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${BINARY_DIR}/include>;$<BUILD_INTERFACE:${SOURCE_DIR}/include>"
add_dependencies(onednn_gpu onednn_gpu_build) INTERFACE_COMPILE_DEFINITIONS ENABLE_ONEDNN_FOR_GPU)
add_dependencies(onednn_gpu onednn_gpu_build)
endif()
# TODO: does not work for imported targets; need to import this target in # TODO: does not work for imported targets; need to import this target in
# OpenVINOConfig.cmake explicitly # OpenVINOConfig.cmake explicitly