天天看點

公開“英特爾多核平台程式設計優化大賽”優化報告及源代碼

公開“英特爾多核平台程式設計優化大賽”優化報告及源代碼

本系列文章歡迎轉載、列印、分發等,但不可用于商業用途,任何時候必須保留全文完整,并聲明轉載自戀花蝶的部落格(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