HPX 是否提供具有粒度控制的基于任务的并行迭代功能?
Does HPX provide a task-based parallelized iteration function with grain size control?
HPX 是否提供构建在 task-based fork-join parallelism that also lets you control the grain size used? similar to TBB's parallel_for or 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 次迭代。
其他已有的executor参数如dynamic_chunk_size
(类似openmp的schedule(dynamic)
),guided_chunk_size
(类似openmp的schedule(guided)
)等
HPX 是否提供构建在 task-based fork-join parallelism that also lets you control the grain size used? similar to TBB's parallel_for or 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 次迭代。
其他已有的executor参数如dynamic_chunk_size
(类似openmp的schedule(dynamic)
),guided_chunk_size
(类似openmp的schedule(guided)
)等