[發明專利]基于x86架構的稠密矩陣乘法匯編代碼自動生成方法有效
| 申請號: | 201210199706.6 | 申請日: | 2012-06-14 |
| 公開(公告)號: | CN102750150A | 公開(公告)日: | 2012-10-24 |
| 發明(設計)人: | 王茜;張先軼;張云泉 | 申請(專利權)人: | 中國科學院軟件研究所 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44;G06F17/16 |
| 代理公司: | 北京君尚知識產權代理事務所(普通合伙) 11200 | 代理人: | 余長江 |
| 地址: | 100190 *** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 x86 架構 稠密 矩陣 乘法 匯編 代碼 自動 生成 方法 | ||
技術領域
本發明涉及計算機系統應用技術領域。具體涉及一種面向x86體系架構實現的稠密矩陣乘法函數的匯編代碼自動生成方法。
背景技術
代碼自動生成方法已成為目前的一研究方向,許多應用領域都采用代碼自動生成方法來降低開發周期,提高開發效率,比如專利ZL?200610152345.4,一種基于ASN類型對象的代碼生成方法。
稠密矩陣乘法是基礎線性子程序庫(BLAS)中三級函數之一。它廣泛應用于高性能計算領域,LINPACK測試結果嚴重依賴于稠密矩陣乘法函數的性能。BLAS三級中其余函數均可通過轉換為稠密矩陣乘法來實現。許多CPU廠商自主研發了針對他們自己處理器系統架構特征的高性能基礎線性代數子程序庫,如Intel?MKL和AMD?ACML。
美國德克薩斯大學奧斯汀分校超級計算中心高性能計算組開發的基礎線性代數子程序庫(GotoBLAS)通過手工編寫匯編代碼實現稠密矩陣乘法函數。其性能與CPU廠商自主研發的基礎線程代數子程序庫(MKL,ACML)相當,但由于其(GotoBLAS)采用手工編寫匯編代碼來實現高效的矩陣乘法運算,這將導致稠密矩陣乘法函數的性能與處理器硬件結構特征聯系緊密,比如高速緩存、物理寄存器、算術運算部件等。這些針對處理器硬件資源的優化方法往往具有平臺特殊性,即針對某個特定處理器平臺硬件資源種類和數量優化的稠密矩陣乘法匯編代碼,往往能夠在這個處理器平臺上獲得最優性能效果,但是當移植到另一臺具有不同硬件資源的處理器平臺上時,往往會出現程序性能下降的問題。GotoBLAS采取在不同的處理器上手工編寫不同的稠密矩陣匯編代碼來解決它在不同處理器平臺間的可移植性問題。這是一種低效的代碼開發方式,而且由于匯編代碼的可讀性比較差,代碼的維護工作也需要領域專家來完成。
美國田納西大學創新計算機實驗室開發的自動調優線性代數軟件(ATLAS)采用“軟件的自動經驗優化(AEOS)”方法,為給定的處理器“自動”選定最優的稠密矩陣實現方法。由于ATLAS生成的代碼依賴底層編譯器編譯時實施的寄存器分配優化技術和指令調度優化技術,這兩種優化技術往往對稠密矩陣乘法性能有巨大的影響。通用的底層編譯器,如gcc,提供的優化技術往往需要適用于所有應用,因而不能像領域專家手工調優匯編代碼一樣,針對稠密矩陣乘法的算法特點充分利用物理寄存器資源和算術運算部件資源。因此,雖然ATLAS解決了稠密矩陣乘法函數開發周期長,可移植性差的問題,但是它生成的代碼性能往往與手工優化編寫的基礎線性代數子程序庫GotoBLAS以及CPU生產商自主研發的基礎線性代數子程序庫MKL,ACML存在5%~10%的性能差距。
發明內容
針對現有技術中手工編寫稠密矩陣乘法函數的匯編代碼開發效率低、可移植性差;和已有的自動調優矩陣乘法函數技術依賴底層編譯器優化技術、性能低的缺點,本發明的目的在于提供一種基于x86架構的稠密矩陣乘法匯編代碼生成方法,可針對不同x86處理器平臺硬件資源的種類和數量自動生成稠密矩陣乘法函數的匯編代碼。為降低底層編譯器對生成代碼性能的影響,本發明將傳統編譯器使用的優化技術:寄存器分配和指令調度,從編譯器中“分離”出來,針對稠密矩陣乘法函數運算特點做出改進并給出實現,然后作用于本發明生成的匯編代碼。
本發明解決的稠密矩陣乘法計算形式為:C=A*B+C。在后續說明內容中,A和B為源操作矩陣,C為結果矩陣,其中矩陣A的大小表示為M*K,矩陣B的大小表示為K*N,矩陣C的大小表示為M*N。本發明采用的技術方案如下:
1)將矩陣A和B劃分為較小的矩陣進行計算。首先將矩陣A按Mc*Kc的大小劃分為多個子塊,將矩陣B按Kc*Nc的大小劃分為多個子塊。然后逐次將每個子塊矩陣AMc*Kc拷貝到連續的地址空間中,將每個子塊矩陣BKc*Nc拷貝至連續的地址空間中。本發明主要解決將子塊矩陣乘法的計算過程變為匯編代碼實現問題,該子塊矩陣乘法計算順序采用通用的j-i-k迭代順序,其中k為最內層迭代,j為最外層迭代。
2)利用已有代碼生成工具(POET),將1)中描述的子塊矩陣乘法計算過程翻譯為x86處理器支持的匯編代碼。其中POET是一個可將源程序語言編寫的代碼根據翻譯規則產生用戶自定義程序語言類型代碼的工具,源程序語言可以是C或者Fortran等。在本發明中,POET只作為一個代碼翻譯器工具,就像開發C程序使用的vc編輯器環境一樣。“變換操作規則說明”在本發明中為開發人員根據通用優化技術實現的程序函數,本發明使用的變換操作包含:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國科學院軟件研究所,未經中國科學院軟件研究所許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210199706.6/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種中小型角鋼雙線長尺矯直的精整方法
- 下一篇:具有鎖止元件的排料裝置





