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倍的加速。
了解算法本身前,先来看一下执行策略。