微軟在2023年9月份發布部落格using c++17 parallel algorithms for better performance宣布正式支援c++17的並行演算法。它的使用方法和c++17標準基本一致,不用作太多改動。
由於多核會讓clock_t
多次累計,因此計時得換用chrono
提供的時間函式。至於究竟使用high_resolution_clock
還是system_clock
倒是無所謂,因為我們測試資料量較大,用時相對會長一點。
最亮眼的一句是:
#include
複製**
有了它之後就可以發揮多核計算的效能了。由於沒有在windows的較高機器配置,僅僅測試了小資料量情況,一次順利通過。
為了在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
#include
複製**
這點和標準不太一致。
我們考慮對10億個double
型隨機數進行排序,採用均勻分布。一行**即可:
std::sort(std::execution::par, v.begin(), v.end());
複製**
實測速度是非常的驚人:11秒!
由於使用了並行排序,實際占用記憶體量會更大且每次執行不同,但不會超過原有向量兩倍也即15gb。這說明了記憶體很重要。
clang和gcc:得加油,得加油,得加油。
微軟並行庫初體驗之TPL
前端時間因為要做個大資料量分析,所以用c 寫了個指令碼跑,不過由於演算法複雜度問題,初步估計需要40小時才能跑完。為了加快運算,我一開始想到了 平行計算,利用mpich或其他類似的分布式計算框架開發,不過都比較麻煩。正巧微軟新出來的並行庫進入了我的視線,於是做了一次簡單的嘗試。此版本是第二版ctp,...
C 17 之 結構繫結
注意 結構繫結 structured binding 位於iso iec14882 2017 11.5 節.結構繫結的作用是方便從其它資料結構中提取資料,如 pair,tuple,陣列等.通過結構繫結,可以替代 c 17 之前的 std tie,並且使用更加方便.通用的宣告方式為 auto v1,v...
C 17 新特性梳理
目錄 if init表示式 structual bindings inline變數 std string view c 17語言引入了乙個新版本的if switch語句形式,if init condition 和switch init condition 即可以在if和switch語句中直接對宣告變...