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:得加油,得加油,得加油。

相關文章
相關標籤/搜索