我的问题的基本目的是如何在R
使用Matrix
包中实现矩阵运算的最佳性能。特别是我想并行化操作(乘法)并使用 CUDA GPU 上的计算处理稀疏矩阵。
细节
根据Matrix
包中的文档R cran
矩阵类的丰富层次结构,包括三角矩阵、对称矩阵和对角矩阵,包括密集和稀疏矩阵,以及模式、逻辑和数字条目。使用“LAPACK”和“SuiteSparse”库对这些矩阵进行许多方法和操作。
看来,多亏了SuiteSparse
我应该能够使用 GPU (CUDA) 对稀疏矩阵执行基本操作。特别是 SuiteSparse 的文档列出了以下内容:
SSMULT 和 SFMULT:稀疏矩阵乘法。
在我的 Gentoo 上,我已经安装suitesparse-4.2.1
了suitesparseconfig-4.2.1-r1
. 我也lapack
有scalapack
和blas
。RsessionInfo()
看起来如下:
R version 3.4.1 (2017-06-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Gentoo/Linux
Matrix products: default
BLAS: /usr/lib64/blas/reference/libblas.so.0.0.0
LAPACK: /usr/lib64/lapack/reference/liblapack.so.0.0.0
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] Matrix_1.2-10
loaded via a namespace (and not attached):
[1] compiler_3.4.1 grid_3.4.1 lattice_0.20-35
我还设置了环境变量:
export CHOLMOD_USE_GPU=1
我在一个论坛上找到的,可能应该允许使用 GPU。
基本上,一切看起来都准备好了,但是,当我运行一个简单的测试时:
library(Matrix)
M1<-rsparsematrix(10000,10000,0.01)
M<-M1%*%t(M1)
似乎 GPU 无法正常工作,好像R
忽略了这些suitesparse
功能。
我知道这些问题非常广泛,但是:
- 有谁知道是否
R
应该以特定、严格的方式进行编译suitesparse
? - 如何确保
Matrix
包使用所有共享库进行并行化和稀疏操作(使用 GPU)? - 谁能确认他能够使用
Matrix
包在 CUDA/GPU 计算上运行矩阵运算?
据我查看堆栈和其他论坛,这个问题不应该是重复的。