使用 GPU 的犰狳 (+BLAS)

Posted

技术标签:

【中文标题】使用 GPU 的犰狳 (+BLAS)【英文标题】:Armadillo (+BLAS) using GPU 【发布时间】:2013-08-01 01:26:56 【问题描述】:

是否可以使用 GPU 运行犰狳计算?有没有办法将 GPU blas 库(例如 cuBLAS)与犰狳一起使用?请注意,我对 GPU 编程完全陌生。

【问题讨论】:

【参考方案1】:

当前接受的答案已过时。与 CUDA 6(目前为候选发布状态)一起,有一个名为 NVBLAS 的真正插入式替代品,它负责 GPU 交互并与犰狳结合使用。您可以通过将您的程序再次链接到 libnvblas.so 来使用 NVBLAS

但是,并非所有 BLAS 方法都可用,因此您必须指定一个备用 BLAS 库(如 openblas)。

更多详情请见https://developer.nvidia.com/cublasxt

【讨论】:

【参考方案2】:

不,不是。

您不能为 cpu 获取代码并假设它在 gpu 上运行,因为两者具有完全不同的内存模型、硬件、编程风格等。

【讨论】:

如其他答案和常见问题解答中所述,您可以使用 NVBLAS 或 ACML:arma.sourceforge.net/faq.html 请记住,我在 2013 年 8 月写了答案;从那以后,已经发布了几十个犰狳(和 CUDA !!)。【参考方案3】:

我终于找到了在 Ubuntu 20.04 上使用 Cmake 和 CUDA 的快捷方式。

安装 CUDA

根据the official guidance,这似乎非常困难,但在 Ubuntu 20 上使用 apt 工作正常。

sudo apt install nvidia-cuda-toolkit

在这之后,别忘了根据documentation设置环境变量NVBLAS_CONFIG_FILE。 除了更改 CPU BLAS 库外,网站上的默认内容都可以。对我来说,libopenblas.a 不起作用,应该设置为libopenblas.so.0

使用 Cmake 编译犰狳

手动安装对我来说似乎很复杂,所以我只是对cmake的安装方法进行了一些调整。

cmake . -Dopenblas_LIBRARY=<PATH TO NVBLAS LIB>/libnvblas.so

使用犰狳编写代码

cmake 项目没有什么不同,也不需要额外的编译标志,因为它们都是在编译 Armadillo 库时设置的。

如果出现任何问题,日志文件(默认为nvblas.log)将提供一些信息。可能是它无法打开 CPU BLAS 库。

【讨论】:

以上是关于使用 GPU 的犰狳 (+BLAS)的主要内容,如果未能解决你的问题,请参考以下文章

将犰狳 lapack blas 链接到代码时出错:未定义对“dtrsm_”的引用

当我提交带有犰狳的 iOS 应用程序时,BLAS 符号被拒绝为私有(ITMS-90338:非公共 API 使用)

将具有外部依赖项的共享库集成到 MATLAB |即犰狳、LAPACK、BLAS

当 B 是犰狳中的对称矩阵时的 A * B 计算

犰狳 eigs_sym:分解失败

如何将 lapack 和 BLAS 库链接到 C++ 代码