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:
<img width="1049" alt="image" src="https://github.com/user-attachments/assets/38692142-bfca-4c98-8092-6e105c82bb13">
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.
<img width="863" alt="image" src="https://github.com/user-attachments/assets/834f6cee-7e6d-4d74-b2bc-8a270f05e429">

Reference:
<img width="482" alt="image" src="https://github.com/user-attachments/assets/8184dadb-f230-4062-a49f-51df1d7285f5">

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
This commit is contained in:
Xu Han
2024-07-15 19:28:11 +00:00
committed by PyTorch MergeBot
parent a7cfe40c9b
commit f1456c74a0

View File

@ -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(WIN32)
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")
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")