[發明專利]面向眾核處理器的修改Java虛擬機的方法在審
| 申請號: | 201710871869.7 | 申請日: | 2017-09-25 |
| 公開(公告)號: | CN107729118A | 公開(公告)日: | 2018-02-23 |
| 發明(設計)人: | 張為華;李弋 | 申請(專利權)人: | 復旦大學 |
| 主分類號: | G06F9/455 | 分類號: | G06F9/455;G06F8/41 |
| 代理公司: | 上海正旦專利代理有限公司31200 | 代理人: | 陸飛,陸尤 |
| 地址: | 200433 *** | 國省代碼: | 上海;31 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 面向 處理器 修改 java 虛擬機 方法 | ||
1.面向眾核處理器的修改Java虛擬機的方法,其特征在于,包括兩個部分:(1)設計半自動化向量化的模型,修改Java前端編譯器,來發現程序中可以用向量計算單元處理的代碼;(2)采用動態預取的方式,充分利用內存訪問帶寬,降低延遲;其中:
步驟(1)所述設計半自動化向量化的模型,修改Java前端編譯器,來發現程序中可以用向量計算單元處理的代碼;具體流程如下:
設計一種半自動的向量化模型,即程序員編碼時在可以向量化的數組循環前加一個注解,將向量化的決定權交給程序員,以更加全面地識別代碼中的SIMD優化機會;
為了支持半自動向量化模型,需要修改Java的前端編譯器;編譯器在處理Java源代碼時,根據注解識別出向量循環,然后把其中的數組操作編譯成一系列新的字節碼,稱之為向量字節碼;根據向量的寬度,來控制循環迭代的跨度,即增加元素的個數;另外,由于眾核處理器上的向量單元對于數據的訪問有地址對齊的要求,而Java虛擬機并沒有嚴格的對齊要求,因此執行包含向量字節碼的高性能應用程序時,要保證數組的起始地址符合向量處理單元的對齊要求。
2.根據權利要求1所述的面向眾核處理器的修改Java虛擬機的方法,其特征在于,步驟(1)中,針對本地匯編庫,對于浮點運算采用的是CPU的向量指令,通過下列兩種方式對Java虛擬機本地匯編庫中的浮點指令編碼進行修改,以生成平臺自定義向量指令集:
(1)等價替換:在平臺向量指令集中尋找功能和語義相同的向量指令,用于替代原有的SSE和AVX指令;如果沒有完全符合要求的單獨指令,則使用若干條指令組合實現;
(2)軟件實現:對于平臺指令集無法覆蓋的浮點運算操作,使用平臺的浮點指令實現。
3.根據權利要求1或2所述的面向眾核處理器的修改Java虛擬機的方法,其特征在于,步驟(2)所述采用動態預取的方式,充分利用內存訪問帶寬,降低延遲;具體內容如下:
動態預取分為兩個部分:Java解釋器中的步長動態分析和JIT編譯器中的循環節點遍歷;當 Java 程序運行至核心計算循環時,分析器被觸發并開始動態收集循環迭代次數;當分析器成功獲取循環長度后,需進一步確定一個初始的預取步長,預取的步長依賴于具體平臺的特征;隨后分析器中的預跑器接收該初始步長,然后根據該初始步長制定一系列不同的預取步長值,并在接下來的若干組運行迭代中插入相應的預取指令操作;其中,每組運行步長所在的范圍遵循下列公式:
S2′=[S2?(1?P),S2?(1+P)]
S1′=[S1?(1?P),S1?(1+P)]
其中,S2和S1分別表示MEM->L2以及L2->L1的各級初始預取步長,P值的設定取決于具體的眾核平臺,預跑器針對所有S1’< S2’的步長組合都會執行循環測試;當測試循環完成后,分析器記錄下運行時間最短的步長組合,并傳入到接下來即將執行優化編譯的 JIT 編譯器中;
當程序進入JIT編譯器的JIT優化編譯過程,通過添加的循環節點遍歷模塊在指令生成階段前對該循環的所有節點進行遍歷;在遍歷過程中,JIT首先識別出循環中所有的內存讀寫操作并在其前后插入預取節點,對于那些對相同地址進行預取操作的重復預取指令,遍歷器通過迭代的掃描,將其找出并消除,并同時判斷對哪些訪存模式需要執行獨占式預取操作;當該循環遍歷結束后,動態編譯進入代碼生成階段,JIT根據優化后的節點圖生成包含預取指令在內的本地指令流,從而完成本次運行時動態預取的策略制定及指令生成工作。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于復旦大學,未經復旦大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710871869.7/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:城市貨物地下智能傳輸系統
- 下一篇:依托現有高速公路建立高速管道物流的方法





