Make MKL detection robust.

This commit is contained in:
Ye Luo 2020-10-27 19:17:18 -05:00
parent b1fada428b
commit 3184605c01
2 changed files with 33 additions and 10 deletions

View File

@ -15,11 +15,10 @@ IF(DEFINED MKL_ROOT)
message(FATAL_ERROR "MKL_INCLUDE_DIRECTORIES not set. \"mkl.h\" not found in MKL_ROOT/(${SUFFIXES})") message(FATAL_ERROR "MKL_INCLUDE_DIRECTORIES not set. \"mkl.h\" not found in MKL_ROOT/(${SUFFIXES})")
ENDIF () ENDIF ()
ELSE(DEFINED MKL_ROOT) ELSE(DEFINED MKL_ROOT)
# Finding and setting the MKL_INCLUDE_DIRECTORIES based on MKLROOT, MKL_HOME, $ENV{MKLROOT}, $ENV{MKL_ROOT}, $ENV{MKL_HOME} # Finding and setting the MKL_INCLUDE_DIRECTORIES based on $ENV{MKLROOT}, $ENV{MKL_ROOT}, $ENV{MKL_HOME}
# Extremely Basic Support of common mkl module environment variables # Extremely Basic Support of common mkl module environment variables
# or -DMKLROOT/-DMKL_HOME instead of preferred -DMKL_ROOT
FIND_PATH(MKL_INCLUDE_DIRECTORIES "mkl.h" FIND_PATH(MKL_INCLUDE_DIRECTORIES "mkl.h"
HINTS ${MKLROOT} ${MKL_HOME} $ENV{MKLROOT} $ENV{MKL_ROOT} $ENV{MKL_HOME} HINTS $ENV{MKLROOT} $ENV{MKL_ROOT} $ENV{MKL_HOME}
PATH_SUFFIXES include NO_CMAKE_SYSTEM_PATH) PATH_SUFFIXES include NO_CMAKE_SYSTEM_PATH)
IF(MKL_INCLUDE_DIRECTORIES) IF(MKL_INCLUDE_DIRECTORIES)
STRING(REPLACE "/include" "" MKL_ROOT ${MKL_INCLUDE_DIRECTORIES}) STRING(REPLACE "/include" "" MKL_ROOT ${MKL_INCLUDE_DIRECTORIES})
@ -30,7 +29,7 @@ ELSE(DEFINED MKL_ROOT)
ENDIF(DEFINED MKL_ROOT) ENDIF(DEFINED MKL_ROOT)
IF(MKL_INCLUDE_DIRECTORIES) IF(MKL_INCLUDE_DIRECTORIES)
MESSAGE("MKL_INCLUDE_DIRECTORIES: ${MKL_INCLUDE_DIRECTORIES}") MESSAGE(STATUS "MKL_INCLUDE_DIRECTORIES: ${MKL_INCLUDE_DIRECTORIES}")
ELSE(MKL_INCLUDE_DIRECTORIES) ELSE(MKL_INCLUDE_DIRECTORIES)
IF(CMAKE_CXX_COMPILER_ID MATCHES "Intel") IF(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
MESSAGE(FATAL_ERROR "Intel's standard compilervar.sh sets the env variable MKLROOT.\n" MESSAGE(FATAL_ERROR "Intel's standard compilervar.sh sets the env variable MKLROOT.\n"

View File

@ -426,11 +426,6 @@ IF (ENABLE_GCOV)
ENDIF() ENDIF()
ENDIF(ENABLE_GCOV) ENDIF(ENABLE_GCOV)
# AFQMC requires MKL sparse for good performance (roughly a factor of 2x)
IF (BUILD_AFQMC AND NOT MKL_FOUND)
MESSAGE(WARNING "AFQMC - MKL not found, using simple sparse matrix routines. Link with MKL sparse libraries for better performance.")
ENDIF()
IF (BUILD_AFQMC AND NOT APPLE) IF (BUILD_AFQMC AND NOT APPLE)
LINK_LIBRARIES("rt") LINK_LIBRARIES("rt")
ENDIF() ENDIF()
@ -519,14 +514,43 @@ ENDIF(QMC_MPI)
#------------------------------------------------------------------- #-------------------------------------------------------------------
# Add Math::BLAS_LAPACK target # Add Math::BLAS_LAPACK target
ADD_LIBRARY(Math::BLAS_LAPACK INTERFACE IMPORTED) ADD_LIBRARY(Math::BLAS_LAPACK INTERFACE IMPORTED)
find_package(LAPACK REQUIRED)
FOREACH(MKL_LIB_PATH IN ITEMS ${MKL_ROOT} $ENV{MKL_ROOT} $ENV{MKLROOT} $ENV{MKL_HOME})
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${MKL_LIB_PATH}/lib/intel64)
ENDFOREACH()
IF(NOT BLA_VENDOR)
MESSAGE(STATUS "Trying to find the LAPACK from Intel MKL ...")
IF(QMC_OMP)
SET(BLA_VENDOR Intel10_64lp)
ELSE()
SET(BLA_VENDOR Intel10_64lp_seq)
ENDIF()
find_package(LAPACK QUIET)
IF(NOT LAPACK_FOUND)
MESSAGE(STATUS "MKL not found.")
MESSAGE(STATUS "Trying to find alternative LAPACK libraries")
SET(BLA_VENDOR All)
find_package(LAPACK REQUIRED)
ENDIF()
ELSE()
MESSAGE(STATUS "Trying to find LAPACK library as requested BLA_VENDOR=${BLA_VENDOR}")
find_package(LAPACK REQUIRED)
ENDIF()
MESSAGE(STATUS "LAPACK linker flags: ${LAPACK_LINKER_FLAGS}") MESSAGE(STATUS "LAPACK linker flags: ${LAPACK_LINKER_FLAGS}")
MESSAGE(STATUS "LAPACK libraries: ${LAPACK_LIBRARIES}") MESSAGE(STATUS "LAPACK libraries: ${LAPACK_LIBRARIES}")
SET_TARGET_PROPERTIES(Math::BLAS_LAPACK PROPERTIES INTERFACE_LINK_LIBRARIES "${LAPACK_LINKER_FLAGS};${LAPACK_LIBRARIES}") SET_TARGET_PROPERTIES(Math::BLAS_LAPACK PROPERTIES INTERFACE_LINK_LIBRARIES "${LAPACK_LINKER_FLAGS};${LAPACK_LIBRARIES}")
# Detects MKL header files and other components.
IF(LAPACK_LIBRARIES MATCHES "mkl_core") IF(LAPACK_LIBRARIES MATCHES "mkl_core")
INCLUDE(CMake/FindMKL.cmake) INCLUDE(CMake/FindMKL.cmake)
ENDIF() ENDIF()
# AFQMC requires MKL sparse for good performance (roughly a factor of 2x)
IF (BUILD_AFQMC AND NOT MKL_FOUND)
MESSAGE(WARNING "AFQMC - MKL not found, using simple sparse matrix routines. Link with MKL sparse libraries for better performance.")
ENDIF()
#------------------------------------------------------------------- #-------------------------------------------------------------------
# set up scalar/vector math libraries # set up scalar/vector math libraries
#------------------------------------------------------------------- #-------------------------------------------------------------------