Compile Eigen + Intel MKL with CMake

Compile Eigen + Intel MKL with CMake

本文关键字:with CMake MKL Intel Eigen Compile      更新时间:2023-10-16

我想与eigen3一起使用英特尔MKL库(包括pardiso求解器)。当我手动指定CMAKE中的编译器选项时,我会工作(因为我遵循了Intel Link Line Advisor)。但是我知道通过FindBLAS.cmake以及BLA_VENDOR环境变量有一种预先区分的方法,尤其是使用EIGEN修改的FindBLAS.cmake。只有我一直坚持下去。我应该如何写我的CMakeLists.txt

我应该强调使用群集上的最新eigen3版本,因此请在我的家居中"安装"它。同样只使用

cmake /path/to/eigen3 -DCMAKE_INSTALL_PREFIX:PATH=$HOME/opt
make install

我没有得到第三方CMAKE文件。


编辑

我找到了一个似乎正常工作的解决方案:

cmake_minimum_required(VERSION 2.8.12)
project(main)
set(PROJECT_LIBS "")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# find Eigen3, use an environment variable that specifies the root of the Eigen download:
#   export EIGENPATH="/path/to/clone/of/eigen3/"
list(APPEND CMAKE_MODULE_PATH "$ENV{EIGENPATH}/cmake/")
find_package(Eigen3 3.3.0)
include_directories(${EIGEN3_INCLUDE_DIRS})
# enable Intel-MKL (only for Intel compilers)
# NB requires correct specification of BLA_VENDOR, e.g.
#   export BLA_VENDOR=Intel10_64lp_seq
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
  find_package(BLAS)
  include_directories(${BLAS_INCLUDE_DIRS})
  set(PROJECT_LIBS ${BLAS_LIBRARIES})
  add_definitions(-DEIGEN_USE_MKL_ALL)
endif()
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBS})

请注意,重要的是要指出特征的"安装"对此解决方案不起作用,因为在这里pkg-config上的小猪在这里还不够。IE。一个人应该只下载/克隆特征并将CMAKE指向下载位置。

回答这一点可能有点晚了,但是对于最近的cmake版本,您可以使用以下内容。这可能是一个更干净的解决方案。

cmake_minimum_required(VERSION 2.8.3)
project(main)
set(CMAKE_CXX_STANDARD 14)
find_package(Eigen3 REQUIRED)
include_directories(
    ${EIGEN3_INCLUDE_DIRS}
)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
    set(BLA_VENDOR Intel10_64lp)
    add_definitions(-DEIGEN_USE_MKL_ALL)
endif()
find_pacakge(BLAS REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} Eigen3::Eigen ${BLAS_LIBRARIES})

确保您已经运行了oneapi/mkl设置vars脚本。

source /opt/intel/oneapi/setvars.sh for oneapi(最好将其添加到.bashrc