【问题标题】:Link MKL statically in MPI program在 MPI 程序中静态链接 MKL
【发布时间】:2022-08-03 18:08:32
【问题描述】:

我有一个使用 openMP 和 MKL 的 Fortran MPI 程序。在我的个人计算机上,我会通过调用mpiifort Program.F90 -i8 -qmkl -fopenmp -o run 之类的东西来使用英特尔编译器进行编译,然后以mpirun ./run 的身份运行程序。

我想在集群上运行这个程序,在那里我可以访问英特尔 MPI 但没有其他库。因此我需要静态链接 MKL。从 Intel MKL Link Line Advisor 我获得以下信息,

-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -liomp5 -lpthread -lm -ldl

这条线的设置使得 MKL 将与我的代码所需的 openMP 并行化。但是,如果我尝试在集群上运行此代码,则会收到错误消息:error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory。似乎我链接并行化 MKL 的尝试并不是完全静态的,因为它仍然尝试动态链接。有什么方法可以规避这个问题,即以完全静态的方式链接 MKL 的 openMP 线程版本?

谢谢!

  • 您的链接行有-liomp5。拼写出来:使用明确的.a 版本。
  • 谢谢!这似乎已经解决了
  • 不过要非常小心。将多个 OpenMP 运行时链接到同一代码可能会导致性能下降,因为每个都使用自己的线程池...(您正在做的事情可能还可以,因为您仍然只有一个 OpenMNP 运行时,而可能不会在构建时将 OpenMP 静态链接到每个静态库!)

标签: linker fortran openmp intel-mkl


【解决方案1】:

加载共享库时似乎存在问题。请使用 Victor Eijkhout 指出的 libiomp5.a。它位于 /opt/intel/lib/intel64 下。这有助于根据您的要求以完全静态的方式链接 MKL 的 openMP 线程版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2015-10-18
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多