问题标签 [fastr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
411 浏览

java - 是否可以直接从 RStudio 使用 GraalVM / FastR?

我浏览了一些文档,但我不清楚是否可以在 RStudio 中使用 FastR / GraalVM 而不是默认的 GNU R 实现。

我的目标是以比当前使用 RJava 和一些包装函数调用 java 代码的解决方案更友好的方式集成 R 代码和 Java 代码。

这是 GraalVM 宣传的不错的功能之一。这里解释了 Java 和 R 代码的集成(双向),例如https://medium.com/graalvm/enhance-your-java-spring-application-with-r-data-science-b669a8c28bea

0 投票
3 回答
330 浏览

r - Graalvm - 与 RStudio 集成

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

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

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

0 投票
1 回答
286 浏览

java - 在 GraalVM 中安装 R 包的问题

我已经在 MacOS Catalina 上安装了 graalvm-ce-java8-20.0.0。我可以从 java 运行简单的 R 代码:

当我尝试安装几乎任何 R 库时,例如。RCPP:

我有以下错误:

6):找不到符号:__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev 引用自:/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/ Rcpp/libs/Rcpp.so 预期在:/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/ 中的平面命名空间00new/Rcpp/libs/Rcpp.so 错误:加载失败

在同一台机器上,我有 Rstudio,我可以在其中安装任何软件包而不会出现问题。

这是 $GRAALVM_HOME/bin/R -e 'install.packages("Rcpp", type="source")' 的输出:

0 投票
1 回答
39 浏览

java - 调度固定延迟执行程序时防止 R 脚本完成

我计划使用 FastR 实现编写一个 R 脚本,看起来像

该类org.algo.polyglot.JavaClient看起来像(打包到一个 jar 中):

运行脚本时Rscript sample.R --polyglot,脚本完成执行并输出:

我有这些动机:

  • R 脚本应该是入口点,因为我的用例要求我利用 R 中的 java 功能
  • 使用提供的 jar 运行 R 脚本
  • 使用 Rscript 执行脚本
  • ScheduledExecutorService没有 R 脚本完成执行的情况下从 R 脚本本身以固定延迟或固定速率运行(保持活动状态直到服务运行)这可以通过返回预定的未来并等待它使用ScheduledFuture$get()对脚本所做的更改来解决和代码是:
  • 将一个函数从 R 脚本传递给执行器,以便 ScheduledExecutorService 相应地调用该函数(可以传递一个 R 函数以在 java 代码中运行,接收器将是一个功能接口,例如:)

但是来自不同线程的访问受到限制

  • 使用可运行脚本和 jar 构建本机映像

我想知道这些动机是否可能,如果可能的话,这样做的正确方法。

0 投票
1 回答
78 浏览

r - 为什么 FASTR(即 R 的 GraalVM 版本)与普通 R 相比要慢 10 倍 *尽管 Oracle 声称要快 40 倍 *?

Oracle 声称其对 R 的 graalvm 实现(称为“FastR”)比普通 R (https://www.graalvm.org/r/)快 40 倍。然而,我运行了这个超级简单(但很现实)的 4 行测试程序,GraalVM/FastR 不仅没有快 40 倍,实际上还慢了 10 倍!

在 FASTR 中,t1 返回此值:

在原来的正常 R 中,我得到了这个结果:

如您所见,即使对于这个简单的(即 4 行代码,没有额外/特殊库导入等) ,FAST R 也非常慢。我在 Google Cloud 上的 16 核 VM 上对此进行了测试。想法?(仅供参考:我快速浏览了 smooth.spline 代码,它确实调用了 Fortran,但根据 Oracle 营销网站,GraalVM/FastR 甚至比 Fortran-R 代码还要快。)

=====================================

编辑:根据下面 Ben Bolker 和 user438383 的评论,我修改了代码以包含一个 for 循环,以便代码运行更长时间,并且我有时间监控 CPU 使用情况。修改后的代码如下:

现在,正常的 R 为 t1 返回这个:

而 FastR 返回:

所以,现在,FastR 只慢了 4 倍,但这仍然相当慢。(我可以接受 5% 甚至 10% 的差异,但这是 400% 的差异。)此外,我检查了 cpu 的使用情况。正常 R 在整个 19 秒内仅使用 1 个内核(100%)。然而,令人惊讶的是,FastR 在大约 78 秒内使用了 100% 到 300% 的 CPU 使用率(即 1 个全核和 3 个全核)。因此,我认为可以相当合理地得出结论,至少对于这个测试(这恰好是我非常简单的场景的实际测试),FastR 至少慢 4 倍,同时消耗约 1 到 3 倍的 CPU 内核。特别是考虑到我没有导入任何 FASTR 团队可能没有时间正确分析的特殊库(即我只使用 R 附带的 vanilla R 代码),我认为有 至少在速度方面,FASTR 实现并不完全正确。(我还没有测试过准确性,但我认为这现在没有实际意义。)有没有其他人经历过类似的事情,或者是否有人知道需要对 FASTR 进行任何“神奇”配置才能获得其声称的速度(或至少类似,即 +- 5% 速度到正常 R)?(或者也许我可以解决一些已知的 FASTR 限制,即不使用普通的 fortran 二进制文件等,但使用这些特殊的等)即 +- 5% 速度到正常 R)?(或者也许我可以解决一些已知的 FASTR 限制,即不使用普通的 fortran 二进制文件等,但使用这些特殊的等)即 +- 5% 速度到正常 R)?(或者也许我可以解决一些已知的 FASTR 限制,即不使用普通的 fortran 二进制文件等,但使用这些特殊的等)

0 投票
1 回答
39 浏览

graalvm - GraalVM 在调用多语言函数时是否使用相同的线程和堆空间?

如果我在 GraalVM 中从 Java 调用 R 代码(使用 GraalVM 的 polyglot 函数),R 代码和 Java 代码是否在同一个 Java 线程上运行(即操作系统或 Java 线程之间没有切换等?)另外,它是否相同“内存/堆”空间?也就是说,在下面的示例代码中(我取自https://www.baeldung.com/java-r-integration

调用是否rBindings.getMember("c").execute(values)会导致值对象(整数数组)被复制?或者 GraalVM 是否足够聪明,可以将其视为指向同一内存空间的指针?如果是副本,复制时间是否与正常的 java clone() 操作相同(或相似,即在 20% 以内)时间?最后,调用 polyglot 函数(在本例中为 R 中实现的 customMean)是否与调用原生 Java 函数具有相同的开销?额外的问题:GraalVM JIT 编译器甚至可以跨层编译,例如说我有这个:

GraalVM 编译器是否会像普通的 Java JIT 编译器一样聪明,并意识到上面的整个语句可以在没有两个映射操作的情况下简单地编写(因为它们相互抵消)?

仅供参考:我正在考虑使用 GraalVM 来运行我的 Java 代码和我的 R 代码,一旦我在这里确定的问题得到解决(为什么 FASTR(即 GraalVM 版本的 R)与普通 R 相比要慢 10 倍*尽管 Oracle 声称40x *faster*?),其中一个动机是我希望消除从 Java 调用 R(使用 RServe())花费在网络 IO 上的 50% 时间(因为 Java 通过 TCP/IP 和 RServe 与 RServer 通信和Java在不同的线程和内存空间等)