【发布时间】:2018-06-14 12:27:44
【问题描述】:
在我的两台计算机上,我尝试了以下代码:
N <- 10e3
M <- 2000
X <- matrix(rnorm(N * M), N)
system.time(crossprod(X))
第一个是标准笔记本电脑,此操作需要 1.7 秒。
> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
Matrix products: default
BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
第二台是一台相当不错的台式电脑,耗时 17 秒。
> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 18.3
Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0
台式电脑的性能比笔记本电脑高,但这种矩阵计算需要多 10 倍的时间。
问题是否来自使用的默认 BLAS/LAPACK?
【问题讨论】:
-
你有一台标准笔记本电脑。我的需要 31 秒
-
8 GB,2 核,这里只是一台标准计算机。这就是为什么我询问使用的数学库的原因。
-
有可能。在this book 中,他们建议通过安装 OpenBLAS 获得了巨大的性能提升。我也不会因为 R 默认情况下 IIRC 不是多线程,所以这个 RAM/内核对性能影响不大(只要你能适应内存)。可能您的 CPU 与 BLAS 和 R 版本相结合将是关键因素,尽管我可能错了。
-
在我的电脑(Windows >= 8 x64(build 9200)上,使用 R Open (3.5) 和 MKL 需要 0.25 秒,而在常规 R (3.4.2) 上需要 19.63 秒
标签: r