為了研究計算機架構與最佳化編譯器之間的關係,我們以兩年的時間設計並製作了一 個在32位元RISC型態微處理機RISC/B上的最佳化C編譯器,稱之為RCC(RISC/B C C OMPILER )。 在第一年的工作中,由前屆學長設計了一個暫存器管理器(REGISTER MANAGER)來有 效地運用暫存器檔(REGISTER FILE ),以儘可能地減少LOAD/STORE指令的個數;為 了解決導管危機(PIPELINE HAZARDS),消除因此而產生的載入延遲(LOAD DELAYS )和跳躍延遲(BRANCH DELAYS ),同時設計了一碼重整器(CODE REORGANIZER)。 在本研究中,作者在原系統增加了前端處理器(FRONTEND PROCESSOR)和組譯器(AS SEMBLER )的部份,使得RCC可以直接讀入以高階語言C所寫成的原始程式,最後 產生機器碼。前端處理器的目的在於產生中間碼和建立資訊表格以供後端處理器之用 ,因此我們設計了RCC特有的中間碼和資料表格。在製作上我們借助於UNIX系統下 的兩個編譯器建構工具:LEX和YACC,使得我們只需提供供語言規格,即可由 此自動產生所需的處理器。組譯器的設計因限於人力及時間,並沒有設計成一個獨立 的部份,而只是整個系統中的一個相關模組,它的工作是將前面處理後的RISC/ B指令轉換成對應的機器碼,以便可以載入RISC/B處理機執行。 此外,為了提高目的碼的執行效率,作者同時設計並製作了一個中間碼層次的最佳化 處理器。在眾多的最佳化技術中,我們選擇了6個製作在RCC中,同時針對測試程 式中最常執行的部份(如迴圈)和最常出現的型樣(PATTERNS)來做最佳化,以求事 半功倍之效果。經由對程式的流程分析再應用這些最佳化技術,RCC可以得到不錯 的效果。最後對在前一階段所設計的後端處理器提出一些進一步的討論,如回流決策 的研究,整合提升多副處理機系統效能WRE(WORKING REGION EXTENSION)技巧等。 由於RCC及RISC/B雛型機的相繼完成,以致於我們可以用更多的測試程式來 衡量設計上的優劣。從實驗結果顯示:碼重整器消除了48.72%的載入延遲和7 2.16%的跳躍延遲;暫存器管理器與傳統的暫存器配置法比較也節省了28.5 %的LOAD/STORE指令;至於最佳化處理的效果,在所測試的程式中,大約 有11%到25%的中間碼會被最佳化的過程去除。
|