[英]Matrix operations in R: parallelization, sparse operations, GPU computation
我的问题的基本目标是如何使用Matrix
包在R
实现矩阵运算的最佳性能。 特别是我希望并行化操作(乘法)并使用CUDA GPU上的计算来处理稀疏矩阵。
细节
根据R cran
Matrix
包的文档
丰富的矩阵类层次结构,包括三角形,对称矩阵和对角矩阵,包括密集和稀疏矩阵,以及模式,逻辑和数字条目。 使用'LAPACK'和'SuiteSparse'库对这些矩阵进行了大量的操作和操作。
看来,由于SuiteSparse
我应该能够使用GPU(CUDA)对稀疏矩阵执行基本操作。 特别是SuiteSparse的文档列出了以下内容:
SSMULT和SFMULT:稀疏矩阵乘法。
在我的Gentoo上,我安装了suitesparse-4.2.1
以及suitesparseconfig-4.2.1-r1
。 我也有lapack
, scalapack
和blas
。 R sessionInfo()
如下所示:
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计算上运行矩阵运算吗? 据我浏览Stack和其他论坛,这个问题不应该是重复的。
Matrix
包包含SuiteSparse
子集 ,该子集内置于包中。 因此Matrix
不使用您的系统SuiteSparse
(您可以在此处轻松浏览Matrix
源代码)。 sparse_matrix * sparse_matrix
乘法很难有效地并行化 - 策略根据两个矩阵的结构而变化很大。 mclapply
。 我怀疑这会有所帮助。 Eigen
和RcppEigen
并在那里执行SSMULT。 我相信它可能会更快(但仍然是单线程)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.