Enable GPU in static build w/o oneDNN (#8563)

* Enable LTO for oneDNN GPU

* Use importer target for onednn_gpu

* Fixed install of OpenCL, ittapi

* Try to enable samples build

* Fixed ie_wheel build

* Disabled samples

* Fixed incorrect install of pugixml in dynamic build
This commit is contained in:
Ilya Lavrenov 2021-11-15 13:44:11 +03:00 committed by GitHub
parent c82744e435
commit 8cb17ca218
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 68 additions and 47 deletions

View File

@ -138,7 +138,7 @@ jobs:
-DENABLE_PYTHON=ON
-DBUILD_SHARED_LIBS=$(CMAKE_BUILD_SHARED_LIBS)
-DENABLE_GNA=$(CMAKE_BUILD_SHARED_LIBS)
-DENABLE_CLDNN=$(CMAKE_BUILD_SHARED_LIBS)
-DENABLE_ONEDNN_FOR_GPU=$(CMAKE_BUILD_SHARED_LIBS)
-DPYTHON_EXECUTABLE=/usr/bin/python3.8
-DENABLE_WHEEL=ON
-DENABLE_TESTS=ON

View File

@ -211,9 +211,7 @@ endif()
macro(ov_install_static_lib target comp)
if(NOT BUILD_SHARED_LIBS)
install(TARGETS ${target} EXPORT OpenVINOTargets
RUNTIME DESTINATION ${IE_CPACK_RUNTIME_PATH} COMPONENT ${comp}
ARCHIVE DESTINATION ${IE_CPACK_ARCHIVE_PATH} COMPONENT ${comp}
LIBRARY DESTINATION ${IE_CPACK_LIBRARY_PATH} COMPONENT ${comp})
ARCHIVE DESTINATION ${IE_CPACK_ARCHIVE_PATH} COMPONENT ${comp})
endif()
endmacro()

View File

