亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法

文檔序號(hào):6400236閱讀:140來源:國(guó)知局
專利名稱:一種即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,更具體地說,本發(fā)明涉及一種即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法。
背景技術(shù)
在Java 編程語(yǔ)言和環(huán)境中,即時(shí)編譯(JIT compiler, just-1n-time compiler)系統(tǒng)是一個(gè)把Java的字節(jié)碼(包括需要被解釋的指令的程序)轉(zhuǎn)換成可以直接發(fā)送給處理器的指令的程序。當(dāng)寫好一個(gè)Java程序后,源語(yǔ)言的語(yǔ)句將由Java編譯器編譯成字節(jié)碼,而不是編譯成與某個(gè)特定的處理器硬件平臺(tái)對(duì)應(yīng)的指令代碼(比如,Intel的Pentium微處理器或IBM的System/390處理器)。字節(jié)碼是可以發(fā)送給任何平臺(tái)并且能在那個(gè)平臺(tái)上運(yùn)行的獨(dú)立于平臺(tái)的代碼。現(xiàn)有的即時(shí)編譯系統(tǒng),其運(yùn)算過程的中間表示,一般都是基于操作數(shù)棧的,且將操作數(shù)棧實(shí)現(xiàn)為方法棧幀的一個(gè)部分。方法棧幀通常包含局部變量區(qū)、信息保留區(qū)和操作數(shù)棧三個(gè)部分,局部變量區(qū)存儲(chǔ)方法的局部變量,信息保留區(qū)記錄方法調(diào)用返回時(shí)需要保留恢復(fù)的寄存器內(nèi)容,操作數(shù)棧為方法計(jì)算過程提供操作數(shù)。由于操作數(shù)棧屬于方法棧幀,因此當(dāng)發(fā)生方法調(diào)用時(shí),首先需要將調(diào)用者(caller)傳遞給被調(diào)用者(callee)的參數(shù)從將調(diào)用者caller棧幀的操作數(shù)棧中彈出,存入被調(diào)用者callee棧幀的局部變量區(qū),然后被調(diào)用者callee才能開始執(zhí)行,且執(zhí)行過程需要不斷的對(duì)局部變量區(qū)和操作數(shù)棧進(jìn)行訪存操作。上述棧幀設(shè)計(jì)存在大量的訪存操作。具體來說,對(duì)方法調(diào)用類指令,需要將參數(shù)從將調(diào)用者caller的操作數(shù)棧拷貝到被調(diào)用者callee的局部變量區(qū);對(duì)計(jì)算類指令,需要訪問操作數(shù)棧以讀取操作數(shù),以及將計(jì)算結(jié)果寫入操作數(shù)棧。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是針對(duì)現(xiàn)有技術(shù)中存在上述缺陷,提供一種即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法,其能夠避免即時(shí)編譯系統(tǒng)實(shí)現(xiàn)中計(jì)算類指令的訪存操作,提高即時(shí)編譯系統(tǒng)實(shí)現(xiàn)的執(zhí)行效率。根據(jù)本發(fā)明,提供了一種即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法,其包括:采用由變量區(qū)和方法信息保留區(qū)構(gòu)成的全局操作數(shù)棧,所述全局操作數(shù)棧是線程相關(guān)的,且處于向量寄存器文件中;為執(zhí)行引擎的模板表引入了一個(gè)新維度,用于指示操作數(shù)棧棧頂在向量寄存器文件中位置;分配一個(gè)寄存器用來指示溢出區(qū)操作數(shù)棧的棧頂?shù)刂?;在每個(gè)Java線程初始化時(shí),為溢出區(qū)操作數(shù)棧分配一個(gè)頁(yè)面存放溢出數(shù)據(jù),并且將溢出頁(yè)面尾地址記錄在線程局部緩存中。優(yōu)選地,所述即時(shí)編譯系統(tǒng)的壓棧過程包括:
第一壓棧步驟:初始化新維度值為向量寄存器能夠提供的最大槽數(shù),初始化寄存器為溢出頁(yè)面尾地址;第二壓棧步驟:判斷新維度值是否大于0 ;第三壓棧步驟:如果新維度不大于0,則將待壓棧數(shù)據(jù)存入寄存器指向的地址,同時(shí)寄存器減一個(gè)槽大小,指向下一個(gè)可用位置;第四壓棧步驟:如果新維度大于0,則將待壓棧數(shù)據(jù)存入新維度值指示的向量寄存器位置,同時(shí)新維度值遞減,指向下一個(gè)可用的向量寄存器位置。優(yōu)選地,所述即時(shí)編譯系統(tǒng)的彈棧過程的包括:第一彈棧步驟:判斷寄存器是否等于溢出頁(yè)面尾地址;第二彈棧步驟:如果寄存器與溢出頁(yè)面尾地址相等,則從新維度值指示的向量寄存器位置彈出數(shù)據(jù),同時(shí)新維度值遞增;第三彈棧步驟:如果寄存器與溢出頁(yè)面尾地址不等,從寄存器指示的地址讀出數(shù)據(jù),同時(shí)將寄存器減一個(gè)槽大小。根據(jù)本發(fā)明的即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法能夠避免即時(shí)編譯系統(tǒng)實(shí)現(xiàn)中計(jì)算類指令的訪存操作,提高即時(shí)編譯系統(tǒng)實(shí)現(xiàn)的執(zhí)行效率,同時(shí)避免數(shù)據(jù)從向量寄存器文件溢出的情況,因此本發(fā)明提出的基于向量寄存器文件的全局操作數(shù)棧的棧幀設(shè)計(jì)可以顯著提高時(shí)編譯系統(tǒng)的執(zhí)行性能。


