文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.03.012
中文引用格式: 雷曉鋒,李濤. 時鐘共享多線程處理器通信機制的設計與實現(xiàn)[J].電子技術(shù)應用,2016,42(3):42-46.
英文引用格式: Lei Xiaofeng,Li Tao. Design and implementation of communication mechanism for a shared-clock multithreading processor[J].Application of Electronic Technique,2016,42(3):42-46.
0 引言
隨著并行技術(shù)的不斷發(fā)展,如何更好地提高處理器性能成為設計者急需解決的問題。傳統(tǒng)處理器通過開發(fā)指令級并行(Instruction Level Parallelism,ILP)來提高處理器的性能,但硬件的復雜度及功耗等因素影響了處理器的性能。因此設計者們紛紛把目光投向更高層次的并行-線程級并行(Thread Level Parallelism,TLP),時鐘共享多線程處理器就是在這種背景下產(chǎn)生的。但微處理器核間與線程間通信的線延遲問題仍是需要解決的核心問題[2-3]。本文基于時鐘共享多線程處理器的功耗和結(jié)構(gòu)復雜度要求,設計了近鄰通信和線程間通信兩種通信機制[4],并且對設計電路進行了功能仿真和FPGA驗證。
1 時鐘共享多線程處理器的體系結(jié)構(gòu)
本文提出的時鐘共享多線程處理器系統(tǒng)支持多指令多數(shù)據(jù)(MIMD)、分布式指令并行和流處理3種運行模式[5-6]。它由16個處理單元(Processing Element,PE)互連構(gòu)成一個4×4的二維陣列,還包括1個前端處理器、4個協(xié)處理器、2個調(diào)度器及2個存儲管理。系統(tǒng)整體結(jié)構(gòu)如圖1所示。
2 設計與實現(xiàn)
2.1 近鄰通信機制設計與實現(xiàn)
近鄰通信機制采用鄰接共享FIFO實現(xiàn)。處理單元(PE)可訪問的存儲空間包括本地存儲、近鄰共享FIFO、線程間共享存儲。本地存儲分為8個4 K大小的Bank存儲,單個PE的近鄰通信結(jié)構(gòu)如圖2所示。
近鄰通信的電路在譯碼模塊中完成,該模塊完成指令的解析,近鄰通信數(shù)據(jù)、線程間通信數(shù)據(jù)及本地數(shù)據(jù)的讀取,判斷近鄰通信和線程間通信阻塞的產(chǎn)生及解除。近鄰通信機制完成如下功能:
(1)譯碼單元將近鄰通信數(shù)據(jù)寫入近鄰FIFO中。它首先判斷該指令是否屬于阻塞以及讀取近鄰FIFO的狀態(tài)。當近鄰FIFO不滿時,將目標數(shù)據(jù)直接寫入近鄰FIFO中,當處于滿狀態(tài)時則發(fā)生近鄰寫阻塞;(2)譯碼單元需要從鄰接PE的東、西、南、北4個方向的FIFO中讀取數(shù)據(jù)。譯碼單元首先判斷該指令是否屬于阻塞指令并且是否需要讀近鄰FIFO,同時讀取近鄰FIFO的狀態(tài)。當近鄰FIFO不空時,將目標數(shù)據(jù)從近鄰FIFO中直接讀取到譯碼單元,當近鄰FIFO處于空時說明當前線程發(fā)生了近鄰讀阻塞。
本處理單元(PE)與4個鄰接PE進行近鄰數(shù)據(jù)通信,東/西/南/北四個方向的近鄰通信機制結(jié)構(gòu)、端口數(shù)量及接口時序也類似。本小節(jié)以西邊第一組的相關接口時序為例進行說明。
如圖3所示,當本地PE的目標地址為近鄰通信時,首先使用目標地址的低兩位(dec_dst_addr[1:0])判斷近鄰通信的方向,當目標地址為12hFFC時表明該指令需要向西邊對應的FIFO中寫數(shù)據(jù),當檢測到西邊FIFO的幾乎滿信號為1時,表明該指令發(fā)生了寫近鄰阻塞(wr_ngb_blk),當前線程不能繼續(xù)運行,需要切換線程。同時將寫近鄰阻塞標志、寫近鄰阻塞地址及寫近鄰阻塞來自于哪個線程發(fā)送給存儲管理模塊。當檢測到西邊FIFO的幾乎滿信號為0時,表明該指令可以直接將目標數(shù)據(jù)寫入到對應FIFO中。
如圖4所示,首先使用源地址的低兩位(dec_src_addr[1:0])判斷近鄰通信的方向,如圖所示當源地址為12hFFC時,表明該指令需要從鄰接PE西邊對應的FIFO中讀數(shù)據(jù),當檢測到西邊FIFO不空,表明該指令可以直接從西邊對應的FIFO中讀取數(shù)據(jù),當拍發(fā)送讀使能(npe_rd_fifo_west_en)及線程選擇信號(npe_rd_fifo_west_sel),下一拍得到數(shù)據(jù)(npe_rd_fifo_west_data)。當檢測到西邊FIFO為空時,表明該指令發(fā)生了讀近鄰阻塞(rd_ngb_blk),當前線程不能繼續(xù)運行,需要切換線程。
因為近鄰通信的讀阻塞和寫阻塞判斷邏輯類似,只是條件不同,下面對近鄰通信的寫阻塞判斷邏輯做詳細介紹。
如圖5所示,首先在指令(dec_ins_valid=1)和指令的阻塞標志都有效(dec_blk_flg=1)情況下判斷指令的目標地址是否為近鄰通信地址,然后根據(jù)目標地址的低兩位(dec_dst_addr[1:0])判斷近鄰通信的方向,每個方向有兩個FIFO分別對應低線程和高線程;當目標線程號set_thread_id=0時判斷低線程對應的FIFO是否為幾乎滿,如果為幾乎滿則表示該方向?qū)牡途€程發(fā)生了近鄰通信寫阻塞(wr_ngb_blk=1),且同時將近鄰通信寫阻塞標志(wr_ngb_blk_flag)、近鄰通信寫阻塞地址(wr_blk_ngb_addr)及近鄰通信寫阻塞來自哪個線程的信號(wr_blk_ngb_from_t)發(fā)送給存儲管理模塊;如果不為滿則當前目標數(shù)據(jù)直接寫入到對應方向的FIFO中。例如指令“BMULT 4092,20,21”,該指令經(jīng)過譯碼解析,將20號地址單元中的數(shù)據(jù)與21號地址單元中的數(shù)據(jù)進行乘法運算并將結(jié)果送到西邊鄰接的PE。此時譯碼單元需要判斷西邊FIFO是否為滿。若西邊FIFO為滿時,此時該指令就發(fā)生了近鄰寫阻塞;若西邊FIFO不為滿時,直接將乘法結(jié)果寫入到西邊FIFO中。
2.2 線程間通信機制設計與實現(xiàn)
線程間通信是處理單元(PE)線程內(nèi)部之間的數(shù)據(jù)交換,每個處理單元(PE)的線程間通信地址都有自己的標志寄存器,用于判斷是否發(fā)生線程間通信阻塞。每個線程數(shù)據(jù)存儲地址的0~7對應0~7號線程的共享存儲。
如圖6所示,首先判斷目標地址是否為線程間通信地址,圖中dec_dst_addr[11:0]=12’d1表明當前線程需要向1號線程寫數(shù)據(jù),其次判斷1號線程對應的寫阻塞寄存器(th_low_wr_t1_blk)的最低位,為0時表明目標數(shù)據(jù)可以直接寫入到對應線程的共享存儲中,同時將寫線程間阻塞標志(wr_th_blk_flag)、寫線程間阻塞地址(wr_th_blk_addr)及寫線程間阻塞來源于哪個線程(wr_th_blk_from_t)發(fā)送給存儲管理模塊。為1表明當前線程發(fā)生了寫線程間阻塞(wr_th_blk),當前線程無法繼續(xù)運行需要切換線程,同時將寫線程間阻塞標志(wr_th_blk_flag)、寫線程間阻塞地址(wr_th_blk_addr)及寫線程間阻塞來自于哪個線程(wr_th_blk_from_t)發(fā)送給存儲管理模塊。
如圖7所示,首先判斷源地址是否為線程間通信地址,圖中dec_src_addr[11:0]=12’d1表明需要讀取1號線程的數(shù)據(jù),其次判斷1號線程對應的讀阻塞信息寄存器(th_low_rd_t1_blk)是否為2’b11,當為2’b11時表明對應的共享存儲中有數(shù)據(jù)且當拍發(fā)送讀使能信號(dec_src_rd_en),下一節(jié)拍得到對應線程的數(shù)據(jù)(dec_src_rd_data)。不為2’b11時表明需要的數(shù)據(jù)還沒有寫入到對應的線程共享存儲中,則該指令發(fā)生讀線程間阻塞(rd_th_blk)。
因為線程間通信的讀阻塞和寫阻塞判斷邏輯類似,只是判斷的條件不同,因此下面對線程間通信的寫阻塞判斷邏輯進行詳細介紹。
如圖8所示,首先在指令(dec_ins_valid=1)和指令的阻塞標志(dec_blk_flg=1)有效情況下,判斷指令的目標地址是否為線程間通信地址,根據(jù)目標地址的低三位(dec_dst_addr[2:0])判斷寫哪個線程,根據(jù)線程間通信地址對應的阻塞寄存器低位判斷當前地址是否有阻塞信息。如果有阻塞,表明發(fā)生寫線程間阻塞(wr_th_blk =1),同時發(fā)送寫線程間阻塞標志(wr_th_blk_flag)、寫線程間阻塞對應的地址(wr_blk_th_addr)及寫線程間阻塞來自于哪個線程的信號(wr_blk_th_from_t)給存儲管理模塊,如果無阻塞則數(shù)據(jù)直接寫入到對應線程的共享存儲中。例如指令“BMULT 2,20,21”,該指令經(jīng)過譯碼單元解析后判斷該指令屬于阻塞指令并且屬于線程間通信指令,需要寫2號線程的共享存儲,此時譯碼單元首先判斷2號線程對應的阻塞寄存器中的阻塞標志位,若為高,表明該共享地址中已經(jīng)有數(shù)據(jù),此時該指令就會發(fā)生寫線程間阻塞;若為低,表明該共享地址中沒有數(shù)據(jù),可以直接將乘法寫入2號線程對應的共享存儲中。
3 仿真驗證及結(jié)果分析
仿真驗證使用Mentor公司的Modelsim SE 10.1c仿真工具,根據(jù)實際情況編寫不同方案下的測試激勵,在System Verilog搭建的平臺和軟件仿真平臺上驗證時鐘共享多線程處理器系統(tǒng)的功能。
3.1 近鄰通信的功能仿真
測試方案:為了測試近鄰通信的完整性,分別測試東/西/南/北四個方向的寫共享FIFO和讀鄰接PE的共享FIFO數(shù)據(jù)至本地PE。測試匯編程序如圖9所示。
測試說明:選擇0號線程測試近鄰通信功能。首先測試0號線程分別向東/西/南/北4個方向?qū)墓蚕鞦IFO中分別寫入4個數(shù)據(jù),等待鄰接PE讀取。最后測試本地PE的線程0從鄰接PE東/西/南/北4個方向的線程0共享FIFO中分別讀取4個數(shù)據(jù)至本地PE,參與相關運算;測試匯編程序如圖10所示。
圖10為近鄰通信仿真波形。鄰接PE分別檢測本地PE線程0對應的東/西/南/北4個方向共享FIFO是否為空,圖中西邊讀FIFO0信號不為空(west_rd_fifo0_empty0=0),表明本地PE已經(jīng)將近鄰數(shù)據(jù)寫入到線程0對應的FIFO中。鄰接PE開始向西邊的FIFO發(fā)送讀使能信號(npe_rd_fifo0_west_en)及讀選擇信號(npe_rd_fifo0_west_sel),下一拍得到數(shù)據(jù)(npe_rd_fifo0_west_data)。最后本地PE需要從鄰接的4個方向讀取數(shù)據(jù),當檢測到鄰接4個方向的FIFO不為空時(rd_west_fifo0_empty=0,rd_north_fifo0_empty=0,rd_east_fifo0_empty=0,rd_south_fifo0_empty=0),表明鄰接4個方向已經(jīng)準備好數(shù)據(jù),本地PE發(fā)送4個方向的讀FIFO的使能信號(rd_npe_fifo0_en)和選擇信號(rd_npe_fifo0_sel),下一拍得到數(shù)據(jù)(rd_npe_fifo0_data)。當數(shù)據(jù)讀完之后4個方向的rd_fifo0_empty0變?yōu)楦唠娖健?/p>
3.2 線程間通信的功能仿真
測試方案:選用PE的0、1、2、3號線程進行測試。0號線程執(zhí)行加法運算,將其運算結(jié)果傳遞給2號線程進行乘法運算;1號線程執(zhí)行加法運算,將其運算結(jié)果傳遞給3號線程進行乘法運算。測試線程間共享存儲的訪問功能。測試匯編程序如圖11所示。
測試說明:線程0執(zhí)行A+B操作(A=2,B=3)將運算結(jié)果D=5寫到2號線程的共享存儲中;線程1執(zhí)行A+B操作(A=3,B=4),將運算結(jié)果D=7寫到3號線程對應的共享存儲中;線程2需要讀出線程2對應共享存儲中的數(shù)據(jù)和21號地址里邊的數(shù)據(jù)進行乘法運算,預期的運算結(jié)果為5;而線程3則需要讀出線程3對應共享存儲中的數(shù)據(jù)和20號地址里邊的數(shù)據(jù)進行乘法運算,預期的運算結(jié)果為7。
如圖12所示,線程1將數(shù)據(jù)寫入到3號線程對應的共享存儲中時,對應的寫3號線程阻塞寄存器的值變?yōu)?’b11(th_low_wr_t3_blk=2’b11),當寫入3號線程的共享數(shù)據(jù)讀取后,阻塞信息寄存器清零(th_low_wr_t3_blk=2’b00);3號線程執(zhí)行乘法操作,圖中橫線位置表示3號線程的乘法結(jié)果有效vout=1且運算結(jié)果mulout=7。
綜上,處理器單元的近鄰通信和線程間通信都是正確的,滿足了預期的功能。
4 總結(jié)
本文提出了一種時鐘共享多線程處理器的數(shù)據(jù)通信機制,完成了modelsim的功能仿真、Xilinx ISE14.4的綜合,工作頻率達到431.816 MHz,在Vertex7-2000T的FPGA開發(fā)板實現(xiàn)了驗證。該設計的近鄰通信和線程間通信機制減少了片上資源的使用率且降低了數(shù)據(jù)傳輸?shù)难舆t,有效地提高了處理器的性能。
參考文獻
[1] 屈文新,樊曉椏,張盛兵.多核多線程處理器存儲技術(shù)研究進展[J].計算機科學.2007(4).
[2] GRATZ P,SANKARALINGAM K,HANSON H,et al.Implementation and evaluation a dynamically routed processor operand network[C].Proceedings of First International Symposium on Networks-on-chip,IEEE Computer Society,2007,23(10):7-17.
[3] 黃志鋼,盛肖煒.多核處理器結(jié)構(gòu)與核間通信的CMC總線設計[J].沈陽理工大學學報,2012,31(6):70-91.
[4] 徐衛(wèi)志,宋風龍,劉志勇,等.眾核處理器片上同步機制和評估方法研究[J].計算機學報,2010,33(10):1777-1787.西安郵電學院學報,2012,17(3):43-46.
[6] 蒲林.多態(tài)并行處理器中的SIMD控制器設計與實現(xiàn)[J].電子技術(shù)應用,2013,33(11):53-59.