【问题标题】:Segmentation fault during running for mkl's interfacemkl 接口运行时出现分段错误
【发布时间】:2013-05-10 03:42:02
【问题描述】:

我正在运行mkl_lab_solution.c,这是一个使用 MKL 的示例,我可以正确编译它,当我运行它时,我遇到了 Segmentation fault。我的运行时间如下:

  1. 操作系统是centos 6.3
  2. gcc的版本是4.1.2
  3. mkl 是 mkl_10.3.12.361
  4. makefile 在下面

    gcc -g -L/opt/intel/composer_xe_2011_sp1.12.361/mkl/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_lp64 -lmkl_intel_sp2dp -lmkl_intel_thread -lmkl_core -lpthread -L/opt/intel/composer_xe_2011_sp1.12. -liomp5 -L/usr/lib64 -lstdc++ -I/opt/intel/composer_xe_2011_sp1.12.361/mkl/include -o test mkl-lab-solution.c

【问题讨论】:

    标签: c intel-mkl


    【解决方案1】:

    由于这在我的系统上运行良好,让我指出可能的错误。 首先,你需要运行. /path/to/intel/compilervars.sh intel64 这样所有的环境变量都设置好了,比如MKLROOT。 其次,检查intel mkl link line advisor 以获取系统上的选项。所以阅读你的编译命令我猜:linux、gnu 编译器、动态链接、64 位目标架构、64 位长指针、多线程、intel omp 库。

    这些设置给了我:

    链接器选项:

    -L$(MKLROOT)/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

    编译选项:

    -DMKL_ILP64 -m64 -I$(MKLROOT)/include

    无论出于何种原因,围绕 MKLROOT 的括号在 bash 上不起作用,所以只需将它们删除即可。 接下来记得将所有编译选项放在链接器选项之前。最后的命令行应该是这样的:

    gcc mkl-lab-solution.c -DMKL_ILP64 -m64 -I$MKLROOT/include -L$MKLROOT/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

    由于您遇到运行时错误,我怀疑您将英特尔 MKL 库与为不同接口层编译的对象链接。

    【讨论】:

    • 谢谢!它适用于您的描述。另一个问题是我从intel mkl link line advisor 获得链接器选项,详细信息是“-Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64 .a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a -Wl,--end-group -liomp5 -lpthread -lm",我不知道名为 -Wl,--start-group 的选项,你能帮我解释一下吗,我能不能错过它们并且不会因为无法使用 nvcc 编译而损失性能
    • 选择静态链接时,需要指定必要的目标文件。这是在-Wl,--start-group object files -Wl,--end-group 中完成的。静态链接的优点是所有使用的函数都编译到您的库/可执行文件中,并且不需要在LD_LIBRARY_PATH 中可用。您的可执行文件会变得更大。性能上没有区别。如果您使用共享链接,您可能会错过它们,但您必须确保所有库都在您的 LD_LIBRARAY_PATH 中,在执行程序之前运行 /path/to/intel/compilervars.sh intel64
    • 我还没有用 mkl 尝试过 nvcc。所以很遗憾,我无法对此发表评论。从技术上讲,我认为它应该可以工作。
    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2016-08-06
    • 2023-04-03
    相关资源
    最近更新 更多