R中的矩阵操作:并行化,稀疏操作,GPU计算



我问题的基本目的是如何使用Matrix软件包在R中实现矩阵操作的最佳性能。特别是我想并行化操作(乘法),并使用CUDA GPU上的计算与稀疏矩阵一起工作。

详细信息

根据R cran中的Matrix软件包的文档

矩阵类的丰富层次结构,包括三角形,对称和对角线矩阵,既密集又稀疏,并具有逻辑和数字条目。使用" Lapack"one_answers" Suitesparse"库,用于这些矩阵上的许多方法和操作。

似乎由于SuiteSparse,我应该能够使用GPU(CUDA)对稀疏矩阵进行基本操作。特别是套房的文档列出以下内容:

ssmult和sfmult:稀疏矩阵乘法。

在我的Gentoo上,我与suitesparseconfig-4.2.1-r1一起安装了suitesparse-4.2.1。我也有lapackscalapackblas。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功能。

我知道问题很广,但是:

  • 有人知道是否应该以特定的,严格的方式与suitesparse合作?
  • 如何确保Matrix软件包使用所有共享库进行并行化和稀疏操作(使用GPU使用)?
  • 谁能确认他能够使用Matrix软件包在CUDA/GPU计算上运行矩阵操作?

据我浏览堆栈和其他论坛,这个问题不应该是重复的。

  1. 这并不像您所描述的那样容易。Matrix软件包包含 SuiteSparse的子集,此子集已内置在软件包中。因此,Matrix不使用您的系统SuiteSparse(您可以在此处轻松浏览Matrix CC_22源代码)。
  2. sparse_matrix * sparse_matrix乘法很难有效地并行化 - 策略因两个矩阵的结构而异。
  3. 在许多情况下,计算是内存的,而不是CPU绑定
  4. 由于上述内存问题 内存访问模式,与CPU相比,您在GPU上的性能可能更差。
  5. 据我所知
  6. 如果矩阵很大,则可以手动分配矩阵并使用标准mclapply。我怀疑这会有所帮助。
  7. 您可以尝试使用EigenRcppEigen并在此处执行SSMULT。我相信它可能会更快(但仍然单线)。
  8. 最终我会考虑如何重新制定问题并避免SSMULT

相关内容

  • 没有找到相关文章

最新更新