為了測試icc和clang的sort
函式效能,我們還是搬出10億規模的隨機數排序:
icc篇
本來直接使用即可:
icpc billionsort.cpp
./a.out
複製程式碼
可是執行之後會出現:
0.0535384 minutes
Segmentation fault: 11
複製程式碼
也就是真正開始使用向量的時候出錯,事實上它返回的向量長度是18446744073635809792
而不是我們輸入的1000000000
,實際上這個結果是-1000000000
轉化成無符號數的結果。這是一個bug,而且是在O2
級別以上優化才會出現的問題,所以只能使用:
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篇
使用高階優化編譯之後順利執行:
clang++ -O3 x.cpp
./a.out
複製程式碼
隨便拿一次執行結果出來:
0.10993 minutes
0.229284 minutes
3.21184 minutes
複製程式碼
優化得很不錯。
總結
clang穩定,而且效能優化也很好,但是目前對並行演算法支援不太好,有待加強。icc的確要加強穩定性了,而且優化效能也沒能讓人滿意,目前對優勢在於對並行排序的支援。