佘增輝,樊曉椏,張 萌
(西北工業大學計算機學院,西安710129)
在媒體應用、信號處理和科學計算等領域,以密集計算為典型特征的流應用[1]正成為微處理器面對的一類主要負載。十多年來,國際學術界和工業界涌現出了多種流體系結構和流處理器,典型的結構有 Imagine、Merrimac、CELL、RAW、TRIPS、STORM系列高性能DSP、NVIDIA的GPU和AMD流處理器等。LT-SP2是一款面向流應用的多核流處理器體系結構,能對大規模數據進行并行處理。LT-SP2采用兩級流編程模型,流級(Stream)和核心級(Kernel)。Stream級程序主要進行程序控制和資源分配,Kernel級程序則進行高度的并行計算。兩級編程模型能夠有效地把訪存和計算分離開來,保證了計算所需的數據帶寬。
基于LT-SP2采用的兩級編程模型,流應用程序的運行需要兩級編譯器[2]提供支持。流應用程序采用高級語言編寫,然后經過Stream級編譯器和Kernel級編譯器兩級編譯生成目標二進制在LTSP2流計算平臺上運行。所論述的匯編器作為Kernel級編譯器的一部分,負責Kernel級程序的指令調度和寄存器分配,在LT-SP2的研究中具有重要意義。在航天應用領域,空間粒子輻射能夠引起存儲器粒子翻轉[3]等錯誤,大大降低了系統的安全性。LT-SP2匯編器通過引入冗余備份和校驗機制,提升了計算系統的容錯性能。首先介紹了LT-SP2的體系結構與指令集,然后進一步討論LTSP2匯編器的設計與實現問題,最后對實驗結果進行了分析。
針對流應用具有的豐富并行性、多層次局域性和數據訪問可預知性等特點,LT-SP2體系結構充分挖掘數據級并行[4]和優化存儲結構,提出了一種處理大規模并行計算問題的高效解決方案。圖1為LT-SP2流體系結構頂層框圖,其主要構件可以分成7個部分,分別是主處理器(Host Processor)、片上主存(Main Memory)、I/O控制器(I/O Controller)、流控制器(Stream Controller)、流寄存器文件(Stream Register File,SRF)、特殊寄存器文件和四個短向量計算簇(Short Vector Cluster,SVC)。

圖1 LT-SP2流體系結構頂層框圖
主處理器和四個短向量計算簇是LT-SP2流體系架構的主要計算部件。主處理器控制流級程序的運行,完成流的定義、流的加載和調用核心程序。短向量計算簇(SVC)內部構件包括向量load-store單元(Vector Load/Store Unit,VLSU),向量簡單定點計算部件(Vector Simple Integer Unit,VSIU),向量復雜定點計算部件(Vector Complex Integer Unit,VCIU),向量置換部件(Vector Permute Unit,VPU),向量浮點計算部件(Vector Floating-Point Unit,VFPU)和向量寄存器文件(Vector Register File,VRF)。四個短向量計算簇以協處理器的方式工作,通過執行核心級程序完成大批量的并行計算任務。
為了有效解決流計算中對高數據吞吐率的要求,LT-SP2流體系結構定義了軟件參與管理的三級存儲層次,從里到外依次是SVC內部向量寄存器VRF、片上流寄存器 SRF、片上主存儲器M.M。在LT-SP2上開發流應用程序時,首先在通用計算機上用高級語言編寫流應用程序,然后通過交叉編譯和匯編,生成目標平臺上可運行的二進制代碼,最后下載到LT-SP2流計算平臺上運行。
LT-SP2指令集屬于精簡指令集,擁有數量豐富的運算類指令,而控制轉移類指令相對較少。
LT-SP2采用短向量的SIMD技術,一條指令可以同時對多個數據元素執行同一種操作,指令集具有高度的數據并行性。指令集定義了32個128位寬的向量寄存器(V0~V31)和32個128位寬的標量寄存器(R0~R31),所有的數據通路和執行部件寬度也為128位。根據數據元素位數的不同,可實現對16個8bit的數據元素,8個16bit的數據元素,以及4個32bit的數據元素執行同一操作。
指令操作數尋址模式比較簡單,只有寄存器變址尋址和立即數尋址。LT-SP2指令集是一種典型的Load/Store類指令,數據只有通過Load類指令從外部存儲器加載進向量寄存器,通過Store類指令存回外部存儲器。所有的運算類指令都面向向量寄存器進行操作,指令的源操作數來源于片上的向量寄存器堆或者指令中的立即數,多數指令有四個操作數,三個源操作數和一個目的操作數。SRF組織結構分成了4個獨立的Bank存儲空間,對目標端的4個SVC單元獨立編址,對主處理器端統一編址。
指令二進制編碼采用32位,最低位是校驗位,可以歸納成如圖2所示的三種格式。

