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却是无所谓,由于咱们测试数据量较大,用时相对会长一点。bash

最亮眼的一句是:函数

#include <execution>
复制代码

有了它以后就能够发挥多核计算的性能了。因为没有在Windows的较高机器配置,仅仅测试了小数据量状况,一次顺利经过。性能

ICC篇

为了在Mac上体验C++17的并行新特性,我申请了教育版套装Intel® Parallel Studio XE 2019,其中包含了Intel® C++ Compiler 19.0 for macOS。虽然也有不少使用的曲折,但感受它未来能够作得更完善一些。测试

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

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

使用C++编译器:code

icpc source.cpp
复制代码

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

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

这点和标准不太一致。htm

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

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

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

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

其余

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

相关文章
相关标签/搜索