gpt4 book ai didi

c++ - 将 gsl c++ 程序与英特尔 MKL 链接

转载 作者:行者123 更新时间:2023-11-30 04:55:31 25 4
gpt4 key购买 nike

我写了这个测试程序。

#include <gsl/gsl_matrix.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_cblas.h>
#include <gsl/gsl_blas.h>

int main () {
gsl_vector* v = gsl_vector_calloc(5);
gsl_matrix* m = gsl_matrix_calloc(5, 5);

gsl_blas_dgemv(CblasNoTrans, 1.0, m, v, 0.0, v);
}

我使用以下命令编译和链接它。

g++ -g -DMKL_ILP64 mkl_example.cpp -L$HOME/intel/mkl/lib/intel64/ -lgsl -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lm

我在执行 gsl_blas_dgemv 的行遇到段错误。堆栈跟踪看起来像这样:

#0  0x00007fffeeb5db0a in mkl_blas_mc3_xdgemv () from $HOME/intel/mkl/lib/intel64/libmkl_mc3.so
#1 0x00007ffff5b190be in mkl_blas_dgemv () from $HOME/intel/mkl/lib/intel64/libmkl_sequential.so
#2 0x00007ffff70e0b51 in mkl_blas__dgemv () from $HOME/intel/mkl/lib/intel64/libmkl_intel_ilp64.so
#3 0x00007ffff7108054 in cblas_dgemv () from $HOME/intel/mkl/lib/intel64/libmkl_intel_ilp64.so
#4 0x00007ffff7a0cfa4 in gsl_blas_dgemv () from /usr/lib64/libgsl.so.0
#5 0x000000000040086e in main () at mkl.cpp:10

另一方面,当与 open blas 链接时,相同的程序可以工作。我在这里错过了什么吗?如何正确使用 Intel 的 MKL 和 gsl?

最佳答案

请确认您可以按如下方式运行程序:

g++ -g mkl_example.cpp -L$HOME/intel/mkl/lib/intel64/-lgsl -lmkl_intel -lmkl_sequential -lmkl_core -lm

看起来您正在链接具有不同接口(interface)层的英特尔 MKL 库。

下一步将尝试以下操作:

g++ -g -DMKL_ILP64 mkl_example.cpp -L$HOME/intel/mkl/lib/intel64/-Wl, --no-as-needed -lgsl -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lm

后者修改您的编译命令以包含 -Wl, --no-as-needed,这保证所有指定的库都将在运行时按要求编写。

关于c++ - 将 gsl c++ 程序与英特尔 MKL 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52989133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com