使用 ClusterEvalQ 编译 Rcpp 函数

Compiling Rcpp functions using ClusterEvalQ

我正在做一个需要在 R 中进行并行处理的项目,而且我是 doparallel 包的新手。我想做的是使用并行化的 foreach 循环。由于问题的性质,这个 foreach 循环将需要执行多次。我遇到的问题是我在循环中使用了 cppfunction 和 cfunction。

当前的解决方法是为集群调用 clusterEvalQ() 并编译相关函数。但是,这非常慢(4 核约 10 秒)。我在下面包含了相关代码。有什么办法可以加快速度吗?谢谢

clusterEvalQ(cl, {
library("inline")
library("Rcpp")
source("C_functions.R")
}) 

是的,有一种方法可以加快编译速度,只需编译一次一次

特别是,将所有编译后的代码移动到R包中。从那里,将 R 包安装到集群上,然后加载该包。在并行代码中,调用包中的函数。

这是必需的,因为导入到 R 中的 C++ 函数是特定于会话的。因此,每个会话都需要自己的编译。编译是"expensive"部分。

此外,do not use the inline package. Instead, you should use Rcpp Attributes