HPX是否提供在task-based fork-join parallelism之上构建的任何种类的并行迭代函数,还可以让您控制所使用的粒度?与TBB的parallel_for或Cilk的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的schedule(dynamic))和guided_chunk_size(类似于openmp的schedule(guided)),等等。

关于c++ - HPX是否提供具有粒度控制的基于任务的并行迭代功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43992551/

10-10 03:47