matrix編譯器中飽和算術指令映射的設計與實現_第1頁
matrix編譯器中飽和算術指令映射的設計與實現_第2頁
matrix編譯器中飽和算術指令映射的設計與實現_第3頁
matrix編譯器中飽和算術指令映射的設計與實現_第4頁
matrix編譯器中飽和算術指令映射的設計與實現_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、matrix編譯器中飽和算術指令映射的設計與實現       摘要:是一款面向軟基站的高性能 ,飽和算術指令是 體系結構中很重要的一種指令,它使得 算法更加安全、準確、高效。因此,編譯器對飽和算術指令的映射支持就尤為關鍵。編譯器的開發平臺是,現有的版本只支持的飽和算術指令,不支持整數和浮點的飽和算術指令。首先分析了內部指令映射的機制,在此基礎上提出了一種基于擴展的飽和算術指令映射實現方案,并通過實現飽和加法指令的映射來驗證所提出的方案。實驗結果表明,該方案能夠高效、準確地實現飽和算術指令的映射。關鍵詞:;飽和算術;指令映射 

2、  引言當前,芯片在多媒體、信號處理等領域中的應用越來越廣泛,由于嵌入式芯片功耗和成本的限制,芯片對編譯器指令映射的精確性和高效性的要求也越來越高,同時選擇快速、有效、低成本的編譯器開發平臺也越來越重要。是一款面向軟基站的、自主指令集的高性能,編譯器的開發平臺是,它是一個開發運行在不同系統平臺的高效快速的開源的編譯系統。對于特定的目標體系結構,通過移植可以開發出這個平臺的編譯系統,是一種快速、有效、低成本的方案。目前只支持基于數據類型飽和算術指令映射。由于指令集的飽和指令是基于整數和浮點的,所以需要移植,使其支持整數和浮點的飽和算術指令的映射。飽和算術指令使得數字信號處理算法更加準確

3、、更加高效,是指令集中很重要的一種指令。對進行移植,使得在編譯器支持飽和算術指令的映射。本文對指令映射過程的分析以及實現飽和算術指令映射的思路,對于其他指令映射的實現具有一定的借鑒作用。本文第節介紹了飽和算術的定義和特征;第節介紹了中指令映射的一般過程;第節給出了飽和算術指令映射的實現過程;第節描述了飽和加法指令映射實驗結果;第節對全文總結。飽和算術簡介飽和算術使得一些算法更加準確、更加高效,尤其是在算法中。例如:調整聲量可能導致聲音信號溢出,而飽和算術可以明顯減少對信號的扭曲。把兩個數的補碼形式相加,會導致環繞現象(),這可能會對系統的信噪比造成災難性結果,運用飽和算術則可以避免。飽和算術運

4、算是一種值被限定在固定范圍內的運算操作,有最大值和最小值。比如飽和加法操作:如果兩個數相加后的結果比最大值要大,那么最終的結果就等于最大值;如果相加后的結果比最小值要小,最終結果就等于最小值;如果相加后的結果在最大值和最小值之間,這就是最終的結果。對于這樣的語言描述,目前只能完成基于數據類型的映射。因此,在中實現基于整數和浮點類型的飽和算術指令的映射會使得編譯器更加高效。指令映射機制分析的編譯流程是:詞法分析語法分析中間代碼生成代碼優化代碼生成。詞法分析和語法分析稱之為前端,中間代碼生成和部分優化稱之為中端,部分優化、機器描述()和代碼生成稱之為后端。前端處理過程在內,前端預處理、詞法分析、語

5、法分析三個過程統稱為解析過程。前端的主要任務是對輸入的代碼進行解析并記錄有效信息,形成抽象語法樹()。解析過程的依據是標準,標準在前端的信息可以分為基本詞匯符號和語法規則兩類。一般以表的形式把基本詞匯符號的信息組織起來,供解析過程查詢。語法規則實際是基本詞匯符號排列組合的規則,一般體現在語法分析過程中。前端大致分為兩個階段:預處理和詞法分析把輸入代碼轉換成的內部表示(內碼),語法分析再根據內碼來建立抽象語法樹,兩個過程都伴隨著出錯處理。前端中的標準基本詞匯符號標準的基本詞匯符號可以分為字符集和標識符。字符集分為英文字母、阿拉伯數字和特殊符號。標識符包括保留字、預定義標識符、用戶定義標識符。預處

