HPX是否提供基于task-based fork-join parallelism构建的任何类型的并行迭代功能,还可以控制使用的粒度?类似于TBB的parallel_for或Cilk' cilk_for。
答案 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
)等等。