@ -14,6 +14,17 @@ ie_option (ENABLE_STRICT_DEPENDENCIES "Skip configuring \"convinient\" dependenc
ie_dependent_option (ENABLE_CLDNN "clDnn based plugin for inference engine" ON "X86_64;NOT APPLE;NOT MINGW;NOT WINDOWS_STORE;NOT WINDOWS_PHONE" OFF)
if (NOT ENABLE_CLDNN OR ANDROID OR
(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
# oneDNN doesn't support old compilers and android builds for now, so we'll
# build GPU plugin without oneDNN
set(ENABLE_ONEDNN_FOR_GPU_DEFAULT OFF)
else()
set(ENABLE_ONEDNN_FOR_GPU_DEFAULT ON)
endif()
ie_dependent_option (ENABLE_ONEDNN_FOR_GPU "Enable oneDNN with GPU support" ON "${ENABLE_ONEDNN_FOR_GPU_DEFAULT}" OFF)
ie_option (ENABLE_PROFILING_ITT "Build with ITT tracing. Optionally configure pre-built ittnotify library though INTEL_VTUNE_DIR variable." OFF)
ie_option_enum(ENABLE_PROFILING_FILTER "Enable or disable ITT counter groups.\

View File

@ -43,6 +43,11 @@ target_include_directories(${TARGET_NAME} PRIVATE
set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO})
# Workaround to avoid warnings during LTO build
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_RELEASE "-Wno-error=maybe-uninitialized -Wno-maybe-uninitialized")
endif()
# Failed because of OpenCL
# ie_add_api_validator_post_build_step(TARGET ${TARGET_NAME})

View File

@ -140,7 +140,7 @@ target_include_directories(${TARGET_NAME}_obj SYSTEM PRIVATE $<TARGET_PROPERTY:n
target_include_directories(${TARGET_NAME}_obj PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src"
"${CMAKE_CURRENT_BINARY_DIR}" # for static ie_plugins.hpp
"${IE_MAIN_SOURCE_DIR}/src/readers/ir_reader_v7" # for ie_ir_version.hpp
$<TARGET_PROPERTY:inference_engine_ir_v7_reader,SOURCE_DIR> # for ie_ir_version.hpp
$<TARGET_PROPERTY:${TARGET_NAME}_legacy,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${TARGET_NAME}_transformations,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${TARGET_NAME}_plugin_api,INTERFACE_INCLUDE_DIRECTORIES>)
@ -215,7 +215,7 @@ endif()
target_include_directories(${TARGET_NAME}_s PUBLIC
$<TARGET_PROPERTY:inference_engine_plugin_api,INTERFACE_INCLUDE_DIRECTORIES>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<BUILD_INTERFACE:${IE_MAIN_SOURCE_DIR}/src/legacy_api/src>)
$<BUILD_INTERFACE:$<TARGET_PROPERTY:${TARGET_NAME}_legacy,SOURCE_DIR>/src>)
if(WIN32)
set_target_properties(${TARGET_NAME}_s PROPERTIES COMPILE_PDB_NAME ${TARGET_NAME}_s)

View File

@ -39,7 +39,7 @@ target_compile_definitions(${TARGET_NAME}_obj PRIVATE IMPLEMENT_INFERENCE_ENGINE
target_include_directories(${TARGET_NAME}_obj PRIVATE
${PUBLIC_HEADERS_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/src
${IE_MAIN_SOURCE_DIR}/src/inference_engine/src # For CNNNetworkNGraphImpl
$<TARGET_PROPERTY:inference_engine,SOURCE_DIR>/src # For CNNNetworkNGraphImpl
$<TARGET_PROPERTY:inference_engine_transformations,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:inference_engine_plugin_api,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:ngraph,INTERFACE_INCLUDE_DIRECTORIES>

View File

@ -4,7 +4,7 @@
set(TARGET_NAME ieFuncTests)
set(INCLUDES ${IE_MAIN_SOURCE_DIR}/src/inference_engine/src)
set(INCLUDES $<TARGET_PROPERTY:inference_engine,SOURCE_DIR>/src)
set(LINK_LIBRARIES
gmock

View File

@ -8,7 +8,7 @@ add_library(cpuSpecificRtInfo STATIC ${IE_MAIN_SOURCE_DIR}/src/mkldnn_plugin/uti
${IE_MAIN_SOURCE_DIR}/src/mkldnn_plugin/utils/rt_info/memory_formats_attribute.cpp)
target_link_libraries(cpuSpecificRtInfo PRIVATE ngraph)
set(INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} ${IE_MAIN_SOURCE_DIR}/src/mkldnn_plugin)
set(INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} $<TARGET_PROPERTY:MKLDNNPlugin,SOURCE_DIR>)
set(DEPENDENCIES MKLDNNPlugin)
set(LINK_LIBRARIES funcSharedTests cpuSpecificRtInfo)
if (NGRAPH_ONNX_FRONTEND_ENABLE)

View File

@ -8,8 +8,8 @@ addIeTargetTest(
NAME ${TARGET_NAME}
ROOT ${CMAKE_CURRENT_SOURCE_DIR}
INCLUDES
${IE_MAIN_SOURCE_DIR}/src/mkldnn_plugin
${IE_MAIN_SOURCE_DIR}/src/mkldnn_plugin/nodes
$<TARGET_PROPERTY:MKLDNNPlugin,SOURCE_DIR>
$<TARGET_PROPERTY:MKLDNNPlugin,SOURCE_DIR>/nodes
$<TARGET_PROPERTY:openvino::conditional_compilation,INTERFACE_INCLUDE_DIRECTORIES>
OBJECT_FILES
$<TARGET_OBJECTS:MKLDNNPlugin_obj>

View File

@ -57,7 +57,7 @@ function(enable_vpu TARGET_NAME FLAG_NAME PLUGIN_NAME)
target_include_directories(${TARGET_NAME} PRIVATE
$<TARGET_PROPERTY:vpu_graph_transformer,INTERFACE_INCLUDE_DIRECTORIES>
${CMAKE_CURRENT_SOURCE_DIR}/myriad_tests
${IE_MAIN_SOURCE_DIR}/src/inference_engine/src
$<TARGET_PROPERTY:inference_engine,SOURCE_DIR>/src
${XLINK_INCLUDE}
${XLINK_PLATFORM_INCLUDE})
target_link_libraries(${TARGET_NAME} PRIVATE mvnc)

View File

@ -82,7 +82,7 @@ if (ENABLE_MYRIAD)
)
include_directories(
engines/vpu/myriad_tests/helpers
${IE_MAIN_SOURCE_DIR}/src/vpu/myriad_plugin
$<TARGET_PROPERTY:myriadPlugin,SOURCE_DIR>
${XLINK_INCLUDE}
${XLINK_PLATFORM_INCLUDE})

View File

@ -12,14 +12,6 @@ project("${CLDNN__PROJ_NAME}")
# ====================================== HELPER CONSTANT VARIABLES =====================================
# ======================================================================================================
# ======================================================================================================
if (ENABLE_ONEDNN_FOR_GPU)
ExternalProject_Get_property(onednn_gpu_build SOURCE_DIR)
ExternalProject_Get_property(onednn_gpu_build BINARY_DIR)
set(ONEDNN_TARGET_NAME onednn_gpu)
set(ONEDNN_INCLUDE_DIRS "${BINARY_DIR}/include/" "${SOURCE_DIR}/include/")
set(ONEDNN_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_STATIC_LIBRARY_PREFIX}onednn_gpu${CMAKE_STATIC_LIBRARY_SUFFIX}")
endif()
if(ENABLE_GPU_DEBUG_CAPS)
add_definitions(-DGPU_DEBUG_CONFIG=1)

View File

@ -67,12 +67,7 @@ target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE
)
if(ENABLE_ONEDNN_FOR_GPU)
add_dependencies("${CLDNN_BUILD__PROJ}" onednn_gpu_build)
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC ${ONEDNN_LIBRARY})
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)
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC onednn_gpu)
endif()
if(WIN32)

