MSVC篇

微软在2018年9月份发布博客Using C++17 Parallel Algorithms for Better Performance宣布正式支持C++17的并行算法。它的使用方法和C++17标准基本一致,不用作太多改动。

由于多核会让clock_t多次累计,因此计时得换用chrono提供的时间函数。至于究竟使用high_resolution_clock还是system_clock倒是无所谓,因为我们测试数据量较大,用时相对会长一点。

最亮眼的一句是:

#include <execution>
复制代码

有了它之后就可以发挥多核计算的性能了。由于没有在Windows的较高机器配置,仅仅测试了小数据量情况,一次顺利通过。

ICC篇

为了在Mac上体验C++17的并行新特性,我申请了教育版套装Intel® Parallel Studio XE 2019,其中包含了Intel® C++ Compiler 19.0 for macOS。虽然也有很多使用的曲折,但感觉它将来可以做得更完善一些。

这个编译器使用很简单,参考安装路径下的这篇帮助即可:

opt/intel/documentation_2019/en/compiler_c/ps2019/get_started_mc.htm
复制代码

使用C++编译器:

icpc source.cpp
复制代码

要想体验并行,可以根据这篇Get Started with Parallel STL的指点配置。使用上基本上都遵循了C++17标准,但是包含头文件得加上pstl。比如要使用并行的算法algorithm,在原始的头文件基础上还得追加:

#include <pstl/execution>
#include <pstl/algorithm>
复制代码

这点和标准不太一致。

我们考虑对10亿个double型随机数进行排序,采用均匀分布。一行代码即可:

std::sort(std::execution::par, V.begin(), V.end());
复制代码

实测速度是非常的惊人:11秒!

由于使用了并行排序,实际占用内存量会更大且每次执行不同,但不会超过原有向量两倍也即15GB。这说明了内存很重要。

其他

clang和gcc:得加油,得加油,得加油。

C++17 并行排序初体验相关推荐

  1. 《编程之美——微软技术面试心得》一摞烙饼的排序初体验

    <编程之美>读书笔记:1.3 一摞烙饼的排序 问题: 星期五的晚上,一帮同事在希格玛大厦附近的"硬盘酒吧"多喝了几杯.程序员多喝了几杯之后谈什么呢?自然是算法问题.有个 ...

  2. 微软并行库初体验之TPL

    前端时间因为要做个大数据量分析,所以用C#写了个脚本跑,不过由于算法复杂度问题,初步估计需要40小时才能跑完.为了加快运算,我一开始想到了 并行计算,利用MPICH或其他类似的分布式计算框架开发,不过 ...

  3. 我的Go+语言初体验——Go+简单应用—选择排序

    "我的Go+语言初体验" | 征文活动进行中......

  4. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)

    2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...

  5. 树莓派2代B model 上手初体验,不用显示器,Python GPIO 点亮一颗LED

    开题:[好东西,值得研究!] 标题:树莓派2代B model 上手初体验,不用显示器,Python GPIO 点亮一颗LED [知识普及] 1,树莓派各版本对比: 2,树莓派2代BModel 主板,图 ...

  6. python简单体育竞技模拟_python初体验 —— 模拟体育竞技

    python初体验 -->>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...

  7. python模拟足球比赛_python初体验 —— 模拟体育竞技

    python初体验 -->>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...

  8. 【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

    ----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafk ...

  9. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  10. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验( ...

最新文章

  1. linespace 自动生成线性向量的API
  2. 【CVPR2020-中科院计算所】多模态GNN:在视觉信息和场景文字上联合推理
  3. 吸引:由《你的知识需要管理》编辑过程想到的
  4. WSO2 ESB(1)
  5. Prototype模式
  6. (88)FPGA二分频设计,面试必问(十二)(第18天)
  7. Docker 三剑客之 Docker Compose
  8. 2018华为软挑参赛体验
  9. CMM&CMMI 简介
  10. 交换机的RTU License 华为S5700交换机
  11. 读《美国交通信号配时实践经验》后的感受
  12. 快来加入阿里云大学【云学院】班级助理—机会稍纵即逝,错过遥遥无期
  13. 三星nand flash K9K8G08U0M详解
  14. [UE4][Material] Spline样条网格材质消失问题记录
  15. 整理了173家国企清单,跳槽必备!
  16. goldendict 屏幕取词
  17. 34.UCASE() LCASE() 函数
  18. CrawlSpider实现微信小程序社区爬虫
  19. 【嵌入式20】STM32F103完成对SD卡的数据读取详细操作
  20. Geospatial Data Science (4): Spatial weights

热门文章

  1. AWS-EC2域名映射
  2. 本次技术博客平台的选择
  3. 腾讯/网易/263/阿里云企业邮箱登录入口
  4. 7-12 分解质因数 (10分)
  5. 小米手机后台弹出界面(允许应用在后台弹出界面)权限问题解决方案
  6. 激光投影仪和大屏液晶电视有哪些优缺点?二者应该怎么选?
  7. http接口公网对接时用到的RSA加密/解密实现示例
  8. Node之使用os模块获取操作系统信息
  9. 【转】写给自学者的入门指南
  10. 【cs231n学习笔记(2017)】—— 神经网络激活函数