c ++ 20执行策略类型

爱德华

我一直在研究标准算法,并注意到您可以指定执行策略。

此处找到的文档列出了4条策略:

std::execution::sequenced_policy  
std::execution::parallel_policy 
std::execution::parallel_unsequenced_policy  
std::execution::unsequenced_policy

我了解并行策略和顺序策略之间的区别,但是我不确定为什么您还需要未排序和未排序的并行?

据我所知,您无论如何也不能保证线程执行的顺序,这样会使并行和并行未排序策略完全相同吗?

如果无法并行化该策略会自动退回到顺序策略,为什么还要添加普通的未排序策略?

我想念什么?

托尼·坦诺斯(Tony Tannous)

表格可视化

-------------------------------------------------------------------------
|   Type                  |     Vectorization     |     Parallelization |
|------------------------------------------------------------------------                
| Sequenced               |           X           |           X         | 
| Unsequenced             |           V           |           X         |
| Parallel                |           X           |           V         |
| Parallel & unsequenced  |           V           |           V         |
-------------------------------------------------------------------------

来自最新的C ++ 20工作草案n4849

20.18执行策略
执行策略类型的对象指示算法执行中允许的并行性的种类,并表示对元素访问功能的后续要求。

using namespace std;
vector<int> v = /* ... */;

// standard sequential sort
sort(v.begin(), v.end());

// explicitly sequential sort
sort(execution::seq, v.begin(), v.end());

// permitting parallel execution
sort(execution::par, v.begin(), v.end());

// permitting vectorization as well
sort(execution::par_unseq, v.begin(), v.end());

§20.18.3执行策略类型特征

  • 20.18.4顺序执行策略[execpol.seq]

    1. 该类执行:: sequenced_policy是作为一种独特类型的歧义并行算法超载,并要求一个并行算法的执行的执行策略类型可能不并行化

  • 20.18.5并行执行策略[execpol.par]

    1. 类execute :: parallel_policy是一种执行策略类型,用作唯一类型以消除并行算法重载的歧义,并指示并行算法的执行可以 并行化

  • 20.18.6并行且无序列的执行策略[execpol.parunseq]

    1. 类execute :: parallel_unsequenced_policy是一种执行策略类型,用作唯一类型以消除并行算法重载的歧义,并指示并行算法的执行可以并行化和向量化

  • 20.18.7未排序的执行策略[execpol.unseq]

    1. 类unsequenced_policy是一种执行策略类型,用作唯一类型以消除并行算法过载的歧义,并指示可以对并行算法的执行进行矢量化处理,例如,使用对多个数据项进行操作的指令在单个线程上执行。

进一步阅读

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

动态控制C ++的执行策略类型

C ++中的执行策略

如何使用新的C ++ 17执行策略?

如何使用 c# 执行 powershell 脚本并设置执行策略?

C ++ 20概念:多个返回类型要求?

比较C ++ 20中的多态类型

复杂浮点类型的C ++ 20概念

C++ 中的策略模式和协变返回类型

chrono 类型到字符串 c++20

如何为类型列表谓词创建C ++ 20概念?

浮点类型作为C ++ 20中的模板参数

具有非类型模板参数的C ++ 20 lambda

如何*编写*具有并行执行策略的C++17算法

通过C#创建帐户时执行Active Directory密码策略

创建C#属性类/为不同类型返回特定属性的策略是什么?

用于检测(通过反射)在C#中Enum是否为“标志”类型的策略

C++ 执行类型检查但不编译文件

非类型模板参数的推断类类型的占位符是否是C ++ 20功能?

如何静态断言该类型对于 c++20 中的模板非类型参数是可行的

我如何(在C ++ 20概念中)要求类型T是对浮点类型的引用?

策略模式-C ++

如何通过源代码中的执行策略检测C ++ 17扩展内存管理算法的可用性?

C++17/20 - 使用 <filesystem> 确定文件是否可执行

给定C ++嵌套的私有结构类型,是否有从文件作用域静态函数访问它的策略?

无法执行类型转换-不兼容的类型,int无法转换为c2

app_dial.c:dial_exec_full无法创建频道类型SIP(原因20未知)

C ++或Java中的数据类型,用于保存20位整数

在 C++20 中声明具有依赖类型参数的模板函数

可以在 C++20 中的 `decltype` 或 `sizeof` 表达式中定义类型吗?