C 17 並行排序初體驗

2021-09-24 07:27:10 字數 1233 閱讀 8430

微軟在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語句中直接對宣告變...