armadillo C++ 矩阵库——如何启用 ATLAS 或 LAPACK?

Posted

技术标签:

【中文标题】armadillo C++ 矩阵库——如何启用 ATLAS 或 LAPACK?【英文标题】:armadillo C++ matrix library -- how to enable use of ATLAS or LAPACK? 【发布时间】:2012-03-25 17:17:38 【问题描述】:

当我用犰狳 makefile 编译 example2.cpp 并运行它时,我收到一条错误消息

error: det(): use of ATLAS or LAPACK needs to be enabled

我该如何解决?当我尝试使用解决方案时,我遇到了类似的错误。我的设置详情如下:

Ubuntu Lucid Lynx 10.04 犰狳版本:2.4.2(Loco Lounge Lizard) 图集 3.9.51 提升 1.48.0 g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3

Atlas 是在犰狳之前安装的,犰狳安装是用 Cmake 配置的。我远非 cmake 专家,但我认为当我用它生成 makefile 时它应该找到 ATLAS。犰狳文档似乎说,如果我使用 cmake 安装,我不需要手动启用 ATLAS。我试图通过插入手动破解 example2.cpp

#define ARMA_USE_ATLAS

在标题之前,但它只会生成一堆关于 Cblas 上缺少内容的错误。也许缺少允许 cmake 找到 ATLAS 的步骤。感觉我错过了一些简单但关键的东西。任何帮助将不胜感激。

附加细节:

编辑:无论出于何种原因,我都无法再添加评论,所以我在下面发布了对@Appleman1234 答案的回复。

我从源代码编译了犰狳和 ATLAS。我认为 ATLAS 捆绑并优化了 LAPACK 和 BLAS。当我编译它时,我将一个位置传递给 lapack tar 像

./configure --shared --with-netlib-lapack-tarfile=/<path>/lapack-3.3.1.tgz

我还在 atlas lib 目录中看到以下文件:

libatlas.a, libcblas.a, libf77blas.a, liblapack.a, libptcblas.a, libptf77blas.a libsatlas.so, libtatlas.so

这似乎表明系统上安装了 blas、cblas 和 lapack。但是犰狳中的CMakeCache.txt似乎表明cmake没有找到如下的BLAS、CBLAS、CLAPACK

BLAS_LIBRARY:FILEPATH=BLAS_LIBRARY-NOTFOUND

CMakeCache.txt 中没有 ATLAS 的概念,所以我认为它也没有找到。也许我错了,但似乎我需要以某种方式将 cmake 指向 ATLAS,我只是不知道如何。假设 ATLAS 有 BLAS、LAPACK 和 CBLAS,我也可能会出错。我以为我将它们编译为 ATLAS 的一部分,但我可能错了。非常感谢您的 cmets。

问题解决方法:

Dirk 的建议几乎奏效了。正如我在对他的帖子的回复中提到的那样,问题是 cmake 犹豫不决。我误诊为 cmake 找不到 clapack 的问题。事实上,在更仔细地查看了 cmake 输出后,我意识到当它决定将其用作编译器 /usr/bin/c++ 时,它存在找不到好的编译器或者拖拖拉拉的问题。所以我做了 CXX=g++ 然后再次 cmake 效果很好。在那之后,犰狳编译得很好。

【问题讨论】:

【参考方案1】:

您是否从源代码安装了犰狳?

运行cmake ../configure时cmake输出了什么?

后者只是调用cmake .

它输出了下面的值吗?

-- CLAPACK_FOUND  = YES
-- CBLAS_FOUND    = YES

如果不是 YES,那么根据 CMakeLists.txt,ARMA_USE_ATLAS 设置为 false 并且不使用 ATLAS。

要使用detsolve,如果您想使用 ATLAS,请安装 CLAPACK 和 CBLAS,或者只安装 LAPACK。

【讨论】:

【参考方案2】:

由于 Debian / Ubuntu 中存在犰狳,您可以简单地安装所有已知的构建依赖项,以确保您拥有所需的所有 -dev 软件包:

edd@max:~$ sudo apt-get build-dep armadillo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
edd@max:~$ 

看来我的系统在这方面是完整的。

【讨论】:

如果我坚持使用 debian 软件包,我会更开心。只是康拉德每月更新 2-3 次犰狳,我认为 debian 软件包远远落后。较旧的 bo​​ost 不太受关注,但是我基本上已经在我的机器上放置了最新的 boost、atlas 和 armadillo,以尝试跟上 Conrad 的更新。由于包管理器想要较旧的 bo​​ost 和较旧的犰狳,我需要删除所有这些,并且可能删除我花了一段时间配置的 Atlas。我想如果必须的话我会吞下它,我只是希望我错过了一些简单的东西。 您当然不必删除任何内容。只保留打包的东西,如果必须,在 /usr/local 中补充它。 我只是按照你的建议做了。从 cmake 收到一条错误消息。基本上,看起来 cmake 找到了 BLAS、Boost、CBLAS,但找不到 CLAPACK 包含和库。有趣的是,它发现 CBLAS 包含在 /usr/include 中,但使用了来自 ATLAS 的 CBLAS 库,我安装了 /usr/local/atlas/lib/libcblas.a。所以问题是,我该如何解决这个丢失的 CLAPACK 问题? 我实际上尝试使用 ATLAS BLAS 编译独立的 CLAPACK,但在测试 BLAS 时出现错误,我很难诊断 [***.com/questions/9865321/…

以上是关于armadillo C++ 矩阵库——如何启用 ATLAS 或 LAPACK?的主要内容,如果未能解决你的问题,请参考以下文章

Armadillo C++:如何使用来自另一个矩阵的多个元素修改矩阵的多个数组元素,特别是在立方体结构中?

armadillo C++:从数组初始化矩阵

犰狳 C++ 矩阵线程安全吗

使用 Armadillo C++ 加载稀疏矩阵

C++ Armadillo 和 OpenMp:外积求和的并行化 - 定义 Armadillo 矩阵的约简

在 C++ 中返回多个矩阵(犰狳库)