Предоставляет ли HPX какую-либо параллельную итерационную функцию, построенную поверх основанный на задачах параллелизм форк-соединения что также позволяет контролировать размер используемого зерна? похож на TBB parallel_for или Cilk’s cilk_for.
Оно делает. Мы реализовали некоторые дополнения к тому, о чем думает комитет по стандартизации. HPX представила концепцию ExecutorParameters
которые, помимо прочего, позволяют контролировать размер зерна распараллеливания итераций. Например:
std::vector<int> v = { ... };
hpx::parallel::static_chunk_size scs;
hpx::parallel::for_each(
hpx::parallel::execution::par.with(scs),
v.begin(), v.end(),
[](int val) { ... }
);
Это разделит итерации на задачи (num_iterations / 4 * cores)
итерации цикла. Вы также можете указать размер задач:
hpx::parallel::static_chunk_size scs(100);
который будет объединять 100 итераций в каждой задаче.
Другие существующие параметры исполнителя, например dynamic_chunk_size
(похоже на openmp’s schedule(dynamic)
), а также guided_chunk_size
(похоже на openmp’s schedule(guided)
), так далее.
Других решений пока нет …