阅读R-project网站,有一些(不清楚)对 R 多线程的引用,但不清楚基础产品和CRAN库是如何编译的。
Revolution Analytics为 Windows 和 Redhat 提供多线程基础(?)下载。
其他一些 Linux 发行版是否也包括多线程 R(和包)?
阅读R-project网站,有一些(不清楚)对 R 多线程的引用,但不清楚基础产品和CRAN库是如何编译的。
Revolution Analytics为 Windows 和 Redhat 提供多线程基础(?)下载。
其他一些 Linux 发行版是否也包括多线程 R(和包)?
你很困惑。
R(以及之前的 S)内部是单线程的,并且几乎肯定会保持单线程。据我了解,Duncan Temple Lang 博士的工作就是要克服这个问题,如果他做不到......
也就是说,有一些多线程的口袋:
首先,无论何时进行外部调用,并且通过适当的锁定,您都可以使用多线程。这就是 BLAS 库 MKL、Goto/Open BLAS、Atlas(如果构建多线程)……都提供的。Revo R“仅”附带(英特尔的)MKL,因为英特尔恰好是 Revo 的关键投资者
如果你对你所做的事情很小心,你可以使用 OpenMP(多线程的编译器扩展)。这始于 Luke Tierney 在 pnmath 和 pnmath0 (曾经是实验性/外部包)上的工作,此后一直缓慢但肯定地进入 R 本身。
接下来,在多核世界中,在正确的操作系统上,您始终可以fork()
. 这就是多核封装的先驱以及现在并行封装的方式。
最后但同样重要的是,Rmpi、snow、parallel 等软件包使用了 MPI 的网络/RPC 路由,并在 HPC 介绍中有所介绍。
Renjin
是解释器的基于 JVM 的实现。他们声称:
与 GNU R 不同,Renjin 是多线程的,可以在平台即服务环境中愉快地运行,例如 Google Appengine、AWS Elastic Beanstalk、Heroku 或 Microsoft Azure。
#resource
http://www.bedatadriven.com/products/renjin.html
尽管如此,我们将从 R 调用的实际 R 包可能不是线程安全的。
请参阅从Jep
调用的角度解释此问题的文档。CPython
Java/Scala
https://github.com/ninia/jep/wiki/How-Jep-Works#threading-complications
由于 JNI 的复杂性和局限性,创建 Jep 实例的线程必须重复用于对该 Jep 实例的所有方法调用。Jep 将强制执行此操作并抛出提及无效线程访问的异常。(将来我们希望简化或提供用于线程管理的实用程序)。
不应在同一线程上同时运行多个 Jep 实例。虽然这在技术上是允许的,但它可能会扰乱线程状态并导致 Python 解释器死锁。如果将来遇到,这可能会更改为抛出异常。
因此,似乎有希望,Renjin
但实际使用的二进制(C/C++ 等)包需要验证线程安全。
还有其他 R 实现
https://dynamicecology.wordpress.com/2014/01/14/r-isnt-just-r-anymore/
这个呢?由于该页面的修改日期是 2014 年 5 月,我认为提到的软件包相对较新,或者在编写第一个答案时可能还不稳定。
您可以通过使用 KNIME 或任何其他利用 rserve.exe 可执行文件的程序来有效地多线程 R。在 KNIME 中,您可以将 R Snippet 放在 Parallel Chunk 节点系列中,以便按行执行操作。对于按列操作,您可以将数据集拆分为列子集并在每个集上执行 R Snippets,然后将它们重新合并在一起。
我希望这能让你的 CPU 风扇转得更快!