【发布时间】:2019-02-27 21:54:18
【问题描述】:
我写了这个测试程序。
#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?
【问题讨论】:
-
您是否尝试将其与标准 blas 联系起来?看看here
-
@TheQuantumPhysicist 是的。使用标准 blas 就可以了。