HPX是否提供具有粒度控制的基于任务的并行化迭代功能?

时间:2017-05-16 04:32:47

标签: c++ hpx

HPX是否提供基于task-based fork-join parallelism构建的任何类型的并行迭代功能,还可以控制使用的粒度?类似于TBB的parallel_for或Cilk' cilk_for

1 个答案:

答案 0 :(得分:2)

确实如此。我们对标准化委员会正在考虑的内容进行了一些扩展。 HPX引入了@echo off :top :: Loop through arp table entries and look for my device's MAC address for /f "tokens=1-5 skip=3" %%f in ('arp -a') do ( if "%%g"=="xx-xx-xx-xx-xx-xx" set ip=%%f ) if "%ip%"=="" ( echo Discovering network... :: Ping all IPs from 192.168.0.1 to 254 for /L %%N in (1,1,254) do start /b ping -n 1 -w 200 192.168.0.%%N >nul timeout 1 >nul goto :top ) else ( echo Device found found: %ip% ) pause 的概念,其中包括允许控制迭代并行化的粒度。例如:

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)

将在每项任务中组合100次迭代。

其他现有的执行器参数例如是hpx::parallel::static_chunk_size scs(100); (类似于openmp&#39; s dynamic_chunk_size)和schedule(dynamic)(类似于openmp&#39; s guided_chunk_size)等等。