From c1082fa7715a34b51d4683064cb1de07fe5de47a Mon Sep 17 00:00:00 2001 From: "Yan, Zhiwei" Date: Wed, 13 Dec 2023 02:19:50 +0000 Subject: [PATCH 1/6] Build oneDNN for xpu as ExternalProject --- cmake/Dependencies.cmake | 2 ++ cmake/External/xpumkldnn.cmake | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 cmake/External/xpumkldnn.cmake diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index bcbb982cb5098..850b4c4aa72b5 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -1359,6 +1359,8 @@ if(USE_NCCL) endif() endif() +include(${CMAKE_CURRENT_LIST_DIR}/External/xpumkldnn.cmake) + # ---[ UCC if(USE_UCC) if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") diff --git a/cmake/External/xpumkldnn.cmake b/cmake/External/xpumkldnn.cmake new file mode 100644 index 0000000000000..8b6fd6cd45d53 --- /dev/null +++ b/cmake/External/xpumkldnn.cmake @@ -0,0 +1,34 @@ +message("xxxxxxxxxxxxxxxxxx In xpumkldnn building process xxxxxxxxxxxxxxxxxx") + + +set(MAKE_COMMAND "cmake" "--build" ".") + +ExternalProject_Add(xpumkldnn_external + SOURCE_DIR ${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn + BUILD_IN_SOURCE 0 + CMAKE_ARGS -DCMAKE_C_COMPILER=icx + -DCMAKE_CXX_COMPILER=icpx + -DCMAKE_CXX_COMPILER_ID=IntelLLVM + -DDNNL_GPU_RUNTIME=SYCL + -DDNNL_CPU_RUNTIME=THREADPOOL + -DDNNL_BUILD_TESTS=OFF + -DDNNL_BUILD_EXAMPLES=OFF + -DDNNL_LIBRARY_TYPE=STATIC + -DDNNL_DPCPP_HOST_COMPILER=g++ + -G Ninja + BUILD_COMMAND ${MAKE_COMMAND} + INSTALL_COMMAND "" +) + +ExternalProject_Get_Property(xpumkldnn_external BINARY_DIR) +set(__XPU__MKLDNN_BUILD_DIR ${BINARY_DIR}) + +set(XPU_MKLDNN_LIBRARIES ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) +set(XPU_MKLDNN_INCLUDE ${__XPU_MKLDNN_BUILD_DIR}/include) +set(xpumkldnn_dep xpumkldnn_external) +add_library(xpumkldnn INTERFACE) +add_dependencies(xpumkldnn xpumkldnn_dep) +target_link_libraries(xpumkldnn INTERFACE ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) +target_include_directories(xpumkldnn INTERFACE ${XPU_MKLDNN_INCLUDE}) + +message("xxxxxxxxxxxxxxxxxx In xpumkldnn building process xxxxxxxxxxxxxxxxxx") \ No newline at end of file From b146f7d6b8f7cba9a7f31594c130b52e146b3eba Mon Sep 17 00:00:00 2001 From: "Yan, Zhiwei" Date: Thu, 14 Dec 2023 03:30:24 +0000 Subject: [PATCH 2/6] Rename xpumkldnn project naming --- cmake/Dependencies.cmake | 7 +++++-- cmake/External/xpumkldnn.cmake | 23 ++++++++++++++--------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 850b4c4aa72b5..81934b6be1ec0 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -1359,8 +1359,6 @@ if(USE_NCCL) endif() endif() -include(${CMAKE_CURRENT_LIST_DIR}/External/xpumkldnn.cmake) - # ---[ UCC if(USE_UCC) if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") @@ -1783,6 +1781,11 @@ if(NOT INTERN_BUILD_MOBILE) message(WARNING "MKLDNN could not be found.") caffe2_update_option(USE_MKLDNN OFF) endif() + + # Build mkldnn for Intel GPU + if(USE_XPU) + include(${CMAKE_CURRENT_LIST_DIR}/External/xpumkldnn.cmake) + endif() else() message("disabling MKLDNN because USE_MKLDNN is not set") endif() diff --git a/cmake/External/xpumkldnn.cmake b/cmake/External/xpumkldnn.cmake index 8b6fd6cd45d53..0e102c58293d0 100644 --- a/cmake/External/xpumkldnn.cmake +++ b/cmake/External/xpumkldnn.cmake @@ -1,9 +1,14 @@ -message("xxxxxxxxxxxxxxxxxx In xpumkldnn building process xxxxxxxxxxxxxxxxxx") +set(MAKE_COMMAND "cmake" "--build" ".") -set(MAKE_COMMAND "cmake" "--build" ".") +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(DNNL_DPCPP_HOST_COMPILER "g++") + # g++ is soft linked to /usr/bin/cxx, oneDNN woule not treat it as an absolute path +else() + set(DNNL_DPCPP_HOST_COMPILER DEFAULT) +endif() -ExternalProject_Add(xpumkldnn_external +ExternalProject_Add(xpumkldnn_proj SOURCE_DIR ${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn BUILD_IN_SOURCE 0 CMAKE_ARGS -DCMAKE_C_COMPILER=icx @@ -14,21 +19,21 @@ ExternalProject_Add(xpumkldnn_external -DDNNL_BUILD_TESTS=OFF -DDNNL_BUILD_EXAMPLES=OFF -DDNNL_LIBRARY_TYPE=STATIC - -DDNNL_DPCPP_HOST_COMPILER=g++ - -G Ninja + -DDNNL_DPCPP_HOST_COMPILER=${DNNL_DPCPP_HOST_COMPILER} # Use global cxx compiler as host compiler + -G ${CMAKE_GENERATOR} # Align Generator to Torch BUILD_COMMAND ${MAKE_COMMAND} INSTALL_COMMAND "" ) -ExternalProject_Get_Property(xpumkldnn_external BINARY_DIR) +ExternalProject_Get_Property(xpumkldnn_proj BINARY_DIR) set(__XPU__MKLDNN_BUILD_DIR ${BINARY_DIR}) set(XPU_MKLDNN_LIBRARIES ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) -set(XPU_MKLDNN_INCLUDE ${__XPU_MKLDNN_BUILD_DIR}/include) -set(xpumkldnn_dep xpumkldnn_external) +set(XPU_MKLDNN_INCLUDE ${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn/include) +set(xpumkldnn_dep xpumkldnn_proj) add_library(xpumkldnn INTERFACE) add_dependencies(xpumkldnn xpumkldnn_dep) target_link_libraries(xpumkldnn INTERFACE ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) target_include_directories(xpumkldnn INTERFACE ${XPU_MKLDNN_INCLUDE}) -message("xxxxxxxxxxxxxxxxxx In xpumkldnn building process xxxxxxxxxxxxxxxxxx") \ No newline at end of file +set(XPUMKLDNN_FOUND TRUE) From 46182f4c4551c9b3b3e1371e053c3e4d70b96253 Mon Sep 17 00:00:00 2001 From: "Yan, Zhiwei" Date: Thu, 14 Dec 2023 03:31:58 +0000 Subject: [PATCH 3/6] format --- cmake/External/xpumkldnn.cmake | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cmake/External/xpumkldnn.cmake b/cmake/External/xpumkldnn.cmake index 0e102c58293d0..2ce1fb33dc081 100644 --- a/cmake/External/xpumkldnn.cmake +++ b/cmake/External/xpumkldnn.cmake @@ -1,6 +1,3 @@ -set(MAKE_COMMAND "cmake" "--build" ".") - - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(DNNL_DPCPP_HOST_COMPILER "g++") # g++ is soft linked to /usr/bin/cxx, oneDNN woule not treat it as an absolute path @@ -8,6 +5,7 @@ else() set(DNNL_DPCPP_HOST_COMPILER DEFAULT) endif() +set(MAKE_COMMAND "cmake" "--build" ".") ExternalProject_Add(xpumkldnn_proj SOURCE_DIR ${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn BUILD_IN_SOURCE 0 @@ -27,7 +25,6 @@ ExternalProject_Add(xpumkldnn_proj ExternalProject_Get_Property(xpumkldnn_proj BINARY_DIR) set(__XPU__MKLDNN_BUILD_DIR ${BINARY_DIR}) - set(XPU_MKLDNN_LIBRARIES ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) set(XPU_MKLDNN_INCLUDE ${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn/include) set(xpumkldnn_dep xpumkldnn_proj) From ff29573bb263503f57df2c556f9b53ff70bd5a4b Mon Sep 17 00:00:00 2001 From: "Yan, Zhiwei" Date: Thu, 21 Dec 2023 07:04:23 +0000 Subject: [PATCH 4/6] Rename depencies cmake name --- cmake/Dependencies.cmake | 2 +- cmake/External/{xpumkldnn.cmake => XPUMKLDNN.cmake} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename cmake/External/{xpumkldnn.cmake => XPUMKLDNN.cmake} (100%) diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 81934b6be1ec0..c46bf63aed2b0 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -1784,7 +1784,7 @@ if(NOT INTERN_BUILD_MOBILE) # Build mkldnn for Intel GPU if(USE_XPU) - include(${CMAKE_CURRENT_LIST_DIR}/External/xpumkldnn.cmake) + include(${CMAKE_CURRENT_LIST_DIR}/External/XPUMKLDNN.cmake) endif() else() message("disabling MKLDNN because USE_MKLDNN is not set") diff --git a/cmake/External/xpumkldnn.cmake b/cmake/External/XPUMKLDNN.cmake similarity index 100% rename from cmake/External/xpumkldnn.cmake rename to cmake/External/XPUMKLDNN.cmake From c2671856b3d26b31ea659a6aa4d8b17125748b9f Mon Sep 17 00:00:00 2001 From: "Yan, Zhiwei" Date: Fri, 22 Dec 2023 06:28:09 +0000 Subject: [PATCH 5/6] Uinfy cpu&xpu oneDNN cmake --- cmake/Dependencies.cmake | 5 ----- cmake/External/XPUMKLDNN.cmake | 36 ----------------------------- cmake/Modules/FindMKLDNN.cmake | 41 ++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 41 deletions(-) delete mode 100644 cmake/External/XPUMKLDNN.cmake diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index c46bf63aed2b0..bcbb982cb5098 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -1781,11 +1781,6 @@ if(NOT INTERN_BUILD_MOBILE) message(WARNING "MKLDNN could not be found.") caffe2_update_option(USE_MKLDNN OFF) endif() - - # Build mkldnn for Intel GPU - if(USE_XPU) - include(${CMAKE_CURRENT_LIST_DIR}/External/XPUMKLDNN.cmake) - endif() else() message("disabling MKLDNN because USE_MKLDNN is not set") endif() diff --git a/cmake/External/XPUMKLDNN.cmake b/cmake/External/XPUMKLDNN.cmake deleted file mode 100644 index 2ce1fb33dc081..0000000000000 --- a/cmake/External/XPUMKLDNN.cmake +++ /dev/null @@ -1,36 +0,0 @@ -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(DNNL_DPCPP_HOST_COMPILER "g++") - # g++ is soft linked to /usr/bin/cxx, oneDNN woule not treat it as an absolute path -else() - set(DNNL_DPCPP_HOST_COMPILER DEFAULT) -endif() - -set(MAKE_COMMAND "cmake" "--build" ".") -ExternalProject_Add(xpumkldnn_proj - SOURCE_DIR ${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn - BUILD_IN_SOURCE 0 - CMAKE_ARGS -DCMAKE_C_COMPILER=icx - -DCMAKE_CXX_COMPILER=icpx - -DCMAKE_CXX_COMPILER_ID=IntelLLVM - -DDNNL_GPU_RUNTIME=SYCL - -DDNNL_CPU_RUNTIME=THREADPOOL - -DDNNL_BUILD_TESTS=OFF - -DDNNL_BUILD_EXAMPLES=OFF - -DDNNL_LIBRARY_TYPE=STATIC - -DDNNL_DPCPP_HOST_COMPILER=${DNNL_DPCPP_HOST_COMPILER} # Use global cxx compiler as host compiler - -G ${CMAKE_GENERATOR} # Align Generator to Torch - BUILD_COMMAND ${MAKE_COMMAND} - INSTALL_COMMAND "" -) - -ExternalProject_Get_Property(xpumkldnn_proj BINARY_DIR) -set(__XPU__MKLDNN_BUILD_DIR ${BINARY_DIR}) -set(XPU_MKLDNN_LIBRARIES ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) -set(XPU_MKLDNN_INCLUDE ${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn/include) -set(xpumkldnn_dep xpumkldnn_proj) -add_library(xpumkldnn INTERFACE) -add_dependencies(xpumkldnn xpumkldnn_dep) -target_link_libraries(xpumkldnn INTERFACE ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) -target_include_directories(xpumkldnn INTERFACE ${XPU_MKLDNN_INCLUDE}) - -set(XPUMKLDNN_FOUND TRUE) diff --git a/cmake/Modules/FindMKLDNN.cmake b/cmake/Modules/FindMKLDNN.cmake index e62d86897fee2..61da4be76b7b3 100644 --- a/cmake/Modules/FindMKLDNN.cmake +++ b/cmake/Modules/FindMKLDNN.cmake @@ -18,6 +18,47 @@ IF(NOT MKLDNN_FOUND) SET(IDEEP_ROOT "${PROJECT_SOURCE_DIR}/third_party/ideep") SET(MKLDNN_ROOT "${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn") + + if(USE_XPU) # Build oneDNN GPU library + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(DNNL_HOST_COMPILER "g++") + # g++ is soft linked to /usr/bin/cxx, oneDNN woule not treat it as an absolute path + else() + set(DNNL_HOST_COMPILER DEFAULT) + endif() + + set(MAKE_COMMAND "cmake" "--build" ".") + ExternalProject_Add(xpu_mkldnn_proj + SOURCE_DIR ${MKLDNN_ROOT} + BUILD_IN_SOURCE 0 + CMAKE_ARGS -DCMAKE_C_COMPILER=icx + -DCMAKE_CXX_COMPILER=icpx + -DCMAKE_CXX_COMPILER_ID=IntelLLVM + -DDNNL_GPU_RUNTIME=SYCL + -DDNNL_CPU_RUNTIME=THREADPOOL + -DDNNL_BUILD_TESTS=OFF + -DDNNL_BUILD_EXAMPLES=OFF + -DDNNL_LIBRARY_TYPE=STATIC + -DDNNL_DPCPP_HOST_COMPILER=${DNNL_HOST_COMPILER} # Use global cxx compiler as host compiler + -G ${CMAKE_GENERATOR} # Align Generator to Torch + BUILD_COMMAND ${MAKE_COMMAND} + INSTALL_COMMAND "" + ) + + ExternalProject_Get_Property(xpu_mkldnn_proj BINARY_DIR) + set(__XPU__MKLDNN_BUILD_DIR ${BINARY_DIR}) + set(XPU_MKLDNN_LIBRARIES ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) + set(XPU_MKLDNN_INCLUDE ${__XPU_MKLDNN_BUILD_DIR}/src/include) + set(xpu_mkldnn_dep xpu_mkldnn_proj) + # This target would be further linked to libtorch_xpu.so. + # The libtorch_xpu.so would contain Conv&GEMM operators that depend on + # oneDNN primitive implementations inside libdnnl.a. + add_library(xpu_mkldnn INTERFACE) + add_dependencies(xpu_mkldnn xpu_mkldnn_dep) + target_link_libraries(xpu_mkldnn INTERFACE ${__XPU_MKLDNN_BUILD_DIR}/src/libdnnl.a) + target_include_directories(xpu_mkldnn INTERFACE ${XPU_MKLDNN_INCLUDE}) + endif() + IF(NOT APPLE AND NOT WIN32 AND NOT BUILD_LITE_INTERPRETER) MESSAGE("-- Will build oneDNN Graph") SET(LLGA_ROOT "${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn") From feec482e522b31aa8b8c430700bf831235c97cab Mon Sep 17 00:00:00 2001 From: "Yan, Zhiwei" Date: Fri, 22 Dec 2023 06:53:00 +0000 Subject: [PATCH 6/6] fix typo --- cmake/Modules/FindMKLDNN.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/FindMKLDNN.cmake b/cmake/Modules/FindMKLDNN.cmake index 61da4be76b7b3..4aaee670b6b10 100644 --- a/cmake/Modules/FindMKLDNN.cmake +++ b/cmake/Modules/FindMKLDNN.cmake @@ -22,7 +22,7 @@ IF(NOT MKLDNN_FOUND) if(USE_XPU) # Build oneDNN GPU library if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(DNNL_HOST_COMPILER "g++") - # g++ is soft linked to /usr/bin/cxx, oneDNN woule not treat it as an absolute path + # g++ is soft linked to /usr/bin/cxx, oneDNN would not treat it as an absolute path else() set(DNNL_HOST_COMPILER DEFAULT) endif()