2

在旨在加速 R 语言的项目中,目前使用带有 GraalVM 的 R 语言版本 3.5.1 的 FastR 在我看来似乎更加开发并与最新版本的 R 兼容。

有人知道是否有任何方法可以将 FastR 与 RStudio 集成吗?

GraalVM + R (FastR):https ://www.graalvm.org/docs/reference-manual/languages/r/ 。

4

3 回答 3

3

此时,RStudio 不支持 FastR。问题是 RStudio 使用了 GNU-R 的一些内部实现细节,FastR 很难正确模拟这些细节,但我们计划最终支持这个“API”。

您可以使用 GraalVM插件中的 FastR for Visual Studio Code。它还支持调试,并且 R 支持基于此 R Visual Studio 代码插件

另一种可能性是使用 fastRCluster 包通过 PSOCK 集群从 GNU-R 使用 FastR,可以使用以下方法安装(例如在 RStudio 中):

devtools::install_github('oracle/fastr/com.oracle.truffle.r.pkgs/fastRCluster')

然后,您可以使用?fastRCluster它来了解更多信息。

于 2019-04-17T17:12:54.950 回答
2

通过创建指向我编译的 OpenBLAS 库的符号链接并在我的机器上它位于/opt/OpenBLAS/lib目录中,可以轻松解决该问题。在/usr/lib/jvm/java-8-graal/jre/languages/R/lib目录里面,我做了:

sudo mv libRblas.so libRblas.so.keep
sudo ln -s /opt/OpenBLAS/lib/libopenblas_haswellp-r0.3.5.so libRblas.so

R + GraalVM(快速):

   user  system elapsed 
 98.425   2.393  38.324
于 2019-04-17T18:29:57.507 回答
1

我注意到的一件事是 FastR 默认不使用 OpenBLAS。也许这可以默认设置,因为与 OpenBLAS 相比,BLAS 效率相当低。

考虑下面的代码:

M <- matrix(runif(n = 5000^2, 0, 1), 5000, 5000)

inverse_loop <- function(matriz, n = 10){
  for (i in 1:n){
    solve(matriz)
  }
}

system.time(inverse_loop(M))

注意:这是一个简单的代码,只对一个大矩阵进行重复求逆。

基准

带有 OPenBLAS 的 GNU R:

> sessionInfo()
R version 3.5.3 (2019-03-11)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Manjaro Linux

Matrix products: default
BLAS/LAPACK: /opt/OpenBLAS/lib/libopenblas_haswellp-r0.3.5.so

结果

[pedro@pedro-de Downloads]$ Rscript code.R 
     user    system   elapsed
   98.037     6.225    30.743 

R + GraalVM(快速):

> sessionInfo()
FastR version 3.5.1 (2018-07-02)
Platform: x86_64-unknown-linux-gnu (64-bit)
Running under: Manjaro Linux

Matrix products: NULL
BLAS: /usr/lib/jvm/java-8-graal/jre/languages/R/lib/libRblas.so
LAPACK: /usr/lib/jvm/java-8-graal/jre/languages/R/lib/libRlapack.so

结果

./Rscript /home/pedro/Downloads/code.R

   user  system elapsed 
910.810   6.393 928.996
于 2019-04-17T17:56:09.283 回答