From f1456c74a09ec33d7739814e13e5745408bf8b6c Mon Sep 17 00:00:00 2001 From: Xu Han Date: Mon, 15 Jul 2024 19:28:11 +0000 Subject: [PATCH] Fix mkl-static issue for Windows. (#130697) Background: We found the pytorch Windows release/2.4 performance regression: https://github.com/pytorch/pytorch/issues/130619 After some debug works, I found the pytorch Windows static mkl build options are wrong: image 1. Thread lib is wrong. 2. Miss `openmp` lib and config. > Debug history: https://github.com/pytorch/pytorch/issues/130619#issuecomment-2226782504 and https://github.com/pytorch/pytorch/issues/130619#issuecomment-2226418611 This PR will fix `mkl-static` build options issue. image Reference: image https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html#gs.c6izlg Pull Request resolved: https://github.com/pytorch/pytorch/pull/130697 Approved by: https://github.com/jgong5, https://github.com/atalman --- cmake/Modules/FindMKL.cmake | 44 +++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/cmake/Modules/FindMKL.cmake b/cmake/Modules/FindMKL.cmake index daaa5dd24f0013..a9276de9cd0216 100644 --- a/cmake/Modules/FindMKL.cmake +++ b/cmake/Modules/FindMKL.cmake @@ -88,25 +88,41 @@ ELSE ("${SIZE_OF_VOIDP}" EQUAL 8) SET(iccvers "ia32") SET(mkl64s) ENDIF ("${SIZE_OF_VOIDP}" EQUAL 8) -IF(CMAKE_COMPILER_IS_GNUCC) - IF ("${MKL_THREADING}" STREQUAL "TBB") - SET(mklthreads "mkl_tbb_thread") - SET(mklrtls "tbb") - ELSE() - SET(mklthreads "mkl_gnu_thread" "mkl_intel_thread") - SET(mklrtls "gomp" "iomp5") - ENDIF() - SET(mklifaces "intel" "gf") -ELSE(CMAKE_COMPILER_IS_GNUCC) + +IF(WIN32) IF ("${MKL_THREADING}" STREQUAL "TBB") SET(mklthreads "mkl_tbb_thread") - SET(mklrtls "tbb") + IF (CMAKE_BUILD_TYPE STREQUAL Debug) + SET(mklrtls "tbb12_debug") + ELSE () + SET(mklrtls "tbb12") + ENDIF () ELSE() SET(mklthreads "mkl_intel_thread") - SET(mklrtls "iomp5" "guide") + SET(mklrtls "libiomp5md") ENDIF() - SET(mklifaces "intel") -ENDIF (CMAKE_COMPILER_IS_GNUCC) + SET(mklifaces "intel") +ELSE(WIN32) + IF(CMAKE_COMPILER_IS_GNUCC) + IF ("${MKL_THREADING}" STREQUAL "TBB") + SET(mklthreads "mkl_tbb_thread") + SET(mklrtls "tbb") + ELSE() + SET(mklthreads "mkl_gnu_thread" "mkl_intel_thread") + SET(mklrtls "gomp" "iomp5") + ENDIF() + SET(mklifaces "intel" "gf") + ELSE(CMAKE_COMPILER_IS_GNUCC) + IF ("${MKL_THREADING}" STREQUAL "TBB") + SET(mklthreads "mkl_tbb_thread") + SET(mklrtls "tbb") + ELSE() + SET(mklthreads "mkl_intel_thread") + SET(mklrtls "iomp5" "guide") + ENDIF() + SET(mklifaces "intel") + ENDIF (CMAKE_COMPILER_IS_GNUCC) +ENDIF(WIN32) # Kernel libraries dynamically loaded SET(mklkerlibs "mc" "mc3" "nc" "p4n" "p4m" "p4m3" "p4p" "def")