6、理器和詞法分析將對源代碼中的所有詞匯符號()進行分類解析,不同類的信息在內部用不同的變量。輸入代碼中所有字符在內部都有對應的內碼來表示。下面初步介紹中的基本詞匯及其內部表示。所有的保留字定義在的一個結構體數組中,這個數組的成員在解析器初始化的過程中將根據名字被索引到表中,以供解析時查找匹配。其內碼是一個枚舉數組中的值,一般形式為。對于用戶定義的標識符,一般解析為。中各種符號的定義。以“”來說明定義過程。“”的內部表示是枚舉數組()中的一員。包含在宏定義中。對輸入代碼進行分析時函數會將外部表示“”和內碼對應起來。其他的英文字母和阿拉伯數字包含在字符識別函數中。基本詞匯符號的信息在初始化時以靜態數

7、組的形式被組織進表。詞法分析完成內外信息轉換過程之后,進入語法分析過程。根據本文需要,下面僅重點介紹語法分析中的數據類型。前端數據類型基本的數據類型節點對于編譯器至關重要,是編譯器將高級語言精確而高效地映射到匯編語言的基礎。整型數據節點是語言最基礎、最重要的部分,其使用頻率很高,必須保證對這些節點的訪問盡可能高效。因此,這些節點定義在全局數組()中。內建節點的初始化過程實際上是對結構中許多子成員的賦值過程。結構是定義在淡孝強等:編譯器中飽和算術指令映射的設計與實現中的聯合,其成員涵蓋了語言的各種語法類型,因此結構十分龐雜,所以對結構的操作是通過函數和宏來進行的。前兩小節所介紹的基本詞匯字符和基

8、本數據節點大多是以靜態形式存在的,而整個詞法語法分析會將這些信息串聯起來。前端分析過程簡介函數是前端對一個文件開始解析的入口。處理變量聲明和函數定義,在此過程將調用更底層的函數來對輸入的程序進行識別和分類并將信息記錄到相關的數據結構中。函數對一個字符進行分析,首先調用函數來確定字符的,在這里被進一步調用,使得輸入字符和它們的內碼對應起來,比如,字符“”將返回的是。然后,根據得到的類型進行分類處理,的分支中包含了對標識符或者保留字的處理,保留字將被識別并用內部的數據結構表示。其他的外部信息也由相應模塊來處理。外部信息表示成內碼之后進行語法解析。語法解析的主要任務是抽象語法樹的建立、出錯處理、符號

9、表的建立。中所有語法樹都定義在中。在語法解析過程中,解析器會根據操作符的內部表示映射到相應的樹節點,如映射為。更為復雜的語法樹建立是由中的族函數來完成的。抽象語法樹是一種語言相關的中間語言表示(),為了方便對其進行優化將進一步轉化成語言無關的中間語言表示()。中端分析是抽象語法樹的子集,兩者之間的不同之處就在于只含有順序和分支結構,其 他 的 控 制 流 都 轉 化 成 這 兩 種 結 構。階段最關鍵的步驟是轉化成。是機器無關的,而是機器相關的。到的轉化過程在函數中,此 函 數 包 含 一 個 巨 大 的,每一個的節點都會映射到后端的標準名(),這些標準名必須被編碼到中去。在中端,標準名實際上

10、是的一類變量。擴展到的過程從函數聲明的頂部開始,深度優先遍歷整個樹。選擇了某個后端的標準名之后就進入到后端生成過程了。后端生成過程中端映射到標準名之后,會自動根據模式()去查找后端模板中是否有滿足條件的指令。所以,對于添加新的指令而言,標準名的定義和后端模板描述最值得關注,最后會在此基礎上簡要說明匹配過程以及最后的生成。標準名的添加標準名的添加包括以下幾個方面:()在文件中定義操作符。()中函數對庫函數的初始化。()后端模板自動生成程序的修改,增加成員,描述新操作下數據模式的映射規則。標準名添加之后,后端機器描述必須要使用該準名來描述指令,才能完成匹配。下面介紹機器描述。機器描述()機器描述包

