我可以访问两个已安装 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
请注意,我没有使用任何稀疏矩阵。
Cluster-1 使用 R 版本 2.12.1,Cluster-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
集群 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
最佳答案
您可能正在使用未优化的 BLAS。请参阅此处的示例: http://www.cybaea.net/Blogs/Data/Faster-R-through-better-BLAS.html
如果是这样,修复起来很简单。
您还可以尝试编译和其他技巧: Speed up the loop operation in R
关于r - 不同 R 安装的矩阵乘法性能各不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10139797/