[發(fā)明專利]一種CPU中用于消除程序無條件跳轉(zhuǎn)開銷的方法及裝置有效
| 申請?zhí)枺?/td> | 201911301010.8 | 申請日: | 2019-12-17 |
| 公開(公告)號: | CN111026442B | 公開(公告)日: | 2022-08-02 |
| 發(fā)明(設(shè)計)人: | 王粟;肖佐楠;鄭茳 | 申請(專利權(quán))人: | 天津國芯科技有限公司 |
| 主分類號: | G06F9/30 | 分類號: | G06F9/30 |
| 代理公司: | 天津?yàn)I海科緯知識產(chǎn)權(quán)代理有限公司 12211 | 代理人: | 耿樹志 |
| 地址: | 300457 天津市濱海新區(qū)開發(fā)*** | 國省代碼: | 天津;12 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 cpu 用于 消除 程序 無條件 跳轉(zhuǎn) 開銷 方法 裝置 | ||
本發(fā)明提供了一種使用在嵌入式CPU中的,用于消除程序無條件跳轉(zhuǎn)開銷的方法。該方法通過在匯編程序中插入CPU寄存器賦值指令,將無條件跳轉(zhuǎn)的源地址和目的地址信息,在跳轉(zhuǎn)發(fā)生前就輸入CPU內(nèi)部用于控制跳轉(zhuǎn)的寄存器中。使得CPU能夠提前獲取無條件跳轉(zhuǎn)的地址信息,進(jìn)而實(shí)現(xiàn)在跳轉(zhuǎn)發(fā)生時,無縫切換取指流水線的效果。
技術(shù)領(lǐng)域
本發(fā)明屬于對軟件程序中無條件跳轉(zhuǎn)的加速技術(shù)領(lǐng)域,尤其是涉及一種通過處理器匯編程序優(yōu)化實(shí)現(xiàn)無條件跳轉(zhuǎn)的加速方法。
背景技術(shù)
CPU(中央處理器)的核心功能是讀取并執(zhí)行匯編程序。讀取并執(zhí)行匯編程序的第一步就是取指令,即CPU向總線或存儲設(shè)備發(fā)出目標(biāo)指令的地址,總線或存儲設(shè)備根據(jù)CPU發(fā)出的地址,返回目標(biāo)指令給CPU的過程。匯編程序一般是順序讀取并執(zhí)行的,直到發(fā)生程序的跳轉(zhuǎn)。也就是說,取指時目標(biāo)指令的地址是順序遞增的,直到遇到跳轉(zhuǎn)指令。
從CPU發(fā)出地址,到總線或存儲設(shè)備返回目標(biāo)指令,是有一定延遲時間的。為了整體上在一定時間內(nèi)盡量多的取指,CPU通常采用流水線的方式發(fā)出地址和接受指令,如圖1所示。CPU在時間t0發(fā)出目標(biāo)地址0,在下一個cycle(時鐘周期)不等指令0返回,就繼續(xù)順序發(fā)出地址1,如此下去。當(dāng)總線或存儲設(shè)備返回目標(biāo)地址0所對應(yīng)的指令0時,CPU已流水線化地發(fā)出了d個地址,即CPU的取指延遲是d。
如果指令0經(jīng)過CPU譯碼,發(fā)現(xiàn)正好是一條跳轉(zhuǎn)指令,它的執(zhí)行會將CPU的下一條指令的目標(biāo)地址跳轉(zhuǎn)到了一個新的地址n,那么時間t(d+j)之前發(fā)出的地址和已經(jīng)取得的指令,就都作廢了。CPU重新流水線化地發(fā)出地址n及其后續(xù)地址。當(dāng)指令n進(jìn)入CPU時,時間已經(jīng)過去了t(d+j+d)了。
總結(jié)起來,匯編程序中的每一次跳轉(zhuǎn),使得CPU相對浪費(fèi)了d+j個cycle,其中d是取指延遲時間,j是跳轉(zhuǎn)指令譯碼和目標(biāo)地址的計算時間。匯編程序的跳轉(zhuǎn)打斷了原有的取指流水線,不僅使CPU陷入等待而不能全速運(yùn)行,而且取到了很多無用的指令,白白浪費(fèi)了寶貴的總線帶寬資源。可以說,匯編程序中的跳轉(zhuǎn)是CPU性能的主要影響因素之一。
程序跳轉(zhuǎn),按照類型,可以分為無條件跳轉(zhuǎn)和條件跳轉(zhuǎn)兩大類。無條件跳轉(zhuǎn)是指程序會無條件地跳轉(zhuǎn)到另一個確定的指令地址。在軟件上通常對應(yīng)著子函數(shù)的調(diào)用和退出。條件跳轉(zhuǎn)是指程序會根據(jù)某個變量的值,來判斷是否跳轉(zhuǎn)到另一個確定的指令地址。由于條件跳轉(zhuǎn)不在本文討論范圍內(nèi),因此本文之后的跳轉(zhuǎn)都默認(rèn)指代無條件跳轉(zhuǎn)。
對無條件跳轉(zhuǎn)的加速方法可以分為軟件和硬件兩個方面。在軟件上通常著重減少程序跳轉(zhuǎn)的次數(shù),比如優(yōu)化編譯器,最常采用的是內(nèi)聯(lián)函數(shù)等。在硬件上,著重減少跳轉(zhuǎn)產(chǎn)生的延遲開銷,最常采用的是跳轉(zhuǎn)地址查找表。
但在實(shí)際情況中,內(nèi)聯(lián)函數(shù)對于多次反復(fù)調(diào)用子函數(shù)的情況,會顯著增大程序體量,進(jìn)而增加總線取指負(fù)擔(dān),得不償失。而跳轉(zhuǎn)地址查找表大多采用類似Cache的結(jié)構(gòu),導(dǎo)致源地址到目的地址的首次跳轉(zhuǎn),都是未命中的。只有再次發(fā)生相同的跳轉(zhuǎn)時才可能命中,因此對于程序中只發(fā)生一次的那些跳轉(zhuǎn),查找表并無作用。此外,查找表容量都很小,即使同一個跳轉(zhuǎn)多次發(fā)生,如果相隔時間稍長,往往也不能命中。
目前主流的CPU,已經(jīng)綜合運(yùn)用了上述多種軟硬件機(jī)制來減少跳轉(zhuǎn)帶來的開銷,但從實(shí)際效果上只是起到了一定的緩解,并未從根本上消除跳轉(zhuǎn)對取指流水線的影響。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明旨在提出一種CPU中用于消除程序無條件跳轉(zhuǎn)開銷的方法及裝置,使得CPU能夠提前獲取無條件跳轉(zhuǎn)的地址信息,進(jìn)而實(shí)現(xiàn)在跳轉(zhuǎn)發(fā)生時,無縫切換取指流水線的效果。
第一方面,本發(fā)明提供一種CPU中用于消除程序無條件跳轉(zhuǎn)開銷的方法,包括如下步驟:
1)在匯編程序中找出無條件跳轉(zhuǎn)指令,并記錄其跳轉(zhuǎn)目的程序標(biāo)號,再為該條跳轉(zhuǎn)指令本身添加一個程序標(biāo)號;
2)在跳轉(zhuǎn)指令之前,插入若干條CPU寄存器賦值指令,其所賦的值包含該跳轉(zhuǎn)指令的目的地址信息和源地址信息。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于天津國芯科技有限公司,未經(jīng)天津國芯科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911301010.8/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





