C ++ 17:如何在执行策略中控制线程数?

时间:2019-05-01 19:45:03

标签: c++ c++17

C ++ 17标准引入了执行策略参数(例如std::execution::par_unseq),该参数可以传递给std库中的某些函数以使其并行执行,例如:

std::copy(std::execution::par_unseq, obj1.begin(), obj1.end(), obj2.begin())

在其他框架(如OpenMP)中,可以设置它将使用的最大线程数,例如#pragma parallel num_threads(<desired_numer>)可以在本节中本地设置,或者omp_set_num_threads(<desired_number>)可以在调用范围内进行设置。

我想知道如何在标准C ++中实现执行策略。

1 个答案:

答案 0 :(得分:1)

这是一个好问题。也就是说,不幸的是,我认为这是不可能的。 [execpol.general]/1说:

  

此子节描述了执行策略类型的类。一个   执行策略类型的对象表示   执行算法时允许并行操作表达式   对元素访问功能的后续要求

(重点是我的)

此外,此后,整个[execpol]都在处理is_execution_policy,(消歧符)策略类型和执行策略对象。

换句话说,执行策略仅以限制元素访问功能为代价带来并行的可能性。并没有具体说明如何执行这些策略。在我看来,以线程数为例,似乎更不可能控制并行性的细节。