当前位置: 首页 > news >正文

C++17 并行排序初体验

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:得加油,得加油,得加油。

相关文章:

  • Oracle DataGuard常用管理命令
  • SSH远程管理常用的几种配置
  • Nuxt 开发 - 项目初始化
  • 赖世雄:新中考英语听说满分冲刺 笔记
  • MariaDB数据基础应用
  • 百度小程序遇到的问题
  • 【总结整理】房产类---转自人人都是产品经理
  • Mac mojova 10.14.1 安装 Cocoapods
  • RabbitMQ的前世今生
  • SpringBoot服务器压测对比(jetty、tomcat、undertow)
  • HDU-1087-Super Jumping! Jumping! Jumping!(DP+上升子序列)
  • 比特币代码分析7 交易校验
  • rsync + inotify 数据实时同步
  • JQuery each循环跳出和结束
  • 从paxos到zookeeper 分布式一致性原理与实践
  • [译]前端离线指南(上)
  • 【翻译】babel对TC39装饰器草案的实现
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • gitlab-ci配置详解(一)
  • JavaScript对象详解
  • JavaScript类型识别
  • Linux CTF 逆向入门
  • mysql外键的使用
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • spring boot 整合mybatis 无法输出sql的问题
  • 大快搜索数据爬虫技术实例安装教学篇
  • 浮现式设计
  • 记一次用 NodeJs 实现模拟登录的思路
  • 力扣(LeetCode)357
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 学习Vue.js的五个小例子
  • 原生Ajax
  • 回归生活:清理微信公众号
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​批处理文件中的errorlevel用法
  • (26)4.7 字符函数和字符串函数
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (笔试题)分解质因式
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (一)u-boot-nand.bin的下载
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)我也是一只IT小小鸟
  • ./configure,make,make install的作用
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net 应用中使用dot trace进行性能诊断
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET6实现破解Modbus poll点表配置文件
  • .NetCore部署微服务(二)
  • .NET和.COM和.CN域名区别
  • .NET建议使用的大小写命名原则
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件