LINUX.ORG.RU

распараллеливание функций в cpp

 


0

4

для for использовал #pragma omp parallel for.
а как вот этот кусок распараллелить(идей как и знаний 0)?

double a = 0;
a += some_function_1();
a += some_function_2();
...
a += some_function_n();



Последнее исправление: zaban (всего исправлений: 1)

Распараллеливанием не занимался, но что мешает:

std::vector<std::function<double()>> v {.....};
for (const auto &func: v) {
    a += func();
}
panter_dsd ★★★★
()
Ответ на: комментарий от anonymous

так мне конвейера не нужно.
на каждый процессор по функции хочется, конвеерно.

идея в распараллеливании в самой функции, не катит.

zaban
() автор топика

спасибо!
std::future в сочетании с std::vector<std::function<double()>> будет бомбой!

zaban
() автор топика
Ответ на: комментарий от i-rinat

Действительно, в частном случае получается)

dave ★★★★★
()
Ответ на: комментарий от dave

А reduce разве тоже? Сильно сомневаюсь

Для полугрупп - почему бы и нет?

hateyoufeel ★★★★★
()
Ответ на: комментарий от vcore1v

OpenMP хорошая штука, section подходит, я только про parallel for знал.
и пару дней использовал это безобразие:

#pragma omp parallel for reduction(+:a)
for (int i = 0; i < 4; ++i) {
   if ( i == 0 ) a += some_function_1();
   if ( i == 1 ) a += some_function_2();
   if ( i == 2 ) a += some_function_3();
   if ( i == 3 ) a += some_function_4();
}

и результат оно дало.

zaban
() автор топика
Ответ на: комментарий от yoghurt

эти функции полностью независимы. для простоты это можно представить как:

a=f1(x)+f2(x)+f3(x)...

и в будущем хочу сделать распараллеливание:

double function(double x, int k) {
double a = 0;

for (int i = 0; i < k; ++i) {
   a += f[k](x);
}

return a; }
std::vector<std::function<double()>> с первого взгляда подходит для этого.

zaban
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.