【发布时间】:2017-05-10 22:00:04
【问题描述】:
在杰克逊维尔会议上,提案P0024r2 有效地采用了Parallelism TS 的规范,被C++17 (draft) 接受。该提议为许多采用 执行策略 参数的算法添加了重载,以指示应考虑哪种并行性。 <execution>(20.19.2 [execution])中已经定义了三个执行策略:
-
std::execution::sequenced_policy(20.19.4 [execpol.seq]) 和constexpr对象std::execution::seq(20.19.7 [parallel.execpol.objects]) 表示顺序执行,类似于在没有执行策略的情况下调用算法。李> -
std::execution::parallel_policy(20.19.5 [execpol.par]) 和constexpr对象std::execution::par(20.19.7 [parallel.execpol.objects]) 表示可能使用多个线程执行算法。 -
std::execution::parallel_unsequenced_policy(20.19.6 [execpol.vec]) 和constexpr对象std::execution::par_unseq(20.19.7 [parallel.execpol.objects]) 表示可能使用向量执行和/或多线程执行算法。
STL 算法通常将用户定义的对象(迭代器、函数对象)作为参数。 对用户定义的对象有哪些限制,才能使它们与使用标准执行策略的并行算法一起使用?
例如,当使用如下示例中的算法时,FwdIt 和 Predicate 的含义是什么?
template <typename FwdIt, typename Predicate>
FwdIt call_remove_if(FwdIt begin, FwdIt end, Predicate predicate) {
return std::remove_if(std::execution::par, begin, end, predicate);
}
【问题讨论】:
-
阅读en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t 我明白这是用户的责任......不管这意味着什么......所以我也在等待回复