Параллельное выполнение функции Rcpp выполняется медленнее, чем последовательное выполнение.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Параллельное выполнение функции Rcpp выполняется медленнее, чем последовательное выполнение.

Сообщение Anonymous »

Я разрабатываю функцию R, а затем использую код функции в Rcpp (я уже новичок в этом).
Я хотел провести моделирование и запустить те же функции 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);
}
Вот код R, который я использую, и разница во времени, затрачиваемого функцией, выполняемой последовательно и параллельно:

Код: Выделить всё

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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»