結(jié)合附圖,并通過參考下面的詳細(xì)描述,將會(huì)更容易地對(duì)本發(fā)明有更完整的理解并且更容易地理解其伴隨的優(yōu)點(diǎn)和特征,其中:圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的即時(shí)編譯系統(tǒng)的壓棧過程的流程圖。圖2示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的即時(shí)編譯系統(tǒng)的彈棧過程的流程圖。需要說明的是,附圖用于說明本發(fā)明,而非限制本發(fā)明。注意,表示結(jié)構(gòu)的附圖可能并非按比例繪制。并且,附圖中,相同或者類似的元件標(biāo)有相同或者類似的標(biāo)號(hào)。
具體實(shí)施例方式為了使本發(fā)明的內(nèi)容更加清楚和易懂,下面結(jié)合具體實(shí)施例和附圖對(duì)本發(fā)明的內(nèi)容進(jìn)行詳細(xì)描述。本發(fā)明提出了全局操作數(shù)棧的概念?;谌植僮鲾?shù)棧的棧幀結(jié)構(gòu)只需要包括局部變量區(qū)和方法信息保留區(qū)兩個(gè)部分,而不包括操作數(shù)棧這個(gè)部分。同時(shí),本發(fā)明利用向量寄存器文件實(shí)現(xiàn)全局操作數(shù)?!,F(xiàn)有技術(shù)一般不采用向量寄存器文件實(shí)現(xiàn)全局操作數(shù)棧,這是因?yàn)橐韵蛄考拇嫫魑募?shí)現(xiàn)全局操作數(shù)棧存在幾個(gè)問題。首先是執(zhí)行引擎的實(shí)現(xiàn)問題?,F(xiàn)有的執(zhí)行引擎實(shí)現(xiàn)的是方法相關(guān)的操作數(shù)棧,且操作數(shù)棧在內(nèi)存中。與之不同的是,本發(fā)明提出的全局操作數(shù)棧是線程相關(guān)的,且處于向量寄存器文件中。
第二個(gè)問題是溢出問題,當(dāng)全局操作數(shù)棧的深度大于向量寄存器文件所能提供的槽(slot)數(shù)目時(shí),就稱為溢出,現(xiàn)有執(zhí)行弓I擎不存在這個(gè)問題,因?yàn)樗牟僮鲾?shù)棧就在內(nèi)存中,而本發(fā)明需要考慮。下面將以Java虛擬機(jī)為例說明針對(duì)本發(fā)明提出方法的執(zhí)行引擎的實(shí)現(xiàn)方法?,F(xiàn)有Java虛擬機(jī)執(zhí)行引擎在初始化過程中為每條字節(jié)碼創(chuàng)建一個(gè)模板,該模板有多個(gè)入口,對(duì)應(yīng)操作數(shù)棧的棧頂狀態(tài)(TosState )。所有模板構(gòu)成一個(gè)模板表,該表以字節(jié)碼序號(hào)和棧頂狀態(tài)(TosState)構(gòu)成二維索引。與之不同的是,本發(fā)明需要為執(zhí)行引擎的模板表引入了一個(gè)新維度TosPos,用于指示操作數(shù)棧棧頂在向量寄存器文件中位置。具體地說,設(shè)向量寄存器文件構(gòu)成的全局操作數(shù)棧有n個(gè)槽,則新維度TosPos的取值范圍是n
O。其中,更具體地說,n表示向量寄存器還未使用,0表示向量寄存器已滿,即將溢出。為解決溢出問題,需分配一個(gè)寄存器(設(shè)為寄存器sO)用來指示溢出區(qū)操作數(shù)棧(當(dāng)全局操作數(shù)棧的深度大于向量寄存器文件所能提供的槽數(shù)目時(shí)超出部分所處的數(shù)棧區(qū)域)的棧頂?shù)刂?;并且在每個(gè)Java線程初始化時(shí),為溢出區(qū)操作數(shù)棧分配一個(gè)頁(yè)面存放溢出數(shù)據(jù),并且將溢出頁(yè)面尾地址(設(shè)為addSpillPage)記錄在線程局部緩存中。并且,在壓棧過程的開始可將溢出頁(yè)面尾地址設(shè)置為寄存器sO的初值,而且在壓棧過程的開始可將化寄存器sO初始化為溢出頁(yè)面尾地址addSpillPage ;這將在下文予以描述。圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的即時(shí)編譯系統(tǒng)的壓棧過程的流程圖。如圖1所示,根據(jù)本發(fā)明優(yōu)選實(shí)施例的即時(shí)編譯系統(tǒng)的壓棧過程包括:第一壓棧步驟Sll:初始化新維度TosPos值為向量寄存器能夠提供的最大槽數(shù)n,初始化寄存器sO為溢出頁(yè)面尾地址addSpillPage ;第二壓棧步驟S12:判斷新維度TosPos值是否大于0 ;第三壓棧步驟S13:如果新維度TosPos不大于0 (說明向量寄存器已滿),則將待壓棧數(shù)據(jù)存入寄存器sO指向的地址,同時(shí)寄存器sO減一個(gè)槽大小,指向下一個(gè)可用位置;第四壓棧步驟S14:如果新維度TosPos大于0 (說明向量寄存器仍由可用空間),則將待壓棧數(shù)據(jù)存入新維度TosPos值指示的向量寄存器位置,同時(shí)新維度TosPos值遞減,指向下一個(gè)可用的向量寄存器位置。隨后執(zhí)行后續(xù)處理。圖2示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的即時(shí)編譯系統(tǒng)的彈棧過程的流程圖。如圖1所示,根據(jù)本發(fā)明優(yōu)選實(shí)施例的即時(shí)編譯系統(tǒng)的彈棧過程的包括:第一彈棧步驟S21:判斷寄存器sO是否等于溢出頁(yè)面尾地址addSpillPage ;第二彈棧步驟S22:如果寄存器與溢出頁(yè)面尾地址相等(說明棧頂在向量寄存器中),則從新維度TosPos值指示的向量寄存器位置彈出數(shù)據(jù),同時(shí)新維度TosPos值遞增;第三彈棧步驟S23:如果寄存器與溢出頁(yè)面尾地址不等(說明棧頂在溢出頁(yè)中),從寄存器sO指示的地址讀出數(shù)據(jù),同時(shí)將寄存器sO減一個(gè)槽大小。隨后執(zhí)行后續(xù)處理。根據(jù)本發(fā)明實(shí)施例的即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法能夠避免即時(shí)編譯系統(tǒng)實(shí)現(xiàn)中計(jì)算類指令的訪存操作,提高即時(shí)編譯系統(tǒng)實(shí)現(xiàn)的執(zhí)行效率,同時(shí)避免數(shù)據(jù)從向量寄存器文件溢出的情況,因此本發(fā)明提出的基于向量寄存器文件的全局操作數(shù)棧的棧幀設(shè)計(jì)可以顯著提高時(shí)編譯系統(tǒng)的執(zhí)行性能。此外,需要說明的是,除非特別指出,否則說明書中的術(shù)語(yǔ)“第一”、“第二”、“第三”等描述僅僅用于區(qū)分說明書中的各個(gè)組件、元素、步驟等,而不是用于表示各個(gè)組件、元素、步驟之間的邏輯關(guān)系或者順序關(guān)系等??梢岳斫獾氖?,雖然本發(fā)明已以較佳實(shí)施例披露如上,然而上述實(shí)施例并非用以限定本發(fā)明。對(duì)于任何熟悉本領(lǐng)域的技術(shù)人員而言,在不脫離本發(fā)明技術(shù)方案范圍情況下,都可利用上述揭示的技術(shù)內(nèi)容對(duì)本發(fā)明技術(shù)方案作出許多可能的變動(dòng)和修飾,或修改為等同變化的等效實(shí)施例。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所做的任何簡(jiǎn)單修改、等同變化及修飾,均仍屬于本發(fā)明技術(shù)方案保護(hù)的范圍內(nèi)。
權(quán)利要求
1.一種即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法,其特征在于包括: 由向量寄存器構(gòu)成全局操作數(shù)棧,全局操作數(shù)棧是線程相關(guān)的; 采用由變量區(qū)和方法信息保留區(qū)構(gòu)成的棧幀,剔除了局部操作數(shù)棧,避免了相關(guān)訪存開銷; 為執(zhí)行引擎的模板表引入了一個(gè)新維度,用于指示操作數(shù)棧棧頂在向量寄存器文件中位置; 分配一個(gè)特定寄存器用來指示溢出區(qū)操作數(shù)棧的棧頂?shù)刂罚? 在每個(gè)Java線程初始化時(shí),為溢出區(qū)操作數(shù)棧分配一個(gè)頁(yè)面存放溢出數(shù)據(jù),并且將溢出頁(yè)面尾地址記錄在線程局部緩存中。
2.根據(jù)權(quán)利要求1所述的即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法,其特征在于,所述即時(shí)編譯系統(tǒng)的壓棧過程包括: 第一壓棧步驟:初始化新維度值為向量寄存器能夠提供的最大槽數(shù),初始化特定寄存器為溢出頁(yè)面尾地址; 第二壓棧步驟:判斷新維度值是否大于O ; 第三壓棧步驟:如果新維度不大于O,則將待壓棧數(shù)據(jù)存入特定寄存器指向的地址,同時(shí)特定寄存器值減一個(gè)槽大小,指向下一個(gè)可用位置; 第四壓棧步驟:如果新維度大于O,則將待壓棧數(shù)據(jù)存入新維度值指示的向量寄存器位置,同時(shí)新維度值遞減,指向下一個(gè)可用的向量寄存器位置。
3.根據(jù)權(quán)利要求1或2所述的即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法,其特征在于,所述即時(shí)編譯系統(tǒng)的彈棧過程的包括: 第一彈棧步驟:判斷特定寄存器是否等于溢出頁(yè)面尾地址; 第二彈棧步驟:如果特定寄存器與溢出頁(yè)面尾地址相等,則從新維度值指示的向量寄存器位置彈出數(shù)據(jù),同時(shí)新維度值遞增; 第三彈棧步驟:如果特定寄存器與溢出頁(yè)面尾地址不等,從寄存器指示的地址讀出數(shù)據(jù),同時(shí)將寄存器減一個(gè)槽大小。
全文摘要
本發(fā)明提供了一種即時(shí)編譯系統(tǒng)中的棧運(yùn)算優(yōu)化方法。采用向量寄存器構(gòu)成的全局操作數(shù)棧,剔除了棧幀中的局部操作數(shù)棧,節(jié)省了相關(guān)開銷。為執(zhí)行引擎的模板表引入了一個(gè)新維度,用于指示操作數(shù)棧棧頂在向量寄存器文件中位置;分配一個(gè)寄存器用來指示溢出區(qū)操作數(shù)棧的棧頂?shù)刂罚辉诿總€(gè)Java線程初始化時(shí),為溢出區(qū)操作數(shù)棧分配一個(gè)頁(yè)面存放溢出數(shù)據(jù),并且將溢出頁(yè)面尾地址記錄在線程局部緩存中。
文檔編號(hào)G06F9/45GK103106097SQ20131007815
公開日2013年5月15日 申請(qǐng)日期2013年3月12日 優(yōu)先權(quán)日2013年3月12日
發(fā)明者葉俊, 漆鋒濱, 唐大國(guó), 楊小川, 張海軍 申請(qǐng)人:無錫江南計(jì)算技術(shù)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1