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 ++中实现执行策略。
答案 0 :(得分:1)
这是一个好问题。也就是说,不幸的是,我认为这是不可能的。 [execpol.general]/1说:
此子节描述了执行策略类型的类。一个 执行策略类型的对象表示 执行算法时允许并行操作和表达式 对元素访问功能的后续要求。
(重点是我的)
此外,此后,整个[execpol]都在处理is_execution_policy
,(消歧符)策略类型和执行策略对象。
换句话说,执行策略仅以限制元素访问功能为代价带来并行的可能性。并没有具体说明如何执行这些策略。在我看来,以线程数为例,似乎更不可能控制并行性的细节。