Я хотел провести моделирование и запустить те же функции r в кластере из x ядер. К сожалению, когда я это делаю, тот же код работает в среднем в 100 или 1000 раз медленнее, чем при последовательном запуске. Я не хочу, чтобы функция Rcpp выполнялась параллельно, я хочу иметь возможность запускать ее параллельно, не теряя преимуществ Rcpp (вместо функции R).
Вот функция Rcpp:
Код: Выделить всё
#include
using namespace Rcpp;
// fonction pour le calcul des distances de manhattan pour remplacer dist
// [[Rcpp::export]]
IntegerVector dist_man(IntegerVector x, int nc) {
int nr = x.length()/nc;
int l = nr*(nr-1)/2;
IntegerVector mat(l*nc, 0);
IntegerVector dims = {l, nc};
mat.attr("dim") = dims;
# pragma omp for
for (int k = 0; k < nc; k++){
int u = 0;
int kl = k*l;
int knr = k*nr;
for (int i = 0; i < (nr-1); i++){
for (int j = i+1; j < nr; j++){
mat[u+kl] = abs(x[i+knr]-x[j+knr]);
u += 1;
}
}
}
return(mat);
}
Код: Выделить всё
library(microbenchmark)
set.seed(100)
x
Подробнее здесь: [url]https://stackoverflow.com/questions/79352752/running-a-rcpp-function-in-parallel-is-slower-than-running-it-in-serial[/url]