我问题的基本目的是如何使用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。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和其他论坛中所看到的,这个问题不应该是重复的。
发布于 2017-11-28 05:54:02
Matrix包包含SuiteSparse的子集,该子集被内置到包中。因此Matrix不使用您的系统SuiteSparse (您可以轻松地浏览Matrix源代码这里)。sparse_matrix * sparse_matrix乘法很难有效的并行化--根据两个矩阵的结构,策略会有很大的变化。mclapply。我怀疑这会有帮助。Eigen和RcppEigen,并在那里执行SSMULT。我相信它可能会更快(但仍然是单线程)。https://stackoverflow.com/questions/47518110
复制相似问题