圖2 LT-SP2指令格式
LT-SP2匯編器的設計目標是實現對LT-SP2短向量指令集的全面支持,允許多種操作數模式,引入冗余備份和校驗機制來提高系統的容錯性能。
通過對LT-SP2體系結構以及匯編器功能進行分析,LT-SP2匯編器的主要框架設計如圖3。匯編器包含常用的功能模塊,如詞法語法分析器[5]、符號表管理、錯誤處理和目標代碼生成器等。在語義處理和代碼生成器之間引入操作模式管理,實現對多種操作數寬度的運算支持。校驗碼產生器用于生成目標二進制碼中的校驗位信息。代碼冗余模塊對關鍵代碼段進行冗余備份,保證關鍵代碼在校驗出錯的情況下能正確執行。

圖3 LT-SP2匯編器總體框架設計
LT-SP2的寄存器寬度為128位,匯編器支持字節(8bit)、半字(16bit)和字(32bit)3種操作數模式。例如add vD,vA,vB實現將vA和vB相應位置上的數據相加,結果存至vD的對應位置上,vA、vB和vD均為128位寬度。通過匯編器編譯后一條add指令能夠實現16個8bit、8個16bit或4個32bit操作數的并行加法,擴展了指令集功能。
LT-SP2主要面向媒體應用、信號處理和科學計算等領域中的超大規模計算難題。為了將應用范圍擴大到航天或航空領域,需解決存儲器中的粒子翻轉問題,保證代碼在平臺上正確執行。冗余備份和校驗機制的引入能夠在一定程度上提高系統的安全性。
LT-SP2匯編器中冗余備份和校驗機制的主要設計思想是:對匯編源程序中的關鍵代碼段進行冗余備份,在進行校驗出錯的情況下能恢復出備份的正確代碼,以達到提高系統整體安全性的目的。
匯編器的實現通常有兩種方式,一種是移植已有的成熟匯編器源碼,另一種是采用編譯程序自動構造工具輔助設計[6]。LT-SP2匯編器采用第二種實現方式,運用編譯程序自動構造工具 flex和bison[7]生成部分代碼。
根據以上設計,實現的匯編器工作流程如圖4所示。
詞法和語法分析階段主要識別關鍵字、特殊寄存器、操作數和各種符號定義,過濾掉所有的注釋語句和完成源匯編程序代碼行的計數,并進行相應的語義處理。labelNode鏈表存儲新定義的標號,refNode鏈表存儲未提前定義的標號引用。遇到新標號定義時,掃描labelNode表,若已經定義,表示標號重復定義錯誤,否則將新標號加入labelNode表,并掃描refNode表回填先前引用,回填結束后刪除該引用節點。遇到新引用標號時,掃描labelNode表,若已提前定義,則直接進行代碼生成,否則加入refNode表,待標號定義時回填。在目標代碼生成之前進行冗余備份與校驗碼生成。

