[英]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.