CMake option for using static MKL libraries

Fixes #70587

Pull Request resolved: https://github.com/pytorch/pytorch/pull/73069
Approved by: https://github.com/malfet
This commit is contained in:
Ashwin Hari 2022-03-07 19:32:33 +00:00 committed by PyTorch MergeBot
parent f3c6e8f720
commit 7ed73b2803
3 changed files with 33 additions and 3 deletions

View File

@ -304,6 +304,7 @@ set(MKLDNN_ENABLE_CONCURRENT_EXEC ${USE_MKLDNN})
cmake_dependent_option(
USE_MKLDNN_CBLAS "Use CBLAS in MKLDNN" OFF
"USE_MKLDNN" OFF)
option(USE_STATIC_MKL "Prefer to link with MKL statically (Unix only)" OFF)
option(USE_DISTRIBUTED "Use distributed" ON)
cmake_dependent_option(
USE_MPI "Use MPI for Caffe2. Only available if USE_DISTRIBUTED is on." ON

View File

@ -168,6 +168,26 @@ IF (EXISTS ${INTEL_OMP_DIR})
ENDIF()
ENDIF()
MACRO(GET_MKL_LIB_NAMES LIBRARIES INTERFACE MKL64)
cmake_parse_arguments("" "" "THREAD" "" ${ARGN})
SET(${LIBRARIES} mkl_${INTERFACE}${MKL64} mkl_core)
IF(_THREAD)
LIST(INSERT ${LIBRARIES} 1 ${_THREAD})
IF(UNIX AND ${USE_STATIC_MKL})
# The thread library defines symbols required by the other MKL libraries so also add it last
LIST(APPEND ${LIBRARIES} ${_THREAD})
ENDIF()
ENDIF()
IF(${USE_STATIC_MKL})
IF(UNIX)
list(TRANSFORM ${LIBRARIES} PREPEND "lib")
list(TRANSFORM ${LIBRARIES} APPEND ".a")
ELSE()
message(WARNING "Ignoring USE_STATIC_MKL")
ENDIF()
ENDIF()
ENDMACRO()
# Try linking multiple libs
MACRO(CHECK_ALL_LIBRARIES LIBRARIES OPENMP_TYPE OPENMP_LIBRARY _name _list _flags)
# This macro checks for the existence of the combination of libraries given by _list.
@ -304,8 +324,9 @@ IF (NOT "${MKL_THREADING}" STREQUAL "SEQ")
FOREACH(mkl64 ${mkl64s} "")
FOREACH(mklthread ${mklthreads})
IF (NOT MKL_LIBRARIES)
GET_MKL_LIB_NAMES(mkl_lib_names "${mkliface}" "${mkl64}" THREAD "${mklthread}")
CHECK_ALL_LIBRARIES(MKL_LIBRARIES MKL_OPENMP_TYPE MKL_OPENMP_LIBRARY cblas_sgemm
"mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};${mkl_pthread};${mkl_m};${mkl_dl}" "")
"${mkl_lib_names};${mklrtl};${mkl_pthread};${mkl_m};${mkl_dl}" "")
ENDIF (NOT MKL_LIBRARIES)
ENDFOREACH(mklthread)
ENDFOREACH(mkl64)
@ -317,8 +338,9 @@ ENDIF (NOT "${MKL_THREADING}" STREQUAL "SEQ")
FOREACH(mkliface ${mklifaces})
FOREACH(mkl64 ${mkl64s} "")
IF (NOT MKL_LIBRARIES)
GET_MKL_LIB_NAMES(mkl_lib_names "${mkliface}" "${mkl64}" THREAD "mkl_sequential")
CHECK_ALL_LIBRARIES(MKL_LIBRARIES MKL_OPENMP_TYPE MKL_OPENMP_LIBRARY cblas_sgemm
"mkl_${mkliface}${mkl64};mkl_sequential;mkl_core;${mkl_m};${mkl_dl}" "")
"${mkl_lib_names};${mkl_m};${mkl_dl}" "")
IF (MKL_LIBRARIES)
SET(mklseq "_sequential")
ENDIF (MKL_LIBRARIES)
@ -331,8 +353,9 @@ FOREACH(mklrtl ${mklrtls} "")
FOREACH(mkliface ${mklifaces})
FOREACH(mkl64 ${mkl64s} "")
IF (NOT MKL_LIBRARIES)
GET_MKL_LIB_NAMES(mkl_lib_names "${mkliface}" "${mkl64}" THREAD "${mklthread}")
CHECK_ALL_LIBRARIES(MKL_LIBRARIES MKL_OPENMP_TYPE MKL_OPENMP_LIBRARY cblas_sgemm
"mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m};${mkl_dl}" "")
"${mkl_lib_names};${mklrtl};pthread;${mkl_m};${mkl_dl}" "")
ENDIF (NOT MKL_LIBRARIES)
ENDFOREACH(mkl64)
ENDFOREACH(mkliface)
@ -341,6 +364,9 @@ ENDFOREACH(mklrtl)
# Check for older versions
IF (NOT MKL_LIBRARIES)
SET(MKL_VERSION 900)
if (USE_STATIC_MKL)
message(WARNING "Ignoring USE_STATIC_MKL")
endif()
CHECK_ALL_LIBRARIES(MKL_LIBRARIES MKL_OPENMP_TYPE MKL_OPENMP_LIBRARY cblas_sgemm
"mkl;guide;pthread;m" "")
ENDIF (NOT MKL_LIBRARIES)

View File

@ -50,6 +50,9 @@
# MKLDNN_CPU_RUNTIME
# MKL-DNN threading mode: TBB or OMP (default)
#
# USE_STATIC_MKL
# Prefer to link with MKL statically - Unix only
#
# USE_NNPACK=0
# disables NNPACK build
#