2012-04-13 60 views
3

我可以訪問安裝了R的兩個羣集。我一直在編寫和測試我的東西。當我將代碼移到新的羣集時,突然所有的矩陣乘法變得非常慢。這裏有一些數字:矩陣乘法在不同R安裝中的性能

Cluster-1: 
> a <- matrix(0, nrow=2000, ncol=2000) 
> b <- matrix(0, nrow=2000, ncol=2000) 
> system.time(c <- a %*% b) 
    user system elapsed 
    0.07 0.03 0.10 

Cluster-2: 
> a <- matrix(0, nrow=2000, ncol=2000) 
> b <- matrix(0, nrow=2000, ncol=2000) 
> system.time(c <- a%*% b) 
    user system elapsed 
13.682 0.014 13.695 

請注意,我沒有使用任何稀疏矩陣。

羣集1使用R版本2.12.1,羣集2使用R版本2.15.0。是否有任何特殊的庫,第二個羣集丟失?我如何找到哪一個?謝謝。

編輯: 添加更多的細節有關集羣:

羣集-1:

> sessionInfo() 
R version 2.12.1 (2010-12-16) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C 
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8 
[5] LC_MONETARY=C    LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=en_US.UTF-8  LC_NAME=C 
[9] LC_ADDRESS=C    LC_TELEPHONE=C 
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

的Cluster-2:

> sessionInfo() 
R version 2.15.0 (2012-03-30) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.iso885915  LC_NUMERIC=C     
[3] LC_TIME=en_US.iso885915  LC_COLLATE=en_US.iso885915  
[5] LC_MONETARY=en_US.iso885915 LC_MESSAGES=en_US.iso885915 
[7] LC_PAPER=C      LC_NAME=C      
[9] LC_ADDRESS=C     LC_TELEPHONE=C     
[11] LC_MEASUREMENT=en_US.iso885915 LC_IDENTIFICATION=C   

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

回答

2

您可以是使用非優化BLAS。這裏舉一個例子: http://www.cybaea.net/Blogs/Data/Faster-R-through-better-BLAS.html

如果是這樣,這是一個簡單的修復。

您也可以嘗試編譯和其他技巧: Speed up the loop operation in R

+0

我本來以爲有別的事情上,13sec對於操作是瘋狂緩慢甚至與正規RBLAS。其他的東西可以在集羣上運行嗎? – Hansi 2012-04-13 12:12:59

+0

@Hansi,在我的機器上(幾歲),'c < - a%*%b'需要12秒。然而,@isEmpty,可能從兩個集羣發佈'sessionInfo()'的結果都會有所幫助。 – BenBarnes 2012-04-13 12:16:29

+0

我沒有對羣集的根訪問權限。所以我不能從回購安裝任何東西。另外,我在論壇上看到編譯Atlas並不是一件簡單的工作。可能是我應該與系統管理員交談,看看可以做些什麼。 – isEmpty 2012-04-13 12:17:00