Поэтому мне никогда не приходилось делать различие между двумя встроенными функциями. Ответ обновлен с помощью
исал функцию вRcpp
и скомпилировал это сinline
, Теперь я хочу запустить его параллельно на разных ядрах, но получаю странную ошибку. Вот минимальный пример, где функцияfunCPP1
может быть скомпилирован и работает сам по себе, но не может быть вызванsnow
«sclusterCall
функция. Функция хорошо работает как отдельный процесс, но выдает следующую ошибку при параллельном запуске:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
2 nodes produced errors; first error: NULL value passed as symbol address
И вот некоторый код:
## Load and compile
library(inline)
library(Rcpp)
library(snow)
src1 <- '
Rcpp::NumericMatrix xbem(xbe);
int nrows = xbem.nrow();
Rcpp::NumericVector gv(g);
for (int i = 1; i < nrows; i++) {
xbem(i,_) = xbem(i-1,_) * gv[0] + xbem(i,_);
}
return xbem;
'
funCPP1 <- cxxfunction(signature(xbe = "numeric", g="numeric"),body = src1, plugin="Rcpp")
## Single process
A <- matrix(rnorm(400), 20,20)
funCPP1(A, 0.5)
## Parallel
cl <- makeCluster(2, type = "SOCK")
clusterExport(cl, 'funCPP1')
clusterCall(cl, funCPP1, A, 0.5)