View File

@ -128,11 +128,7 @@ target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE
)
if(ENABLE_ONEDNN_FOR_GPU)
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC ${ONEDNN_LIBRARY})
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)
target_link_libraries("${CLDNN_BUILD__PROJ}" PUBLIC onednn_gpu)
endif()
if(COMMAND add_cpplint_target)

View File

@ -99,6 +99,11 @@ if(COMMAND set_ie_threading_interface_for)
set_ie_threading_interface_for("${CLDNN_BUILD__PROJ}")
endif()
# Workaround to avoid warnings during LTO build
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set_target_properties("${CLDNN_BUILD__PROJ}" PROPERTIES LINK_FLAGS_RELEASE "-Wno-error=maybe-uninitialized -Wno-maybe-uninitialized")
endif()
set_property(TARGET "${CLDNN_BUILD__PROJ}" PROPERTY PROJECT_LABEL "${CLDNN_BUILD__PROJ_LABEL}")
# Set library dependencies

View File

@ -17,7 +17,6 @@ add_subdirectory(reference)
add_subdirectory(shape_inference)
# WA for Tensor implementation via ie::Blob::Ptr
set(IE_SRC_ROOT "${IE_MAIN_SOURCE_DIR}/src/inference_engine/src")
set(IE_SHARED_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/src/ie_legacy/blob_factory.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/ie_legacy/ie_blob_common.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/ie_legacy/ie_layouts.cpp"
@ -28,7 +27,7 @@ set(MIXED_SRC ${IE_SHARED_SRCS}
set_property(SOURCE ${MIXED_SRC}
APPEND PROPERTY INCLUDE_DIRECTORIES
${IE_SRC_ROOT}
$<TARGET_PROPERTY:inference_engine,SOURCE_DIR>/src
$<TARGET_PROPERTY:inference_engine,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:inference_engine_plugin_api,INTERFACE_INCLUDE_DIRECTORIES>)

View File

@ -33,6 +33,6 @@ endif()
target_include_directories(${TARGET_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
ov_install_static_lib(${TARGET_NAME} ngraph)
ov_install_static_lib(${TARGET_NAME} openvino_common)
add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})

View File

@ -10,12 +10,12 @@ if(ENABLE_LTO)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
endif()
add_subdirectory(ittapi EXCLUDE_FROM_ALL)
add_subdirectory(ittapi)
add_subdirectory(itt_collector EXCLUDE_FROM_ALL)
add_subdirectory(zlib EXCLUDE_FROM_ALL)
add_subdirectory(cnpy EXCLUDE_FROM_ALL)
if(ENABLE_CLDNN)
add_subdirectory(ocl EXCLUDE_FROM_ALL)
add_subdirectory(ocl)
endif()
add_subdirectory(xbyak EXCLUDE_FROM_ALL)
@ -129,12 +129,6 @@ endif()
#
# oneDNN for GPU plugin
#
if (ANDROID OR (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
# oneDNN doesn't support old compilers and android builds for now, so we'll build GPU plugin without oneDNN
set(ENABLE_ONEDNN_FOR_GPU OFF CACHE BOOL "")
else()
set(ENABLE_ONEDNN_FOR_GPU ON CACHE BOOL "")
endif()
if(ENABLE_ONEDNN_FOR_GPU)
function(build_onednn_gpu)
@ -144,6 +138,10 @@ if(ENABLE_ONEDNN_FOR_GPU)
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)
ie_add_compiler_flags(-Wno-undef)
endif()
# Get processors count to limit number of threads spawned by make
include(ProcessorCount)
ProcessorCount(CORES_COUNT)
@ -158,9 +156,14 @@ if(ENABLE_ONEDNN_FOR_GPU)
EXCLUDE_FROM_ALL ON
CMAKE_ARGS "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
"-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}"
"-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}"
"-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}"
"-DCMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE=${ENABLE_LTO}"
"-DCMAKE_POLICY_DEFAULT_CMP0069=NEW"
"-DDNNL_CPU_RUNTIME=NONE"
"-DDNNL_GPU_RUNTIME=OCL"
"-DDNNL_GPU_RUNTIME=OCL"
"-DDNNL_LIBRARY_NAME=onednn_gpu"
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
"-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
@ -179,6 +182,23 @@ if(ENABLE_ONEDNN_FOR_GPU)
COMMAND ${CMAKE_COMMAND} -E echo "OneDNN $<CONFIG> build for GPU complete"
BUILD_BYPRODUCTS ${ONEDNN_OUTPUT_LIBRARY}
)
ExternalProject_Get_property(onednn_gpu_build SOURCE_DIR)
ExternalProject_Get_property(onednn_gpu_build BINARY_DIR)
# WA: create temp 'include' directory
file(MAKE_DIRECTORY "${BINARY_DIR}/include")
add_library(onednn_gpu STATIC IMPORTED GLOBAL)
set_target_properties(onednn_gpu PROPERTIES
IMPORTED_LOCATION ${ONEDNN_OUTPUT_LIBRARY}
INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${BINARY_DIR}/include>;$<BUILD_INTERFACE:${SOURCE_DIR}/include>"
INTERFACE_COMPILE_DEFINITIONS ENABLE_ONEDNN_FOR_GPU)
add_dependencies(onednn_gpu onednn_gpu_build)
# TODO: does not work for imported targets; need to import this target in
# OpenVINOConfig.cmake explicitly
# ov_install_static_lib(onednn_gpu gpu)
endfunction()
build_onednn_gpu()

View File

@ -11,10 +11,10 @@ if(ENABLE_PROFILING_ITT)
message(WARNING "Profiling option enabled, but no ITT library was found under INTEL_VTUNE_DIR")
endif()
else()
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ittapi ${CMAKE_BINARY_DIR}/_deps/ittapi)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ittapi ${CMAKE_BINARY_DIR}/_deps/ittapi EXCLUDE_FROM_ALL)
target_compile_definitions(ittnotify INTERFACE ENABLE_PROFILING_ITT)
if (UNIX)
if(CMAKE_COMPILER_IS_GNUCXX)
target_compile_options(ittnotify PRIVATE -Wno-undef)
endif()

View File

@ -46,7 +46,7 @@ set(CMAKE_CXX_FLAGS_RELEASE "")
# OpenCL has absolute paths to include directories
set(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION OFF)
add_subdirectory(icd_loader)
add_subdirectory(icd_loader EXCLUDE_FROM_ALL)
# override INTERFACE_INCLUDE_DIRECTORIES
set_property(TARGET OpenCL PROPERTY INTERFACE_INCLUDE_DIRECTORIES