簡體   English   中英

使用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 ++函數是特定於會話的。 因此,每個會話都需要自己編譯。 匯編是“昂貴”的部分。

此外, 不要使用inline 相反,您應該使用Rcpp屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM