clang與icc:標準庫排序性能對比

爲了測試icc和clang的sort函數性能,咱們仍是搬出10億規模的隨機數排序:git

github.com/xiexiexx/Pl…github

icc篇

原本直接使用便可:算法

icpc billionsort.cpp
./a.out
複製代碼

但是執行以後會出現:性能優化

0.0535384 minutes
Segmentation fault: 11
複製代碼

也就是真正開始使用向量的時候出錯,事實上它返回的向量長度是18446744073635809792而不是咱們輸入的1000000000,實際上這個結果是-1000000000轉化成無符號數的結果。這是一個bug,並且是在O2級別以上優化纔會出現的問題,因此只能使用:bash

icpc -O1 billionsort.cpp
./a.out
複製代碼

卻是能運行出結果,可是這樣無法比較clang的性能。函數

因此,咱們考慮將billionsort.cpp中的1000000000改爲2000000000,也就是20億個數的排序,重命名爲x.cpp,再使用高級優化:性能

icpc -O3 x.cpp
./a.out
複製代碼

此次卻是不出錯了,隨便拿一次運行結果看看:測試

0.108003 minutes
0.309677 minutes
3.27189 minutes
複製代碼

固然,因爲是隨機輸入,咱們須要屢次重複運行程序取平均,這個實驗留給你們本身作吧。優化

clang篇

使用高級優化編譯以後順利執行:spa

clang++ -O3 x.cpp
./a.out
複製代碼

隨便拿一次執行結果出來:

0.10993 minutes
0.229284 minutes
3.21184 minutes
複製代碼

優化得很不錯。

總結

clang穩定,並且性能優化也很好,可是目前對並行算法支持不太好,有待增強。icc的確要增強穩定性了,並且優化性能也沒能讓人滿意,目前對優點在於對並行排序的支持。

相關文章
相關標籤/搜索