[發(fā)明專利]一種用于可擴(kuò)展指令集的編譯器及編譯方法有效
| 申請(qǐng)?zhí)枺?/td> | 201911298413.1 | 申請(qǐng)日: | 2019-12-17 |
| 公開(公告)號(hào): | CN111078290B | 公開(公告)日: | 2023-03-14 |
| 發(fā)明(設(shè)計(jì))人: | 蔡覺平;張芳芳 | 申請(qǐng)(專利權(quán))人: | 西安電子科技大學(xué) |
| 主分類號(hào): | G06F9/30 | 分類號(hào): | G06F9/30;G06F8/41 |
| 代理公司: | 陜西電子工業(yè)專利中心 61205 | 代理人: | 田文英;王品華 |
| 地址: | 710071*** | 國省代碼: | 陜西;61 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 用于 擴(kuò)展 指令 編譯器 編譯 方法 | ||
本發(fā)明公開了一種用于可擴(kuò)展指令集的編譯器及編譯方法。本發(fā)明的編譯器包括:輸入模塊、嵌入模塊、編譯模塊。本發(fā)明的步驟包括:獲取并解析指令集描述文件,獲取并解析編譯策略文件,生成匹配函數(shù),在編譯器中嵌入匹配函數(shù),獲取源代碼,將源代碼中的特殊代碼段編譯為擴(kuò)展指令序列,普通代碼段編譯為基礎(chǔ)指令序列。本發(fā)明可以簡化用戶在已有的編譯系統(tǒng)添加擴(kuò)展指令的工作,提高程序的執(zhí)行效率。
技術(shù)領(lǐng)域
本發(fā)明涉及物理技術(shù)領(lǐng)域,更進(jìn)一步涉及計(jì)算機(jī)技術(shù)領(lǐng)域中的一種用于可擴(kuò)展指令集的編譯器及編譯方法。本發(fā)明可用于解決開放可擴(kuò)展指令集處理器的編譯工具開發(fā)困難且效率低的問題。
背景技術(shù)
通用處理器可以運(yùn)行各種程序,處理各種數(shù)據(jù),但在一些專用領(lǐng)域CPU的處理效率低下;專用處理器則對(duì)于特定應(yīng)用領(lǐng)域處理效率高,但其開發(fā)周期長且應(yīng)用范圍窄。所以近年來部分指令集架構(gòu)的開發(fā)者們將目光轉(zhuǎn)向了開放可擴(kuò)展的CPU架構(gòu)。允許在CPU內(nèi)核中加入自定義的指令意味著芯片設(shè)計(jì)廠商與高校研究人員可以創(chuàng)建自己的優(yōu)化算法,然后直接在CPU上運(yùn)行,從而有機(jī)會(huì)進(jìn)一步提高性能和效率。
處理器的的開發(fā)設(shè)計(jì)離不開工具鏈的支持,功能強(qiáng)大且被廣泛使用的編譯器工具鏈如GNU與LLVM雖然能在在一定程度上能支持用戶添加新的指令,但是對(duì)于一些比較特殊的指令,如向量操作或矩陣操作,工具鏈的修改非常困難。對(duì)于硬件開發(fā)人員來說,要攻克代碼量龐大且結(jié)構(gòu)復(fù)雜的編譯器工具幾乎是不現(xiàn)實(shí)的,在這種情況下的一個(gè)常用的解決辦法是在高級(jí)語言程序的編譯器中不增加對(duì)新指令的支持,而是直接在高級(jí)語言代碼中嵌入?yún)R編代碼,例如傳統(tǒng)的編譯器如GCC、C++及Clang都提供了內(nèi)聯(lián)匯編代碼的功能,在GCC中這些匯編代碼被稱作GCC Inline ASM,這種技術(shù)非常有用,但提高了對(duì)程序員的要求,破壞了代碼的可移植性。另一種方法是在編譯器中添加intrinsic核函數(shù),例如LLVM編譯框架提供了在已有的編譯體系中添加intrinsic函數(shù)的接口,該方法需要修改編譯框架內(nèi)多個(gè)文件,要求開發(fā)人員具備一定的編譯原理知識(shí)與對(duì)編譯器結(jié)構(gòu)有一定的了解。
華為科技有限公司在其申請(qǐng)的專利文獻(xiàn)“一種硬件加速方法、編譯器以及設(shè)備”(專利申請(qǐng)專利號(hào):201510373054.7,專利公開號(hào):CN 106325967 A)提出了一種用于異構(gòu)設(shè)備的編譯器。該編譯器包括獲取單元、確定單元與編譯單元。獲取單元讀取源代碼與編譯策略信息,獲取的策略信息包含從源代碼特征集合到不同目標(biāo)處理器的映射,確定單元通過獲取的策略信息確定屬于第一代碼類型的第一代碼段與屬于第二代碼類型的第二代碼段發(fā)往第一處理器,將第一代碼段編譯為第一可執(zhí)行代碼,并將第二代碼段編譯為第二可執(zhí)行代碼發(fā)往第二處理器。該編譯器存在的不足之處在于,確定單元只能實(shí)現(xiàn)不同的源代碼段到不同的處理器設(shè)備的匹配,不能實(shí)現(xiàn)不同源代碼段到同一處理器的不同指令集的匹配,缺失細(xì)粒度的指令匹配功能;獲取單元不具備動(dòng)態(tài)添加指令集的接口,編譯器擴(kuò)展能力不足。
松下電器產(chǎn)業(yè)株式會(huì)社在其申請(qǐng)的專利文獻(xiàn)“編譯裝置和編譯方法”(專利申請(qǐng)?zhí)枺?3152256.4,專利公開號(hào):1312582C)中提供了一種的編譯方法。該方法通過在源程序中包括運(yùn)算符定義文件將源程序翻譯成機(jī)器語言程序,運(yùn)算符定義文件中包括各種定點(diǎn)類型運(yùn)算符的定義。該編譯方法由產(chǎn)生中間編碼的中間編碼產(chǎn)生單元、用專用指令替換原運(yùn)算符對(duì)應(yīng)的中間代碼的指令替代單元和以替換為專用指令的中間代碼為優(yōu)化目標(biāo)的優(yōu)化單元組成。該編譯方法可以通過運(yùn)算符定義文件分析編譯源代碼產(chǎn)生對(duì)應(yīng)處理器執(zhí)行的高級(jí)和專用指令,并通過擴(kuò)展函數(shù)等來作出改進(jìn),而不頻繁地重復(fù)編譯方法本身的版本的更新。該編譯方法存在的不足之處在于,只能在編譯生成中間代碼階段替換定點(diǎn)運(yùn)算的中間代碼為運(yùn)算符定義文件中定義的專用指令集,即只能對(duì)具備一定模式的源碼操作進(jìn)行指令替換,限制了可進(jìn)行指令替換的運(yùn)算操作的范圍;不具備動(dòng)態(tài)添加指令接口,只能替換源碼操作為已有的指令集,限制可選的替換目標(biāo)。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)上述現(xiàn)有技術(shù)的問題,提供一種能根據(jù)用戶提供的編譯策略自動(dòng)調(diào)度自定義指令集的編譯器及編譯方法,以解決編譯器規(guī)模龐大結(jié)構(gòu)復(fù)雜,對(duì)用戶自定義指令集支持較差且修改困難的問題。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于西安電子科技大學(xué),未經(jīng)西安電子科技大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911298413.1/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。





