Ich wollte Simulationen durchführen und dieselben R-Funktionen in einem Cluster von x Kernen ausführen. Wenn ich das mache, ist derselbe Code leider im Durchschnitt 100- oder 1000-mal langsamer als bei serieller Ausführung. Ich möchte nicht, dass die Rcpp-Funktion parallel ausgeführt wird. Ich möchte sie parallel ausführen können, ohne die Vorteile von Rcpp (anstelle einer R-Funktion) zu verlieren.
Hier die Rcpp-Funktion:
Code: Select all
#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);
}
Code: Select all
library(microbenchmark)
set.seed(100)
x