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

any*_*ker 9 c++ c++17

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

\n\n
std::copy(std::execution::par_unseq, obj1.begin(), obj1.end(), obj2.begin())\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n

L. *_* F. 5

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

本小节描述了执行策略类型的类。执行策略类型的对象指示算法执行中允许的并行类型,并表达对元素访问函数的后续要求

(强调我的)

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

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