让Armadillo C++库在Linux中快速运行 - Ubuntu--------。

问题描述 投票:1回答:1

我是来自Windows的用户,我通过VirtualBox使用Ubuntu操作系统,Ubuntu操作系统上安装了GCC 9.30。我在终端中使用以下命令安装了Armadillo、BLAS和LAPACK。

sudo apt-get install liblapack-dev
sudo apt-get install libblas-dev
sudo apt-get install libboost-dev
sudo apt-get install libarmadillo-dev

之后,我创建了以下.cpp文件,用于测量执行500×500矩阵的20次乘法所需时间。

#include <iostream>
#include <armadillo>
#include <chrono>
using namespace std;


int main() 
{
    chrono::steady_clock sc;
    int n = 500;
    arma::Mat<double> A = arma::randu(n, n);
    arma::Mat<double> B = arma::randu(n, n);
    auto start = sc.now();     // start timer

    for (int i = 0; i < 20; i++)
    {
        arma::Mat<double> C = A * B;
    }
    auto end = sc.now();
    auto time_span = static_cast<chrono::duration<double>>(end - start);
    cout << "Operation took: " << time_span.count() << " seconds !!!";
    return 0;
}

我在Linux终端上使用以下命令运行该文件

g++ armaC.cpp -o armaC -O3 -march=native -fopenmp -larmadillo

而事实证明,这速度慢得惊人,平均为1.5秒,而MATLAB需要0.08s左右。事实上,删除-O3或-fopenmp命令似乎根本没有改变速度,这似乎说明我的编译方法有很大问题。

我还试着在终端中用下面的行来运行它,其中应该包括BLAS和LAPACK包。

g++ armaC.cpp -o armaC -llapack -lblas

这给了我以下错误。

enter image description here

谁能给我一些帮助?

c++ linux ubuntu armadillo
1个回答
1
投票

标准的BLAS和LAPACK是参考实现,速度很慢。使用加速版本会快得多,如 OpenBLASIntel MKL.

在安装Armadillo之前,首先安装OpenBLAS。 这可以通过直接从OpenBLAS页面手动安装,或者通过软件包管理器自动安装。

例如,在Ubuntu 20.04上使用以下命令。

sudo apt-get install libopenblas-openmp-dev

... 然后重新安装Armadillo。 一般建议使用 最新版本 可用。

要解决你的链接问题,请看Armadillo的 疑问 页面。

(注:在Ubuntu 20.04上,请不要安装 libopenblas-serial-devlibopenblas-dev. 这些都是错误的。从您的系统中删除它们。只有 libopenblas-openmp-dev 正常工作)。)

© www.soinside.com 2019 - 2024. All rights reserved.