[發(fā)明專利]在編譯過程中改善乘加類指令執(zhí)行性能的方法有效
| 申請?zhí)枺?/td> | 201310150714.6 | 申請日: | 2013-04-26 |
| 公開(公告)號: | CN103268223A | 公開(公告)日: | 2013-08-28 |
| 發(fā)明(設計)人: | 周志德 | 申請(專利權)人: | 深圳中微電科技有限公司 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44;G06F9/30 |
| 代理公司: | 深圳市科吉華烽知識產權事務所(普通合伙) 44248 | 代理人: | 胡吉科;孫偉 |
| 地址: | 518057 廣東省深圳市南山區(qū)高新*** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 編譯 過程 改善 乘加類 指令 執(zhí)行 性能 方法 | ||
技術領域
本發(fā)明涉及源代碼的編譯方法,更具體地說,涉及一種在編譯過程中改善乘加類指令執(zhí)行性能的方法。
背景技術
在計算機的程序中,需要取得兩個數相乘然后再與另外一個相加的結果是非常普遍的。例如,在純量積、矩陣乘法和許多多項式形式的求解中。由于表達式a×b+c經常出現并需要對其運算,大多數流行的處理器提供乘加指令(multiply-add?instruction,MADD),以改進算法執(zhí)行的性能。MADD用于提高計算速度,因為其能夠實現先乘后加兩次運算,所以其一個指令相當于兩個指令。由于兩次運算融合為一次,MADD也可以被視為一個融合的乘-加(fused?multiply-add,FMA)運算。
通常,MADD指令的形式為:
d=a×b+c
此時,由于要求指定3個操作數和1個結果,在指令編碼時,除了需要在指令中使用更多的字節(jié),還會導致硬件實施更加復雜,這是由于該指令要求增加第3個硬件讀取端口的緣故。另外一種選擇是將MADD視為乘積累加(multiply-accumulate,MAC)運算,通過求和使乘積被累加。在這種情況下,處理器提供一個特殊的寄存器,累加器(accumulator,acc),其有一個隱含的操作數和一個隱含的MAC的結果。MAC的格式如下:
mac?a?b
此時,該式的意思是:acc=a×b+acc
由于acc是特殊的寄存器,處理器必須定義兩個附加的指令,初始化acc指令(initacc)和由acc中取值指令(mvacc)。
對于MAC指令而言,雖然這種形式可以使硬件實施簡化,但是其必須總是使用acc寄存器使得編程的靈活性有所下降。當程序員在使用高級語言例如C和c++編程時,僅僅編譯器決定何時使用MAC以及何時不使用MAC就使得MAC這種方法變得較為困難,累加器資源變得不足常常是MAC能否使用的一個決定因素。因此,雖然MAC指令不需要增加額外的硬件結構,但是,在現有技術中,由于累加器的限制,在源代碼編譯后實際認出可執(zhí)行MAC指令的情景并不多,使得其執(zhí)行收益較低。
發(fā)明內容
本發(fā)明要解決的技術問題在于,針對現有技術的上述硬件結構復雜、執(zhí)行受到限制、執(zhí)行收益不高的缺陷,提供一種不需要改進硬件、執(zhí)行收益較高的在編譯過程中改善乘加類指令執(zhí)行性能的方法。
本發(fā)明解決其技術問題所采用的技術方案是:構造一種在編譯過程中改善乘加類指令執(zhí)行性能的方法,包括如下步驟:
A)編譯器對源代碼進行編譯,將源代碼轉換為內部表征;并優(yōu)化所述內部表征;
B)產生基于目標處理器的機器碼,對所述機器碼中的偽寄存器分配物理寄存器;
C)分別對乘積累加類指令的寄存器分配進行改進,如果在該段代碼存在至少一個累加器空閑,則按照設定條件將至少一個空閑累加器分配給當前乘積累加類指令中的偽寄存器,使其使用所述累加器實行乘積累加;如果當前沒有累加器空閑,則分配普通寄存器到當前乘積累加類指令,使乘積累加類指令通過兩個獨立的運算實現。
更進一步地,所述步驟A)中,在對所述源代碼進行編譯的中端階段,將源代碼中所有的兩數相乘再與另一數相加的表達式均轉換為乘加指令形式。
更進一步地,所述步驟B)中進一步包括:將所有的乘加指令通過增加一個拷貝指令的步驟,并將其轉換為乘積累加類指令。
更進一步地,所述步驟B)中采用基于優(yōu)先權的寄存器分配方法,按照當多個偽寄存器競爭有限數量個物理寄存器時,優(yōu)先分配執(zhí)行次數最多的寄存器以及當多個物理寄存器可以配置到一個偽寄存器時,優(yōu)先采用性能收益最大的物理寄存器配置的方法為所述偽寄存器配置物理寄存器。
更進一步地,判讀所述性能收益最大包括:判斷偽寄存器是否出現在一個乘積累加類指令中,如否,為其配置普通物理寄存器;如是,且當前存在至少一個空閑的累加器,將累加器配置到該偽寄存器。
更進一步地,所述步驟C)進一步包括:
如果一個乘積累加類指令沒有分派到累加器,引入一個新的偽寄存器存儲中間結果,并分別執(zhí)行所述乘積累加類指令源代碼中的兩個運算操作。
更進一步地,所述步驟C)進一步包括:在一個累加器被分配給一個普通指令作為其操作結果的情況下,如果該指令是拷貝指令,轉換該指令為初始化累加器(initacc)指令;否則,使用一個新的偽寄存器取代累加器,并插入一個初始化累加器(initacc)指令,使用所述普通指令中的偽寄存器初始化累加器。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于深圳中微電科技有限公司,未經深圳中微電科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310150714.6/2.html,轉載請聲明來源鉆瓜專利網。





