欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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

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


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