圖4 LT-SP2匯編器工作流程
冗余備份和校驗機制的具體實現方式是采用雙度冗余與奇偶校驗相結合,其中雙度冗余中只對關鍵代碼段實行隔行備份,實現原理如圖5所示。

圖5 冗余和校驗機制實現
首先判斷程序段是否為關鍵代碼,是關鍵代碼則進行奇偶校驗。若存儲器中的指令出現粒子翻轉則出現校驗錯誤,啟用冗余恢復機制,執行PC+1所指向的備份指令;若校驗正確則執行當前代碼,將PC+2指向下一條執行指令。PC為程序計數器[8],存放現行指令的地址。匯編器在進行匯編時對關鍵代碼段進行兩次代碼生成,并產生帶有校驗位的二進制碼。
匯編器應具有較強的查錯和改錯能力,并能以簡明的形式向用戶報告錯誤的性質以及出現的具體位置。LT-SP2的錯誤處理過程被嵌入到匯編程序處理的各個階段,能正確報告詞法、語法和語義錯誤等。當識別詞法和語法錯誤時由詞法分析器和語法分析器報告錯誤類型及錯誤位置。語義錯誤的處理在語法自動翻譯時進行,識別操作數超出范圍等語義上的錯誤。在匯編程序處理的末尾階段掃描ref-Node表,如鏈表非空,表示有引用節點未定義,報告引用標號未定義錯誤。
根據以上設計,在LT-SP2流計算平臺下,最終實現了一款全面支持LT-SP2指令集的核級匯編器。實驗設計分為兩個部分,分別測試匯編器的功能正確性和對系統容錯能力的支持程度。首先,按照流計算兩級編程模型,在平臺上流化了一批并行計算程序,例如FIR濾波、拉普拉斯邊緣檢測、矩陣乘法和向量點積等。實驗結果顯示所編寫的核心級源程序經過LT-SP2匯編器匯編后下載到目標平臺上能正確運行,驗證了匯編器功能的正確性。其次,通過對關鍵代碼段的執行結果統計,系統能夠有效地對奇偶校驗出錯的代碼行進行恢復,體現了匯編器的健壯性。
針對LT-SP2流計算體系結構,討論了流處理器設計中LT-SP2匯編器的構造原理。此匯編器屬于交叉匯編器,匯編過程在宿主機上進行,產生的機器碼在LT-SP2流計算平臺上運行。匯編器的研究簡化了流處理器測試程序的編制,加速了流應用程序的開發進度。經測試表明,LT-SP2匯編器功能正確,冗余備份和校驗機制的引入提高了系統的整體容錯性能。下一步的工作重點將是對匯編器進行功能改進,優化代碼執行的效率,以及采用高級的編碼校驗機制,進一步提高系統的容錯性能。所論述的LT-SP2匯編器設計方法對流處理器研究中核級匯編器的研發具有重要參考價值。
[1] Scott Rixner.Stream Processor Architecture[M].Boston:Kluwer Academic Publishers,2001.
[2] 張春元,文梅,伍楠,等.流體系結構技術發展探討[J].國防科技大學學報,2009,31(5):1-5.
[3] 辛明瑞.面向空間應用的容錯RISC處理器體系結構研究[D].西安:西北工業大學,2006.
[4] MPC7410/MPC7400 RISC Microprocessor User’s Manual[M].Freescale Semiconductor,Inc,2002.
[5] Alfred V Aho,Monica S Lam,Ravi Sethi,等.編譯原理:Principles,Techniques,and Tools(第2版)[M].北京:機械工業出版社,2009.
[6] 陳惠斌,劉春林,胡定磊.一種快速構造匯編器的方法及其應用[J].計算機工程與科學,2006,28(6):131-134.
[7] John Levine.Flex&bison(影印版)[M].南京:東南大學,2010.
[8] Bryant R E,O’Hallaron D R,龔奕利,雷迎春譯.深入理解計算機系統(第2版)[M].北京:機械工業出版社,2010.