微軟在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的較高機器配置,僅僅測試了小數據量狀況,一次順利經過。性能
爲了在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:得加油,得加油,得加油。