先来一波基础概念:
在操作系统中是指,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。

使用并行模式库 (PPL) 帮助我们实现并行。

PPL 提供以下功能:
任务并行:基于 Windows 线程池来并行执行多个工作项(任务)的机制
并行算法:基于并发运行时对数据集合进行处理的泛型算法
并行容器和对象:对元素提供安全并发访问的泛型容器类型

首先看一个小例子,源代码来自MSDN,点击这里看原文。
实现的是串行和并行模式下斐波那契数列的计算,不过写的比较复杂,我稍微改动了下。
例子1

#include <windows.h>
#include <ppl.h>
#include <array>
#include <vector>
#include <algorithm>
#include <iostream>using namespace concurrency;
using namespace std;vector<double> number;
template <class Function>
DWORD time_call(Function&& function)
{DWORD start = GetTickCount();function();DWORD end = GetTickCount();return end - start;
}// 斐波那契数列
double fibonacci(double number)
{if (number <= 1){return number;}return fibonacci(number-1)+ fibonacci(number - 2);
}int main()
{array<double, 4> arr{24, 26, 41, 42};DWORD time = time_call([&] {for_each(begin(arr), end(arr), [](double &n) {number.push_back(fibonacci(n));}); });cout << "串行,运行时间为:"<< time << "ms" << endl;time = time_call([&]{parallel_for_each(begin(arr), end(arr), [](double &n) {number.push_back(fibonacci(n));}); });cout << "并行,运行时间为:" << time << "ms" << endl;system("pause");return 0;
}

运行结果:

在让我们通过VS2015的诊断空间看看。
这是串行运行时:

这是并行运行时:

等数据足够多且大的时候,并行的效率将会远远高于串行。
以上的例子使用的是
parallel_for:并行方式遍历一个区间。

例子2
parallel_for_each 算法以并行方式对迭代容器执行任务,和parallel_for类似。

    int index = 0;vector<int> number{1,2,3,4,5,6,7,8,9,10,11,12,13,14};parallel_for_each(begin(number), end(number), [&index](int num) {index++;cout << "第" << index << "个数据为" << num << endl;});


至于为什么会出现这种输出结果,很好理解,几个任务同时访问index的内存并对数值进行+1的操作,在其中一个任务开始输出的时候,index已经不知道被访多少次了。

例子3
通过并行,是可以用钱换时间的。。

parallel_invoke 算法采用一系列工作函数(lambda 函数、函数对象或函数指针)作为其参数。 可对 parallel_invoke 算法进行重载以采用 2 到 10 个参数。 传递给 parallel_invoke 的每个函数都必须采用零个参数。

依然是来自于msdn的例子,原文点击这里
代码太长了,我就不粘过来了,大家可以自己点击进去看。
运行的程序是通过串行和并行执行双调排序算法。
运行结果:

诊断工具结果:

其他内容,大家可以看msdn中的并行算法,讲的很详细也很清楚。

【c++】简单了解并行计算库PPL相关推荐

  1. c++并行计算库TBB和PPL的基本用法

    c++并行计算库TBB和PPL的基本用法 参考:http://www.cnblogs.com/qicosmos/p/3517166.html 并行库充分利用多核的优势,通过并行运算提高程序效率,本文主 ...

  2. boost库 tbb_c++并行计算库TBB和PPL的基本用法

    并行库充分利用多核的优势,通过并行运算提高程序效率,本文主要介绍c++中两个知名的并行库,一个是intel开发的TBB,一个是微软开发的PPL.本文只介绍其基本的常用用法:并行算法和任务. TBB(I ...

  3. 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。

    在Linux下如何使用GCC编译程序.简单生成 静态库及动态库.   本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...

  4. 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上

    篇写上一个思路篇,那么今天我们就来完成这一项工作 源代码和配套文件 链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘 ...

  5. 简单的出库入库软件可以帮助提高企业的管理效率

    随着企业规模的不断扩大和业务范围的不断扩展,企业管理的难度也在不断增加.其中,库存管理是企业管理中的一个重要环节,如何高效地管理库存,提高企业的管理效率,是企业管理者们一直在探索的问题. 为了解决这个 ...

  6. python实现简单的并行计算

    python实现多任务的方式包括多线程和多进程,多线程一般可以理解为单个CPU核执行多个任务,而多进程是指多个CPU核执行多个任务,二者区别请转阅他贴:多进程可以使用multiprocessing和M ...

  7. Delphi D10.X 并行库PPL编程之 TParallel.For

    Delphi D10.X 并行库PPL编程系列之 TParallel.For delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ...

  8. Delphi D10.X 并行库PPL编程之TTask

    Delphi D10.X 并行库PPL编程系列之 TTask delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ,让您的应用程序 ...

  9. ucontext-人人都可以实现的简单协程库

    1.干货写在前面 协程是一种用户态的轻量级线程.本篇主要研究协程的C/C++的实现. 首先我们可以看看有哪些语言已经具备协程语义: 比较重量级的有C#.erlang.golang* 轻量级有pytho ...

最新文章

  1. ML之FE:对pandas的dataframe中的类别型字段进行数字编码化(类别型特征数值化)并导出映射表daiding
  2. navigating the online library
  3. 学会使用context取消goroutine执行的方法
  4. oracle数据库建立主键约束,数据库-Oracle主键约束和唯一索引的黑与白
  5. VMware12提示 已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。...
  6. [NVIDIA] Ubuntu 20.04 安装 nvidia-460 + cuda-11.2
  7. 用C#把文件转换为XML
  8. 知识库的构建 3-1 被命名的实体识别分类 NERC
  9. Python利用os.walk遍历文件夹
  10. java点击登录实现跳转_页面跳转的简单实现(单点登录)
  11. 设计模式之原型模式【选用鸣人影分身阐述】
  12. java.util.concurrent.TimeoutExceptiofor com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture
  13. 语音识别(ASR)论文优选:挑战ASR规模极限Scaling ASR Improves Zero and Few Shot Learning
  14. Spring Controller get、post传参解析
  15. EXCEL 技能——等行分页
  16. Android Studio Electric Eel | 2022.1.1 发布,快来看看有什么大更新吧
  17. python3 zlib 实现压缩与解压字符串与文件数据流
  18. Android编程权威指南第3版 源代码
  19. 无人驾驶运用了什么技术,无人驾驶技术是
  20. windows需要关闭的大量读写硬盘的服务

热门文章

  1. 品牌企业如何做好新闻营销?新闻稿推广中的注意事项
  2. 图为信息科技(深圳)有限公司怎么样?
  3. openid 获取失败 errcode 40029 errmsg “invalid code, rid: 643e7e48-3d5b7ec3-66ca1f03“
  4. 让你的网站使用qvod播放器代码
  5. SaveFileDialog控件介绍
  6. 2.7 出口跟单业务
  7. 贵大 计算机科学,贵州大学计算机科学与技术学院官网
  8. django中定时任务的实现
  9. 要抢红包?Python来帮你~
  10. 前端开发需要知道内网和外网的区别