官术网_书友最值得收藏!

1.6 內建函數

在ICX編譯器開啟-O2優化選項時,會嘗試對程序進行自動向量化優化。自動向量化優化會利用CPU的單指令多數據(Single Instruction Multiple Data,SIMD)特性,生成對應的SIMD指令來提高程序的運行效率。這類SIMD指令通常能夠在較短的時間周期內完成多個數據項的并行處理。但是,編譯器提供的自動向量化能力往往比較有限,這時可以利用Intel編程手冊提供的高級矢量擴展(Advanced Vector eXtension,AVX)內建函數(intrinsic function)進行特定平臺上的專用向量化編程。合理地使用這些內建函數去編寫專用程序,通常能夠在特定平臺上生成性能更高的代碼。

代碼1.9給出了參考實現,它在代碼1.8的基礎上加入了lntel AVX內建函數,利用AVX內建函數替代了原來最內層的矩陣乘法操作。

代碼1.9 采用了Intel AVX內建函數的矩陣乘法

注意,在使用ICX編譯器編譯包含AVX內建函數的代碼時,需要在編譯選項中添加-march=native選項,例如:

經測試,上述代碼的運行時間為0.36秒。

從實驗結果可見,采用AVX內建函數生成的代碼的運行性能更高。需要說明的是,這里的-march=native選項也會指導編譯器生成更符合當前CPU架構特性的指令序列,這樣的指令序列往往可以在CPU流水線中有更高的執行效率,進而提升程序的實際運行性能。

主站蜘蛛池模板: 新田县| 东阿县| 武穴市| 河北省| 仲巴县| 林甸县| 大埔县| 定西市| 澄江县| 台山市| 江西省| 会理县| 武冈市| 曲靖市| 洛扎县| 甘德县| 镇江市| 乾安县| 广昌县| 文成县| 萍乡市| 麻阳| 普兰县| 安仁县| 仙桃市| 龙井市| 玛多县| 陇川县| 峡江县| 富民县| 林口县| 富源县| 镇沅| 胶南市| 高陵县| 兰溪市| 汉川市| 峨眉山市| 香港 | 哈密市| 平南县|