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

问题描述 投票:3回答:1

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

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

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

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

c++ c++17
1个回答
2
投票

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

本小节描述了作为执行策略类型的类。执行策略类型的对象指示在执行算法时允许的并行性的类型,并表示对元素访问功能的后续要求。

(强调我的)

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

换句话说,执行策略仅以受约束的元素访问函数为代价而带来并行性的可能性。没有真正说明这些政策是如何实施的。对我来说,控制并行性的细节似乎更不可能,线程的数量就是一个例子。

© www.soinside.com 2019 - 2024. All rights reserved.