MSVC篇
微软在2018年9月份发布博客宣布正式支持C++17的并行算法。它的使用方法和C++17标准基本一致,不用作太多改动。
由于多核会让clock_t
多次累计,因此计时得换用chrono
提供的时间函数。至于究竟使用high_resolution_clock
还是system_clock
倒是无所谓,因为我们测试数据量较大,用时相对会长一点。
最亮眼的一句是:
#include复制代码
有了它之后就可以发挥多核计算的性能了。由于没有在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复制代码
要想体验并行,可以根据这篇的指点配置。使用上基本上都遵循了C++17标准,但是包含头文件得加上pstl
。比如要使用并行的算法algorithm
,在原始的头文件基础上还得追加:
#include#include 复制代码
这点和标准不太一致。
我们考虑对10亿个double
型随机数进行排序,采用均匀分布。一行代码即可:
std::sort(std::execution::par, V.begin(), V.end());复制代码
实测速度是非常的惊人:11秒!
由于使用了并行排序,实际占用内存量会更大且每次执行不同,但不会超过原有向量两倍也即15GB。这说明了内存很重要。
其他
clang和gcc:得加油,得加油,得加油。