公開“英特爾多核平台編程最佳化大賽”最佳化報告及原始碼
本系列文章歡迎轉載、列印、分發等,但不可用於商業用途,任何時候必須保留全文完整,並聲明轉載自戀花蝶的部落格(http://blog.csdn.net/lanphaday),謝謝。
這次Intel的最佳化比賽時間比較長,所以我也能夠在周未和晚上的業餘時間裡參加了這個比賽,感覺學到很多東西,所以就在CSDN論壇上號召大家公開各自己的最佳化報告和原始碼,得到了大家的響應,這讓我由衷地高興。參加比賽的很多高手,達到了匪夷所思的速度,這些公開的最佳化報告和原始碼,必定能夠增進大家的知識,我很樂意參與比賽,更樂意公開自己的最佳化報告和原始碼。
在比賽中,我通過以面若干種最佳化方法最佳化後,我還嘗試了手寫SSE2進行彙編最佳化,但因為並不十熟悉彙編,所以沒有能夠成功。為了方便查看,製作了下面的資料比對錶:
最佳化方法 已耗用時間 加速比(相對於上一種最佳化)
最初未最佳化版本 4.55s --
用乘法替換pow函數 3.28 1.38
啟用SSE2 2.84 1.15
使用ICC 1.99 1.42
使用MKL vdInvSqrt函數 1.21 1.64
使用OpenMP,static調度 0.95 1.27
使用OpenMP,guided調度,倒序迴圈 0.64 1.48
使用/fp:fast參數,針對CPU最佳化,利用數學公式減少常數運算 0.57 1.12
提高cache命中率 0.51 1.11
參照上表,我們可以看出用乘法替換pow函數、使用ICC、使用MKL和使用guided調用方法和倒序迴圈取得了極佳的最佳化效果,這些對以我們以後在其它工作中進行最佳化提供了高階的指導方針。
因為使用WPS進行排版的文檔粘貼到CSDNblog時效果不好,所以變成那樣了,呵呵,大家可以下載完整版本的文檔跟源碼來查看。下面是文檔的目錄:
程式編譯和啟動並執行方法 1
1、編輯環境: 1
2、編譯步驟: 1
3、運行方法: 3
最佳化工作的主要步驟與最佳化方法的說明 3
1、Vtune分析熱點,替換pow函數為兩數相乘的宏,減少變數使用 4
2、啟用SSE2最佳化 4
3、使用ICC 5
4、使用MKL vdInvSqrt()函數 5
5、並行,OpenMP的ShowTime 5
6、新並行!TProfiler臨危救主! 6
7、零碎而有效幾點最佳化方式 7
8、Vtune,王者歸來,提高cache命中率 7
資料比對 7
參賽感受 8
大家可以從以下地址下載最佳化報告和原始碼壓縮包:
http://www.cppblog.com/Files/laiyonghao/LaiYonghao_potential.rar