微软并行模式库(PPL)
PPL官网文档:
https://docs.microsoft.com/zh-cn/cpp/parallel/concrt/concurrency-runtime?view=vs-2019
并发运行时体系结构
PPL库组件:
组件 | 头文件 |
---|---|
并行模式库 (PPL) |
ppl.h concurrent_queue.h concurrent_vector.h |
异步代理库 | agents.h |
任务计划程序 | concrt.h |
资源管理器 | concrtrm.h |
并发运行时动态库–concrtXXX.dll,使用ppl时,发布版本会依赖并发运行时库。
任务并行(并发运行时)
concurrency::concurrent_vector
concurrency::task
concurrency::task_group类、concurrency::parallel_invoke算法
concurrency::task::then
concurrency::when_all、concurrency::when_any
并行算法
parallel_for
parallel_for_each
parallel_invoke
Parallel_transform
parallel_reduce
分区的工作
concurrency::affinity_partitioner
concurrency::auto_partitioner
concurrency::simple_partitioner
concurrency::static_partitioner
并行排序
concurrency:: parallel_sort
concurrency:: parallel_buffered_sort
concurrency:: parallel_radixsort
算法 | 描述 | 排序机制 | 排序稳定性 | 内存要求 | 时间复杂性 | 迭代器访问 |
---|---|---|---|---|---|---|
parallel_sort | 通用的基于比较的排序。 | 基于比较(升序) | 不稳定 | None | O((N/P)log(N/P) + 2N((P-1)/P)) | 随机 |
parallel_buffered_sort | 需要 O(N) 空间,基于比较的更快的通用排序。 | 基于比较(升序) | 不稳定 | 需要额外的O(n)空间 | O((N / P)log(N)) | 随机 |
parallel_radixsort | 需要O(N)空间,基于整数键的排序。 | 基于哈希 | 稳定版 | 需要额外的O(n)空间 | O(N/P) | 随机 |
这些并行排序算法支持移动语义。 可以定义一个移动赋值运算符,以使交换操作的出现更有效。 有关移动语义和移动赋值运算符的详细信息,请参阅右值引用声明符:&&,并移动构造函数和移动赋值运算符 (C++)。 如果您不提供移动赋值运算符或交换函数,排序算法将使用复制构造函数。
并行容器和对象
concurrent_vector 类
concurrent_queue 类
concurrent_unordered_map 类
concurrent_unordered_multimap 类
concurrent_unordered_set 类
concurrent_unordered_multiset 类
combinable 类
取消任务
https://docs.microsoft.com/zh-cn/cpp/parallel/concrt/cancellation-in-the-ppl?view=vs-2019
任务取消是十分重要的技术
bool do_work()
{// Simulate work.wcout << L"Performing work..." << endl;wait(250);return true;
}
void cancel_task() {cancellation_token_source cts;auto token = cts.get_token();wcout << L"Creating task..." << endl;// Create a task that performs work until it is canceled.auto t = create_task([&token]{bool moreToDo = true;while (moreToDo){// Check for cancellation.// is_task_cancellation_requested函数已从vs2015中删除// 这个官方文档中并没有更新,从一定程度上说明微软自身也不太重视PPL的使用和维护了// if (is_task_cancellation_requested())if (token.is_canceled()){// TODO: Perform any necessary cleanup here...// Cancel the current task.cancel_current_task();}else{// Perform work.moreToDo = do_work();}}});// Wait for one second and then cancel the task.wait(1000);wcout << L"Canceling task..." << endl;cts.cancel();// Wait for the task to cancel.wcout << L"Waiting for task to complete..." << endl;t.wait();wcout << L"Done." << endl;
}
微软并行模式库(PPL)相关推荐
- 【c++】简单了解并行计算库PPL
先来一波基础概念: 在操作系统中是指,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的. 使用并行模式库 (PPL) 帮助我们实现并行. PPL 提供以下功能: 任务并行:基于 W ...
- Delphi D10.X 并行库PPL编程之 TParallel.For
Delphi D10.X 并行库PPL编程系列之 TParallel.For delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ...
- Delphi D10.X 并行库PPL编程之TTask
Delphi D10.X 并行库PPL编程系列之 TTask delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ,让您的应用程序 ...
- 微软并行库初体验之TPL
前端时间因为要做个大数据量分析,所以用C#写了个脚本跑,不过由于算法复杂度问题,初步估计需要40小时才能跑完.为了加快运算,我一开始想到了 并行计算,利用MPICH或其他类似的分布式计算框架开发,不过 ...
- cmake导入so库_libgo - 协程库、并行编程库
libgo是一个使用C++11编写的协作式调度的stackful协程库, 同时也是一个强大的并行编程库, 是专为Linux服务端程序开发设计的底层框架. 目前支持三个平台: Linux (GCC4.8 ...
- OpenMP和MPI并行模式的区别?
1.OpenMP OpenMP是一种用于共享内存并行系统的多线程程序设计的库(Compiler Directive),特别适合于多核CPU上的并行程序开发设计.它支持的语言包括:C语言.C++.For ...
- 微软的Ajax库客户端Bug总结
已经用微软的Ajax库做了几个比较成功的项目,在这过程中也发现了Ajax库的一些错误,今天把它们都一一列出来,给大家一个参考.在项目中使用到的主要是Xml-script的功能,这个功能在早期的Atla ...
- mfc140dll 丢失 微软常用运行库_集成最新运行库、一键安装、一键到位,运行库操作简单!...
背景有很多童鞋在安装诸如PS.vc++等软件总会提示缺少关键组件或者运行框架,也有在后台问我的,所以今天就给大家分享一下一些电脑安装软软件或者游戏常用的运行库,号主找了一些并且写了批处理直接运行就可以 ...
- mfc140dll 丢失 微软常用运行库_微软常用运行库合集 2020.9月(32amp;64位)
每日一谈 电脑在刚买来的时候,我们常常会思考一个问题,那就是微软的运行库有必要安装吗?微软运行库有什么用?其实在这里我想说,微软运行库主要是运行计算机软件的,例如一些测绘的职业人员,需要用到Auto ...
- NVIDIA CUDA 高度并行处理器编程(九):并行模式:稀疏矩阵-向量乘法
并行模式:稀疏矩阵-向量乘法 背景 使用 CSR 格式的并行 SpMV 填充与转置 使用混合方法来控制填充 通过排序和划分来规则化 介绍并行算法中的压缩与规格化 背景 稀疏矩阵是很多元素是 0 的矩阵 ...
最新文章
- 70个NumPy分级练习:用Python一举搞定机器学习矩阵运算
- iOS证书申请详细流程
- R语言实战应用精讲50篇(二十九)-R语言算法应用案例:路径路网轨迹绘图分析(英国自行车数据库)
- QT4使用HDF5 类型错误
- Web Magic 总体架构
- Python项目中 封装日志模块logging 及快速调用方法
- python3生成器与迭代器_Python3迭代器与生成器
- Block 在不同情况下的变量存储区域
- 弹窗整人php源码,整人无限弹窗[附源码]
- LaTeX 常用符号大全(from wikipedia)
- (数据库-MySQL) Date 函数
- Python入门题031:excel表格筛选重复数据
- 数理统计 - 圆环上随机取3个点组成一个锐角三角形的概率
- 化妆品店5大智能玩法,引领美容美妆新零售趋势
- 17.10.21B组题解
- 吸血鬼数字 java_找出吸血鬼数(Java)
- NSSCTF web刷题
- Mysql数据库引擎的区别
- psv无线怎么连接电脑连接电脑连接服务器,PSVR怎么接电脑 PS VR连接电脑使用教程...
- 1994_An Algorithm To Reconstruct Wideband Speech From Narrowband Speech Based On Codebook Mapping
热门文章
- web前端开发中的英文单词记录(不定期更新)
- java的前生今世_java注解的前生今世
- 【C++】内联函数相关
- 计算机病毒主要是通过磁盘和传播的,计算机病毒主要是通过磁盘与网络传播的。...
- 有限元分析软件ANSYS简介以及其模块许可优化管理应用
- 荣耀用鸿蒙,荣耀还能用鸿蒙系统吗?CEO赵明正式表态,老用户有福了!
- MySQL查询语句练习集合
- OPENCV+CUDA+VS+无法定位程序输入点QXXXX于动态链接库XXXX.exe问题解决
- JetBrains ToolBox修改应用安装位置
- 测试模板:缺陷趋势图