簡體   English   中英

R中的矩陣運算:並行化,稀疏運算,GPU計算

[英]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 我也有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功能。

我知道問題很廣泛,但是:

  • 有沒有人知道是否應該以特定的,嚴格的方式編譯R來使用suitesparse
  • 如何確保Matrix包使用所有共享庫進行並行化和稀疏操作(使用GPU)?
  • 任何人都可以確認他能夠使用Matrix包在CUDA / GPU計算上運行矩陣運算嗎?

據我瀏覽Stack和其他論壇,這個問題不應該是重復的。

  1. 這並不像你描述的那么容易。 Matrix包包含SuiteSparse 子集 ,該子集內置於包中。 因此Matrix不使用您的系統SuiteSparse (您可以在此處輕松瀏覽Matrix源代碼)。
  2. sparse_matrix * sparse_matrix乘法很難有效地並行化 - 策略根據兩個矩陣的結構而變化很大。
  3. 在許多情況下,計算受內存限制,而不受CPU限制
  4. 由於上述內存問題和內存訪問模式,GPU上的性能可能比CPU差。
  5. 根據我的知識,有幾個庫實現了多線程SSMULT - 英特爾MKL和librsb ,但我還沒有聽說過R接口。
  6. 如果矩陣很大,您可以手動分區矩陣並使用標准mclapply 我懷疑這會有所幫助。
  7. 您可以嘗試使用EigenRcppEigen並在那里執行SSMULT。 我相信它可能會更快(但仍然是單線程)。
  8. 最終我會考慮如何重新制定問題並避免SSMULT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM