- 10.1 并行化标准库算法
10.1 并行化标准库算法
C++17为标准库添加并行算法。都是对之前已存在的一些标准算法的重载,例如:std::find
,std::transform
和std::reduce
。并行版本的签名除了和单线程版本的函数签名相同之外,在参数列表的中新添加了一个参数(第一个参数)——指定要使用的执行策略。例如:
std::vector<int> my_data;
std::sort(std::execution::par,my_data.begin(),my_data.end());
std::execution::par
的执行策略,表示允许使用多个线程调用此并行算法。这是一种权限,而不是一个申请——如果需要,这个算法依旧可以以串行的方式运行。通过指定执行策略,算法的需求复杂性已经发生变化,并且要比串行版的算法要求要宽松。因为并行算法要利用系统的并行性,从而算法通常会做更多的工作——如果将任务划分在100个处理上进行,即便是总任务量是原先的的2倍,那仍旧能获得50倍的加速。
了解算法本身前,先来看一下执行策略。