我已经搜索了一段时间,没有任何东西可以解决我的问题。
我在Ubuntu 18.04计算机上安装了英特尔MKL库,它已正确链接到Numpy和Scipy。现在,我想用C ++语言使用Armadillo做同样的事情。我使用Armadillo项目提供的readme.txt说明(使用cmake
)进行了安装。我检查了它是否正确检测到了MKL的存在,并做到了。
现在,我想检查一下它是否工作正常,所以我只需要构建一个矩阵并使用以下代码对角线化
#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;
int main()
{
wall_clock timer;
int dim = 100;
cx_mat C = randu<cx_mat>(dim,dim);
cx_mat D = C.t()*C;
vec eigval2;
cx_mat eigvec2;
timer.tic(); // Initialize clock
eig_sym(eigval2, eigvec2, D);
double n = timer.toc();
cout << "Elapsed time: " << n << " seconds" << endl;
cout << eigval2 << endl;
return 0;
}
这是非常基本的。问题是,当我尝试以500的矩阵维数运行它时,出现了分段错误(核心已转储),没有其他问题。我不知道这是否与链接到MKL或仅Armadillo安装有关。请注意,我不知道Armadillo如何知道要使用MKL进行编译和运行,因为我也只安装了g++ example.cpp -o example -O2 -larmadillo && ./example
,因此也安装了openBLAS,Lapack和BLAS。
我还尝试在“ include / armadillo_bits / config.hpp”文件中注释#define ARMA_USE_LAPACK
和#define ARMA_USE_BLAS
,并重建所有内容,但没有任何改变。我还尝试查看在同一文件中注释/取消注释BLAS CAPITAL / UNDERSCORE / LONG / LONG LONG的内容,但是由于我真的不知道该怎么办,所以我没有碰任何东西。
您对该特定主题有任何建议吗?我什至不知道该错误是否与安装有关...
预先感谢