11、括指令集、指令延遲、功能部件、流水線等。機器描述是一個內容較豐富的部分,本文中只涉及到指令集的描述。在文件中描述指令集,編譯生成的過程會根據文件自動生成一系列的和文件,供編譯過程更有效地獲取機器相關的信息。自動生成的過程由一系列的文件來完成。在編譯生成時,文件會根據描述自動生成文件,此文件集合了許多產生的函數,這些函數在運行程序的時候使用。到 生成總結通過前面的描述,現在可以總結到生成的過程。()目標無關的函數集完成到的映射過程。()目標相關的函數集完成的具體生成過程。函數由自動生成程序根據機器描述自動生成。()函數集和函數集的操作接口主要是:和。例如,針對為的表達式,其調用過程為:首先找到對

12、應的;接著根據正確的來找到;再由找到 計算機工程與科學,();最后對應上文件中的函數,調用該函數生成合適的。()經過的優化遍,最后匯編輸出。指令映射過程總結內部指令映射的過程本質上是多種語言之間的轉化過程。首先是詞法分析將輸入的代碼轉化成內 部表示,語法分析 在此 基礎上建 立,對進行簡化生成,經過優化過程之后再映射到,經過優化遍之后就是匯編輸出。這些中間語言都有相應的數據結構和變量來描述,它們是靜態的;的編譯流程是由一系列重要的函數實現的,它們控制了中間語言之間的轉化,是動態的過程。所以,實現新的類型的指令映射,就是給中間表示增加靜態的變量成員,并控制相應函數的動態轉化過程。接下來將以飽和加

13、法的實現為例來簡要介紹飽和算術在中的設計與實現。飽和算術指令映射機制的實現將高級語言映射到匯編語言的過程,本質上是幾種中間語言的轉化過程。因此,對于飽和這一新的數據類型,不同的中間語言需要增加描述它的詞匯,并在映射過程中控制中間語言之間的轉化過程,使之映射到正確的目標代碼。對于飽和屬性,仿照語言中這個作為修飾作用的保留字,擴展語言增加一個修飾保留字。針對這一擴展,在前端、中端、后端的中間語言中增加新的數據變量,并控制這些變量之間的轉化,完成映射過程。本節將以飽和加法指令的實現過程為例來實現上述思路。飽和加法的基本目標是:對標準進行擴展,用來描述數據類型(類似于保留字,修飾作用),那么,;能夠映

14、射到整數飽和有符號加法指令。前端設計與實現前端涉及的中間表示有兩種:詞法分析之后的內碼以及語法分析建立的。首先要在這兩種中間表示中增加新的成員,然后控制新成員在前端的轉化過程。前端增加新的保留字所有的保留字定義在的一個結構體數組中,以保留字“”為例作簡要說明:“”,成員一代表保留字在輸入代碼中的寫法;成員二是該保留字在內部的表示,是一個枚舉數字的成員,定義在的枚舉數組中;第三個成員是一個數字,表示該保留字是為哪種標準所有。()在的一個結構體數組中,增加保留字"":"",。()的枚舉中增加。增加內建數據節點整數的內建數據節點定義在()的全局數組中,而不像其

15、它類型節點被放在哈希表里。這只是一個簡單的結構數組的聲明。函數和函數完成了所有的內建數據節點的初始化過程。把已經初始化的節點類型和它們的輸入名稱聯系起來。()在中增加。枚舉中增加。()函數中增加對新增內建節點的初始化過程。 (,)()函數是確定數據的有無符號屬性,在此函數中增加參數來判斷是否為飽和屬性。(,)函數體內增加代碼:()();需要類似修改。調用這兩個函數的地方都要做出相應修改。()的修改:用函數把外部語法“”與新增數據節點對應起來。前端解析過程移植詞法分析和語法分析過程都是在函數中進行的。是函數中記錄聲明特征的變量,其中包括描述屬性的許多標志 位,如 有 無 符 號,是 否 為,是

