我正在开发一个需要在 R 中进行并行处理的项目,并且我是 doparallel 包的新手。我想做的是使用并行的 foreach 循环。由于问题的性质,这个 foreach 循环需要执行多次。我遇到的问题是我在循环中使用 cppfunction 和 cfunction 。
当前的解决方法是调用clusterEvalQ()
并编译相关函数。然而,这非常慢(4 核大约需要 10 秒)。我在下面包含了相关代码。有什么办法可以加快这个速度吗?谢谢。
clusterEvalQ(cl, {
library("inline")
library("Rcpp")
source("C_functions.R")
})
是的,有一种方法可以通过仅进行编译来加快速度once.
尤其,move all将编译后的代码转换为R包裹。从那里安装R打包到集群上,然后加载该包。在并行代码中,调用包中的函数。
这是必需的,因为C++函数导入到R是特定于会话的。因此,每个会话都需要自己的编译。编译是“昂贵”的部分。
Also, do not使用inline package http://thecoatlessprofessor.com/programming/to-rcpp-attributes-and-beyond-from-inline/。相反,你应该使用Rcpp 属性 https://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-attributes.pdf.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)