雷曉鋒,李 濤
(1.西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710061;2.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安710061)
時(shí)鐘共享多線程處理器通信機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)*
雷曉鋒1,李 濤2
(1.西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710061;2.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安710061)
多核多線程處理器[1]是并行技術(shù)的一個(gè)發(fā)展方向,基于多核多線程處理器,提出了一種時(shí)鐘共享多線程處理器。該處理器有近鄰?fù)ㄐ藕途€程間通信兩種通信機(jī)制,近鄰?fù)ㄐ挪捎媒徆蚕鞦IFO來傳遞信息,線程間通信通過線程間共享存儲(chǔ)來傳遞信息,這樣可以提高處理器的資源利用率和并行執(zhí)行能力。
時(shí)鐘共享多線程;近鄰?fù)ㄐ?;線程間通信
隨著并行技術(shù)的不斷發(fā)展,如何更好地提高處理器性能成為設(shè)計(jì)者急需解決的問題。傳統(tǒng)處理器通過開發(fā)指令級(jí)并行(Instruction Level Parallelism,ILP)來提高處理器的性能,但硬件的復(fù)雜度及功耗等因素影響了處理器的性能。因此設(shè)計(jì)者們紛紛把目光投向更高層次的并行-線程級(jí)并行(Thread Level Parallelism,TLP),時(shí)鐘共享多線程處理器就是在這種背景下產(chǎn)生的。但微處理器核間與線程間通信的線延遲問題仍是需要解決的核心問題[2-3]。本文基于時(shí)鐘共享多線程處理器的功耗和結(jié)構(gòu)復(fù)雜度要求,設(shè)計(jì)了近鄰?fù)ㄐ藕途€程間通信兩種通信機(jī)制[4],并且對(duì)設(shè)計(jì)電路進(jìn)行了功能仿真和FPGA驗(yàn)證。
本文提出的時(shí)鐘共享多線程處理器系統(tǒng)支持多指令多數(shù)據(jù)(MIMD)、分布式指令并行和流處理3種運(yùn)行模式[5-6]。它由 16個(gè)處理單元(Processing Element,PE)互連構(gòu)成一個(gè)4×4的二維陣列,還包括1個(gè)前端處理器、4個(gè)協(xié)處理器、2個(gè)調(diào)度器及2個(gè)存儲(chǔ)管理。系統(tǒng)整體結(jié)構(gòu)如圖1所示。
2.1 近鄰?fù)ㄐ艡C(jī)制設(shè)計(jì)與實(shí)現(xiàn)
近鄰?fù)ㄐ艡C(jī)制采用鄰接共享FIFO實(shí)現(xiàn)。處理單元(PE)可訪問的存儲(chǔ)空間包括本地存儲(chǔ)、近鄰共享 FIFO、線程間共享存儲(chǔ)。本地存儲(chǔ)分為8個(gè)4 K大小的Bank存儲(chǔ),單個(gè)PE的近鄰?fù)ㄐ沤Y(jié)構(gòu)如圖2所示。
近鄰?fù)ㄐ诺碾娐吩谧g碼模塊中完成,該模塊完成指令的解析,近鄰?fù)ㄐ艛?shù)據(jù)、線程間通信數(shù)據(jù)及本地?cái)?shù)據(jù)的讀取,判斷近鄰?fù)ㄐ藕途€程間通信阻塞的產(chǎn)生及解除。近鄰?fù)ㄐ艡C(jī)制完成如下功能:
(1)譯碼單元將近鄰?fù)ㄐ艛?shù)據(jù)寫入近鄰 FIFO中。它首先判斷該指令是否屬于阻塞以及讀取近鄰FIFO的狀態(tài)。當(dāng)近鄰FIFO不滿時(shí),將目標(biāo)數(shù)據(jù)直接寫入近鄰FIFO中,當(dāng)處于滿狀態(tài)時(shí)則發(fā)生近鄰寫阻塞;(2)譯碼單元需要從鄰接PE的東、西、南、北4個(gè)方向的FIFO中讀取數(shù)據(jù)。譯碼單元首先判斷該指令是否屬于阻塞指令并且是否需要讀近鄰FIFO,同時(shí)讀取近鄰FIFO的狀態(tài)。當(dāng)近鄰FIFO不空時(shí),將目標(biāo)數(shù)據(jù)從近鄰FIFO中直接讀取到譯碼單元,當(dāng)近鄰FIFO處于空時(shí)說明當(dāng)前線程發(fā)生了近鄰讀阻塞。
圖1 時(shí)鐘共享多線程處理器系統(tǒng)整體結(jié)構(gòu)
圖2 單個(gè)PE的近鄰?fù)ㄐ沤Y(jié)構(gòu)
本處理單元(PE)與4個(gè)鄰接PE進(jìn)行近鄰數(shù)據(jù)通信,東/西/南/北四個(gè)方向的近鄰?fù)ㄐ艡C(jī)制結(jié)構(gòu)、端口數(shù)量及接口時(shí)序也類似。本小節(jié)以西邊第一組的相關(guān)接口時(shí)序?yàn)槔M(jìn)行說明。
如圖3所示,當(dāng)本地PE的目標(biāo)地址為近鄰?fù)ㄐ艜r(shí),首先使用目標(biāo)地址的低兩位(dec_dst_addr[1:0])判斷近鄰?fù)ㄐ诺姆较?,?dāng)目標(biāo)地址為12hFFC時(shí)表明該指令需要向西邊對(duì)應(yīng)的FIFO中寫數(shù)據(jù),當(dāng)檢測(cè)到西邊FIFO的幾乎滿信號(hào)為1時(shí),表明該指令發(fā)生了寫近鄰阻塞(wr_ngb_blk),當(dāng)前線程不能繼續(xù)運(yùn)行,需要切換線程。同時(shí)將寫近鄰阻塞標(biāo)志、寫近鄰阻塞地址及寫近鄰阻塞來自于哪個(gè)線程發(fā)送給存儲(chǔ)管理模塊。當(dāng)檢測(cè)到西邊FIFO的幾乎滿信號(hào)為0時(shí),表明該指令可以直接將目標(biāo)數(shù)據(jù)寫入到對(duì)應(yīng)FIFO中。
圖3 近鄰?fù)ㄐ排袛鄬懽枞涌跁r(shí)序
如圖4所示,首先使用源地址的低兩位(dec_src_addr [1:0])判斷近鄰?fù)ㄐ诺姆较?,如圖所示當(dāng)源地址為12hFFC時(shí),表明該指令需要從鄰接PE西邊對(duì)應(yīng)的FIFO中讀數(shù)據(jù),當(dāng)檢測(cè)到西邊FIFO不空,表明該指令可以直接從西邊對(duì)應(yīng)的FIFO中讀取數(shù)據(jù),當(dāng)拍發(fā)送讀使能(npe_rd_fifo_west_en)及線程選擇信號(hào)(npe_rd_fifo_west_sel),下一拍得到數(shù)據(jù)(npe_rd_fifo_west_data)。當(dāng)檢測(cè)到西邊 FIFO為空時(shí),表明該指令發(fā)生了讀近鄰阻塞(rd_ngb_blk),當(dāng)前線程不能繼續(xù)運(yùn)行,需要切換線程。
圖4 近鄰?fù)ㄐ排袛嘧x阻塞接口時(shí)序
因?yàn)榻復(fù)ㄐ诺淖x阻塞和寫阻塞判斷邏輯類似,只是條件不同,下面對(duì)近鄰?fù)ㄐ诺膶懽枞袛噙壿嬜鲈敿?xì)介紹。
如圖5所示,首先在指令(dec_ins_valid=1)和指令的阻塞標(biāo)志都有效(dec_blk_flg=1)情況下判斷指令的目標(biāo)地址是否為近鄰?fù)ㄐ诺刂罚缓蟾鶕?jù)目標(biāo)地址的低兩位(dec_dst_addr[1:0])判斷近鄰?fù)ㄐ诺姆较?,每個(gè)方向有兩個(gè)FIFO分別對(duì)應(yīng)低線程和高線程;當(dāng)目標(biāo)線程號(hào)set_thread_id=0時(shí)判斷低線程對(duì)應(yīng)的FIFO是否為幾乎滿,如果為幾乎滿則表示該方向?qū)?yīng)的低線程發(fā)生了近鄰?fù)ㄐ艑懽枞?wr_ngb_blk=1),且同時(shí)將近鄰?fù)ㄐ艑懽枞麡?biāo)志(wr_ngb_blk_flag)、近鄰?fù)ㄐ艑懽枞刂?wr_blk_ngb_addr)及近鄰?fù)ㄐ艑懽枞麃碜阅膫€(gè)線程的信號(hào)(wr_blk_ngb_from_t)發(fā)送給存儲(chǔ)管理模塊;如果不為滿則當(dāng)前目標(biāo)數(shù)據(jù)直接寫入到對(duì)應(yīng)方向的 FIFO中。例如指令“BMULT 4092,20,21”,該指令經(jīng)過譯碼解析,將 20號(hào)地址單元中的數(shù)據(jù)與21號(hào)地址單元中的數(shù)據(jù)進(jìn)行乘法運(yùn)算并將結(jié)果送到西邊鄰接的PE。此時(shí)譯碼單元需要判斷西邊FIFO是否為滿。若西邊FIFO為滿時(shí),此時(shí)該指令就發(fā)生了近鄰寫阻塞;若西邊FIFO不為滿時(shí),直接將乘法結(jié)果寫入到西邊FIFO中。
圖5 近鄰?fù)ㄐ艑懽枞袛嘟Y(jié)構(gòu)
2.2 線程間通信機(jī)制設(shè)計(jì)與實(shí)現(xiàn)
線程間通信是處理單元(PE)線程內(nèi)部之間的數(shù)據(jù)交換,每個(gè)處理單元(PE)的線程間通信地址都有自己的標(biāo)志寄存器,用于判斷是否發(fā)生線程間通信阻塞。每個(gè)線程數(shù)據(jù)存儲(chǔ)地址的0~7對(duì)應(yīng)0~7號(hào)線程的共享存儲(chǔ)。
如圖6所示,首先判斷目標(biāo)地址是否為線程間通信地址,圖中dec_dst_addr[11:0]=12’d1表明當(dāng)前線程需要向1號(hào)線程寫數(shù)據(jù),其次判斷1號(hào)線程對(duì)應(yīng)的寫阻塞寄存器(th_low_wr_t1_blk)的最低位,為 0時(shí)表明目標(biāo)數(shù)據(jù)可以直接寫入到對(duì)應(yīng)線程的共享存儲(chǔ)中,同時(shí)將寫線程間阻塞標(biāo)志(wr_th_blk_flag)、寫線程間阻塞地址(wr_th_ blk_addr)及寫線程間阻塞來源于哪個(gè)線程(wr_th_blk_ from_t)發(fā)送給存儲(chǔ)管理模塊。為1表明當(dāng)前線程發(fā)生了寫線程間阻塞(wr_th_blk),當(dāng)前線程無法繼續(xù)運(yùn)行需要切換線程,同時(shí)將寫線程間阻塞標(biāo)志(wr_th_blk_flag)、寫線程間阻塞地址(wr_th_blk_addr)及寫線程間阻塞來自于哪個(gè)線程(wr_th_blk_from_t)發(fā)送給存儲(chǔ)管理模塊。
圖6 線程間通信寫阻塞判斷接口信號(hào)
如圖7所示,首先判斷源地址是否為線程間通信地址,圖中dec_src_addr[11:0]=12’d1表明需要讀取1號(hào)線程的數(shù)據(jù),其次判斷1號(hào)線程對(duì)應(yīng)的讀阻塞信息寄存器(th_low_rd_t1_blk)是否為 2’b11,當(dāng)為 2’b11時(shí)表明對(duì)應(yīng)的共享存儲(chǔ)中有數(shù)據(jù)且當(dāng)拍發(fā)送讀使能信號(hào)(dec_src_rd_en), 下 一 節(jié) 拍 得 到 對(duì) 應(yīng) 線 程 的 數(shù) 據(jù)(dec_src_rd_data)。不為2’b11時(shí)表明需要的數(shù)據(jù)還沒有寫入到對(duì)應(yīng)的線程共享存儲(chǔ)中,則該指令發(fā)生讀線程間阻塞(rd_th_blk)。
圖7 線程間通信讀阻塞判斷接口信號(hào)
因?yàn)榫€程間通信的讀阻塞和寫阻塞判斷邏輯類似,只是判斷的條件不同,因此下面對(duì)線程間通信的寫阻塞判斷邏輯進(jìn)行詳細(xì)介紹。
如圖8所示,首先在指令(dec_ins_valid=1)和指令的阻塞標(biāo)志(dec_blk_flg=1)有效情況下,判斷指令的目標(biāo)地址是否為線程間通信地址,根據(jù)目標(biāo)地址的低三位(dec_dst_addr[2:0])判斷寫哪個(gè)線程,根據(jù)線程間通信地址對(duì)應(yīng)的阻塞寄存器低位判斷當(dāng)前地址是否有阻塞信息。如果有阻塞,表明發(fā)生寫線程間阻塞(wr_th_blk=1),同時(shí)發(fā)送寫線程間阻塞標(biāo)志(wr_th_blk_flag)、寫線程間阻塞對(duì)應(yīng)的地址(wr_blk_th_addr)及寫線程間阻塞來自于哪個(gè)線程的信號(hào)(wr_blk_th_from_t)給存儲(chǔ)管理模塊,如果無阻塞則數(shù)據(jù)直接寫入到對(duì)應(yīng)線程的共享存儲(chǔ)中。例如指令“BMULT 2,20,21”,該指令經(jīng)過譯碼單元解析后判斷該指令屬于阻塞指令并且屬于線程間通信指令,需要寫2號(hào)線程的共享存儲(chǔ),此時(shí)譯碼單元首先判斷2號(hào)線程對(duì)應(yīng)的阻塞寄存器中的阻塞標(biāo)志位,若為高,表明該共享地址中已經(jīng)有數(shù)據(jù),此時(shí)該指令就會(huì)發(fā)生寫線程間阻塞;若為低,表明該共享地址中沒有數(shù)據(jù),可以直接將乘法寫入2號(hào)線程對(duì)應(yīng)的共享存儲(chǔ)中。
圖8 線程間通信寫阻塞判斷結(jié)構(gòu)
仿真驗(yàn)證使用 Mentor公司的 Modelsim SE 10.1c仿真工具,根據(jù)實(shí)際情況編寫不同方案下的測(cè)試激勵(lì),在System Verilog搭建的平臺(tái)和軟件仿真平臺(tái)上驗(yàn)證時(shí)鐘共享多線程處理器系統(tǒng)的功能。
3.1 近鄰?fù)ㄐ诺墓δ芊抡?/p>
測(cè)試方案:為了測(cè)試近鄰?fù)ㄐ诺耐暾?,分別測(cè)試東/西/南/北四個(gè)方向的寫共享FIFO和讀鄰接 PE的共享FIFO數(shù)據(jù)至本地PE。測(cè)試匯編程序如圖9所示。
圖9 近鄰?fù)ㄐ艤y(cè)試匯編程序
測(cè)試說明:選擇0號(hào)線程測(cè)試近鄰?fù)ㄐ殴δ?。首先測(cè)試 0號(hào)線程分別向東/西/南/北4個(gè)方向?qū)?yīng)的共享FIFO中分別寫入4個(gè)數(shù)據(jù),等待鄰接PE讀取。最后測(cè)試本地PE的線程0從鄰接PE東/西/南/北4個(gè)方向的線程0共享FIFO中分別讀取4個(gè)數(shù)據(jù)至本地PE,參與相關(guān)運(yùn)算;測(cè)試匯編程序如圖10所示。
圖10 近鄰?fù)ㄐ欧抡娌ㄐ?/p>
圖10 為近鄰?fù)ㄐ欧抡娌ㄐ巍`徑覲E分別檢測(cè)本地PE線程 0對(duì)應(yīng)的東/西/南/北 4個(gè)方向共享 FIFO是否為空,圖中西邊讀 FIFO0信號(hào)不為空(west_rd_fifo0_empty0=0),表明本地PE已經(jīng)將近鄰數(shù)據(jù)寫入到線程 0對(duì)應(yīng)的FIFO中。鄰接PE開始向西邊的FIFO發(fā)送讀使能信號(hào)(npe_rd_fifo0_west_en)及讀選擇信號(hào)(npe_rd_fifo0_west_ sel),下一拍得到數(shù)據(jù)(npe_rd_fifo0_west_data)。最后本地PE需要從鄰接的4個(gè)方向讀取數(shù)據(jù),當(dāng)檢測(cè)到鄰接4個(gè)方向的FIFO不為空時(shí)(rd_west_fifo0_empty=0,rd_north_ fifo0_empty=0,rd_east_fifo0_empty=0,rd_south_fifo0_empty= 0),表明鄰接4個(gè)方向已經(jīng)準(zhǔn)備好數(shù)據(jù),本地PE發(fā)送 4個(gè)方向的讀 FIFO的使能信號(hào)(rd_npe_fifo0_en)和選擇信號(hào)(rd_npe_fifo0_sel),下一拍得到數(shù)據(jù)(rd_npe_fifo0_data)。當(dāng)數(shù)據(jù)讀完之后4個(gè)方向的rd_fifo0_empty0變?yōu)楦唠娖健?/p>
3.2 線程間通信的功能仿真
測(cè)試方案:選用PE的0、1、2、3號(hào)線程進(jìn)行測(cè)試。0號(hào)線程執(zhí)行加法運(yùn)算,將其運(yùn)算結(jié)果傳遞給2號(hào)線程進(jìn)行乘法運(yùn)算;1號(hào)線程執(zhí)行加法運(yùn)算,將其運(yùn)算結(jié)果傳遞給3號(hào)線程進(jìn)行乘法運(yùn)算。測(cè)試線程間共享存儲(chǔ)的訪問功能。測(cè)試匯編程序如圖11所示。
測(cè)試說明:線程0執(zhí)行A+B操作(A=2,B=3)將運(yùn)算結(jié)果D=5寫到2號(hào)線程的共享存儲(chǔ)中;線程1執(zhí)行A+ B操作(A=3,B=4),將運(yùn)算結(jié)果D=7寫到3號(hào)線程對(duì)應(yīng)的共享存儲(chǔ)中;線程2需要讀出線程2對(duì)應(yīng)共享存儲(chǔ)中的數(shù)據(jù)和21號(hào)地址里邊的數(shù)據(jù)進(jìn)行乘法運(yùn)算,預(yù)期的運(yùn)算結(jié)果為5;而線程3則需要讀出線程3對(duì)應(yīng)共享存儲(chǔ)中的數(shù)據(jù)和20號(hào)地址里邊的數(shù)據(jù)進(jìn)行乘法運(yùn)算,預(yù)期的運(yùn)算結(jié)果為7。
如圖12所示,線程1將數(shù)據(jù)寫入到3號(hào)線程對(duì)應(yīng)的共享存儲(chǔ)中時(shí),對(duì)應(yīng)的寫3號(hào)線程阻塞寄存器的值變?yōu)?’b11(th_low_wr_t3_blk=2’b11),當(dāng)寫入3號(hào)線程的共享數(shù)據(jù)讀取后,阻塞信息寄存器清零(th_low_wr_t3_blk= 2’b00);3號(hào)線程執(zhí)行乘法操作,圖中橫線位置表示 3號(hào)線程的乘法結(jié)果有效vout=1且運(yùn)算結(jié)果mulout=7。
綜上,處理器單元的近鄰?fù)ㄐ藕途€程間通信都是正確的,滿足了預(yù)期的功能。
圖11 線程間通信測(cè)試匯編程序
圖12 線程間通信仿真波形
本文提出了一種時(shí)鐘共享多線程處理器的數(shù)據(jù)通信機(jī)制,完成了modelsim的功能仿真、Xilinx ISE14.4的綜合,工作頻率達(dá)到431.816 MHz,在Vertex7-2000T的FPGA開發(fā)板實(shí)現(xiàn)了驗(yàn)證。該設(shè)計(jì)的近鄰?fù)ㄐ藕途€程間通信機(jī)制減少了片上資源的使用率且降低了數(shù)據(jù)傳輸?shù)难舆t,有效地提高了處理器的性能。
[1]屈文新,樊曉椏,張盛兵.多核多線程處理器存儲(chǔ)技術(shù)研究進(jìn)展[J].計(jì)算機(jī)科學(xué).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總線設(shè)計(jì)[J].沈陽(yáng)理工大學(xué)學(xué)報(bào),2012,31(6):70-91.
[4]徐衛(wèi)志,宋風(fēng)龍,劉志勇,等.眾核處理器片上同步機(jī)制和評(píng)估方法研究[J].計(jì)算機(jī)學(xué)報(bào),2010,33(10):1777-1787.
[5]李濤,肖靈芝.面向圖形和圖像處理的輕核陣列機(jī)結(jié)構(gòu)[J].西安郵電學(xué)院學(xué)報(bào),2012,17(3):43-46.
[6]蒲林.多態(tài)并行處理器中的 SIMD控制器設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2013,33(11):53-59.
Design and implementation of communication mechanism for a shared-clock multithreading processor
Lei Xiaofeng1,Li Tao2
(1.School of Computer,Xi′an University of Posts and Telecommunications,Xi′an 710061,China;2.School of Electronic Engineering,Xi′an University of Posts and Telecommunications,Xi′an 710061,China)
Multicore and multithreaded processors is a development direction of parallel technology.This paper design a shared_clock multithreading processor for multicore and multithreaded processors.It has two communication mechanisms:the neighbor communication and the thread-thread communication.The neighbor communication conveys information by the neighbored shared FIFO and thread-thread communication conveys information by shared memory.This can improve resource utilization and parallel executing capacity.
shared-clock multithreading processor;neighbor communication;thread-thread communication
TP302
A
10.16157/j.issn.0258-7998.2016.03.012
雷曉鋒,李濤.時(shí)鐘共享多線程處理器通信機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,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.
2015-08-11)
雷曉鋒(1990-),男,碩士研究生,主要研究方向:計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)與VLSI。
國(guó)家自然科學(xué)基金(61136002);陜西省科學(xué)技術(shù)研究發(fā)展計(jì)劃(2011K06-47);陜西省重點(diǎn)學(xué)科建設(shè)西郵計(jì)算機(jī)體系結(jié)構(gòu)項(xiàng)目資助
李濤(1954-),男,教授,主要研究方向:計(jì)算機(jī)體系結(jié)構(gòu)、計(jì)算機(jī)圖形學(xué)研究。