16、否 是等。函數會根據的信息并結合標準來判斷不同保留字組合的合法性,不合法就報警告或者錯誤,合法就進一步完淡孝強等:編譯器中飽和算術指令映射的設計與實現善的信息。記錄在中的數據類型的信息傳遞是通過函數來完成的。根據中的信息可以判斷對于當前的一個變量是一個什么類型的內建數據節點。()函數修改:時修改使得合法不報錯,并且記錄有效信息。()修改使得新增加的節點被使用。時增加一個飽和屬性的分支情形:(?:)中端設計與實現轉化成首先是由樹節點()結合機器模式信息映射到后端數組的成員(包含在其中),再由中的信息找到后端生成的函數。這個過程是用標準名聯系起來的。以的轉化過程為例簡要說明。前端已經解析得到:()

17、、為有符號的整數;()“”的表示為。由到的轉化是由函數集來完成的。函數包含加法操作的轉化過程,在此函數可以根據操作符的操作數情況做相應的轉化,可以轉化為其他的,也可以根據操作數來確定。加法的過程是進一步調用函數才確定的,在這個函數里,可以根據加法的性質(有無符號,是否飽和)來選擇相應的。中端修改使得能選擇新增的,在函數做以下修改:時根據是否飽和、有無符號判斷返回對應的。后端設計與實現標準名的添加首先要分析,結合其內容來添加相應的定義。以加法為例來分析:()在被宏定義轉換成數組的一個成員。()()跟蹤查看如圖所示(有省略)。是 一 個 結 構 體。是 一 個操 作,定 義 在:圖操作表中的標準名

18、變量(,"","",)中,是中用到的值。、是庫函數調用的接口信息,如果在后端模板中沒有匹配到合適的信息,這些信息將被用來匹配庫函數。這幾個成員的初始化是由的函數完成的。是一個結構體數組,每一個成員代表某一個模式下后端是否有相應的指令來匹配,如果有,數組中的值的名稱就是操作和模式下的一 個 組 合。例 如,加 法 的 整 數 ()模 式 為(為操作數個數),如果沒有值就是。這個數組是機器指令描述信息的體現。從上面的值可以看出,該加法只有整數()和浮點單雙精度模式(、)有指令模板供匹配。程序自動將后端模板描述信息映射到的數組中。中的數組記錄了不同操作不同數據

19、類型映射的規則,函數會根據這些信息來完成映射。根據以上分析,做出如下修改:()中新增飽和有符號加法的操作符;()新增:();()在中增加;()修改函數,使得初始化(包括和庫函數名稱的初始化);()修改中的數組,使之建立后端整數飽和加法機器描述的自動映射過程;()機器描述中新增有符號飽和加法的擴展規則()和指令描述()。描述了中端向的擴展規則。是一種機器描述構造的方式,用來為新增標準名操作,描述機器指令。映射過程總結本節以飽和加法指令映射過程為例說明了本文飽和算術指令在中的實現方案。首先對 計算機工程與科學,()語言擴展增加描述飽和屬性的保留字,在前端增加保留字的內碼表示,增加新的數據類型,在中

20、端增加新的操作,在后端增加新的標準名以及新的機器描述。在完成靜態信息的添加的基礎上,進一步改變前端、中端函數的映射路徑,使得前端對飽和屬性數據的操作最終能映射到后端相應的機器描述上去,從而完成整個飽和加法的映射過程。與已有的基于數據類型飽和算術指令映射比較,本文的飽和指令映射實現過程更加簡潔。原因在于是一種新的數據類型,為支持新的數據類型,需要在中構建新的框架,這本身就是一個浩大的工程。本文是基于整數類型的飽和指令的實現,同時也借鑒了基于飽和指令映射的方法,方案實現的可操作性和復雜性就相對較低。與已有飽和指令映射過程的不同點在于:擴展的關鍵字不同,映射過程變量數據模式不同;映射過程相對單一簡潔。實驗結果根據上節描述的方案和過程,基于版本實現了指令集中整數飽和加法的映射過程。版本支持數據類型飽和算術指令,不支持整數和浮點數據類型飽和算術指令映

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論