c++ - mxnet 使用 intel mkl 构建总是抛出错误 "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll."

标签 c++ dll intel-mkl mxnet intel-mxnet

  • 操作系统:windows 10 64位
  • 编译器:vc2015 64bits update 3
  • MXnet:1.3.1

构建mxnet 1.3.1(mxnet1.4.0有bug,windows下无法构建,请查看14203了解更多详情)。

我可以用 cpp-package 构建 mxnet,但是当我调用 Executor 的 forward 函数时,它一直抛出错误

英特尔 MKL fatal error :无法加载 mkl_intel_thread.dll。

以下是我搭建mxnet的步骤

  1. git clone --recursive https://github.com/apache/incubator-mxnet网路
  2. cd mxnet
  3. 下载英特尔 mkl(w_mkl_2019.2.190.exe)
  4. 安装它
  5. 打开cmake3.11.0
  6. enter image description here
  7. enter image description here

    • 我禁用 cpp_package、opencv、cuda、USE_MKLML_MKL(否则 mshadow 将使用 openBLAS)。
    • 我也禁用了 USE_TENSORRT 和 USE_VTUNE
  8. 按配置,禁用BUILD_TESTING

  9. 再次按配置,全绿
  10. 按generate,全绿
  11. 打开 ALL_BUILD.vcxproj
  12. 选择发布版本
  13. 全部构建
  14. 所有绿色,除了安装项目失败

>文件无法创建目录:C:/Program Files/mxnet/lib。也许需要 1> 管理权限。

已经用admin打开了vc,还是一样的错误

  1. 将 Anaconda3 添加到 PATH 中
  2. 将 libmxnet.dll 和 C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.2.190\windows\redist\intel64_win\mkl\mkl_rt.dll 添加到操作系统可以找到的文件夹中
  3. 从 cmake gui 选择使用 cpp_package 构建
  4. 配置->生成
  5. 重新打开 ALL_BUILD.vcxproj
  6. 选择 ALL_BUILD->build
  7. 因为install不行,我把lib文件复制到build_cpu/install

enter image description here

  1. 因为op.h的lrs和wds没有声明类型,我需要为他们加上mx_float
  2. 写一个简单的程序,能编译
  3. 当我向前调用 Executor 时,程序抛出 Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.
  4. 将C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.2.190\windows\redist\intel64_win\mkl的mkl_intel_thread.dll添加到os可以找到的文件夹中 26.再次运行,还是一样的错误Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.

我的Anaconda3安装了mxnet,里面也有mkl_intel_thread.dll和mkl_rt.dll,不知是否有冲突,问题是我没有把Anaconda3的bin路径加到PATH中。

我试图将不同的 mkl_intel_thread.dll 和 mkl_rt.dll 复制到 exe 所在的文件夹中,但它们的每种组合都会给我同样的错误。

这些dll来自以下路径

  • C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.2.190\windows\redist\intel64_win\mkl
  • C:\Users\yyyy\Anaconda3\envs\gluon\Library\bin
  • C:\Users\yyyy\Anaconda3\Library\bin
  • C:\Users\yyyy\Anaconda3\pkgs\mkl-2019.1-144\Library\bin

有人知道如何解决这个问题吗?谢谢

最佳答案

这个问题应该是静态MKL链接引起的,这里有一些建议可能对你有帮助。

  1. 您是否尝试过为预加载库设置环境变量,

这是Linux

export LD_PRELOAD=/opt/intel/mkl/lib/intel64/libmkl_def.so:/opt/intel/mkl/lib/intel64/libmkl_avx2.so:/opt/intel/mkl/lib/intel64/libmkl_core.so:/opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so:/opt/intel/mkl/lib/intel64/libmkl_intel_thread.so:/opt/intel/lib/intel64_lin/libiomp5.so

在 Windows 中,通过 mkl/bin/mklvars.bat intel64 设置环境,然后在相同的环境中运行你的 python

或在 python 中手动添加库 sys.path.append("your path to the library") 或 Pyinstaller numpy "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll" ...

  1. 如果以上建议没有帮助,请尝试修改'CMakeList.txt'文件,将第44~47行更改为单动态链接并重新cmake安装:

    if(MSVC)
        set(LIBS ${LIBS} mkl_rt ${MKL_COMPILER_LIB_FILE} PARENT_SCOPE)
      else()
        set(LIBS ${LIBS} mkl_rt ${MKL_COMPILER_LIB_FILE} PARENT_SCOPE)
    

关于c++ - mxnet 使用 intel mkl 构建总是抛出错误 "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55017740/

相关文章:

c++ - 如何管理生成静态库和 dll 的构建库项目?

c++ - 将英特尔的 MKL(BLAS 和 LAPACK)链接到 GCC

c++ - 魔兽世界模拟器 C++ 每 X 分钟预定事件

c# - 使用 Assembly.LoadFile 时无法加载程序集异常

c++ - C++11 可以判断 std::thread 是否处于事件状态吗?

C++ 获取我自己的 dll 的 CLSID

c++ - C++ 中的英特尔 MKL 稀疏 QR 求解返回未初始化错误

c - 在多个 mkl_dss_solve 实例中使用一个 LU 分解

c++ - 如何使用 C++ 自动化将页眉或页脚插入到 Word 文档中

c++组合来自两个(或更多)参数包的值