国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

時鐘共享多線程處理器通信機制的設(shè)計與實現(xiàn)*

2016-12-03 07:39雷曉鋒
電子技術(shù)應(yīng)用 2016年3期
關(guān)鍵詞:線程時鐘指令

雷曉鋒,李 濤

(1.西安郵電大學(xué) 計算機學(xué)院,陜西 西安 710061;2.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安710061)

時鐘共享多線程處理器通信機制的設(shè)計與實現(xiàn)*

雷曉鋒1,李 濤2

(1.西安郵電大學(xué) 計算機學(xué)院,陜西 西安 710061;2.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安710061)

多核多線程處理器[1]是并行技術(shù)的一個發(fā)展方向,基于多核多線程處理器,提出了一種時鐘共享多線程處理器。該處理器有近鄰?fù)ㄐ藕途€程間通信兩種通信機制,近鄰?fù)ㄐ挪捎媒徆蚕鞦IFO來傳遞信息,線程間通信通過線程間共享存儲來傳遞信息,這樣可以提高處理器的資源利用率和并行執(zhí)行能力。

時鐘共享多線程;近鄰?fù)ㄐ?;線程間通信

0 引言

隨著并行技術(shù)的不斷發(fā)展,如何更好地提高處理器性能成為設(shè)計者急需解決的問題。傳統(tǒng)處理器通過開發(fā)指令級并行(Instruction Level Parallelism,ILP)來提高處理器的性能,但硬件的復(fù)雜度及功耗等因素影響了處理器的性能。因此設(shè)計者們紛紛把目光投向更高層次的并行-線程級并行(Thread Level Parallelism,TLP),時鐘共享多線程處理器就是在這種背景下產(chǎn)生的。但微處理器核間與線程間通信的線延遲問題仍是需要解決的核心問題[2-3]。本文基于時鐘共享多線程處理器的功耗和結(jié)構(gòu)復(fù)雜度要求,設(shè)計了近鄰?fù)ㄐ藕途€程間通信兩種通信機制[4],并且對設(shè)計電路進行了功能仿真和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 設(shè)計與實現(xiàn)

2.1 近鄰?fù)ㄐ艡C制設(shè)計與實現(xiàn)

近鄰?fù)ㄐ艡C制采用鄰接共享FIFO實現(xiàn)。處理單元(PE)可訪問的存儲空間包括本地存儲、近鄰共享 FIFO、線程間共享存儲。本地存儲分為8個4 K大小的Bank存儲,單個PE的近鄰?fù)ㄐ沤Y(jié)構(gòu)如圖2所示。

近鄰?fù)ㄐ诺碾娐吩谧g碼模塊中完成,該模塊完成指令的解析,近鄰?fù)ㄐ艛?shù)據(jù)、線程間通信數(shù)據(jù)及本地數(shù)據(jù)的讀取,判斷近鄰?fù)ㄐ藕途€程間通信阻塞的產(chǎn)生及解除。近鄰?fù)ㄐ艡C制完成如下功能:

(1)譯碼單元將近鄰?fù)ㄐ艛?shù)據(jù)寫入近鄰 FIFO中。它首先判斷該指令是否屬于阻塞以及讀取近鄰FIFO的狀態(tài)。當(dāng)近鄰FIFO不滿時,將目標(biāo)數(shù)據(jù)直接寫入近鄰FIFO中,當(dāng)處于滿狀態(tài)時則發(fā)生近鄰寫阻塞;(2)譯碼單元需要從鄰接PE的東、西、南、北4個方向的FIFO中讀取數(shù)據(jù)。譯碼單元首先判斷該指令是否屬于阻塞指令并且是否需要讀近鄰FIFO,同時讀取近鄰FIFO的狀態(tài)。當(dāng)近鄰FIFO不空時,將目標(biāo)數(shù)據(jù)從近鄰FIFO中直接讀取到譯碼單元,當(dāng)近鄰FIFO處于空時說明當(dāng)前線程發(fā)生了近鄰讀阻塞。

圖1 時鐘共享多線程處理器系統(tǒng)整體結(jié)構(gòu)

圖2 單個PE的近鄰?fù)ㄐ沤Y(jié)構(gòu)

本處理單元(PE)與4個鄰接PE進行近鄰數(shù)據(jù)通信,東/西/南/北四個方向的近鄰?fù)ㄐ艡C制結(jié)構(gòu)、端口數(shù)量及接口時序也類似。本小節(jié)以西邊第一組的相關(guān)接口時序為例進行說明。

如圖3所示,當(dāng)本地PE的目標(biāo)地址為近鄰?fù)ㄐ艜r,首先使用目標(biāo)地址的低兩位(dec_dst_addr[1:0])判斷近鄰?fù)ㄐ诺姆较?,?dāng)目標(biāo)地址為12hFFC時表明該指令需要向西邊對應(yīng)的FIFO中寫數(shù)據(jù),當(dāng)檢測到西邊FIFO的幾乎滿信號為1時,表明該指令發(fā)生了寫近鄰阻塞(wr_ngb_blk),當(dāng)前線程不能繼續(xù)運行,需要切換線程。同時將寫近鄰阻塞標(biāo)志、寫近鄰阻塞地址及寫近鄰阻塞來自于哪個線程發(fā)送給存儲管理模塊。當(dāng)檢測到西邊FIFO的幾乎滿信號為0時,表明該指令可以直接將目標(biāo)數(shù)據(jù)寫入到對應(yīng)FIFO中。

圖3 近鄰?fù)ㄐ排袛鄬懽枞涌跁r序

如圖4所示,首先使用源地址的低兩位(dec_src_addr [1:0])判斷近鄰?fù)ㄐ诺姆较?,如圖所示當(dāng)源地址為12hFFC時,表明該指令需要從鄰接PE西邊對應(yīng)的FIFO中讀數(shù)據(jù),當(dāng)檢測到西邊FIFO不空,表明該指令可以直接從西邊對應(yīng)的FIFO中讀取數(shù)據(jù),當(dāng)拍發(fā)送讀使能(npe_rd_fifo_west_en)及線程選擇信號(npe_rd_fifo_west_sel),下一拍得到數(shù)據(jù)(npe_rd_fifo_west_data)。當(dāng)檢測到西邊 FIFO為空時,表明該指令發(fā)生了讀近鄰阻塞(rd_ngb_blk),當(dāng)前線程不能繼續(xù)運行,需要切換線程。

圖4 近鄰?fù)ㄐ排袛嘧x阻塞接口時序

因為近鄰?fù)ㄐ诺淖x阻塞和寫阻塞判斷邏輯類似,只是條件不同,下面對近鄰?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ù)ㄐ诺姆较?,每個方向有兩個FIFO分別對應(yīng)低線程和高線程;當(dāng)目標(biāo)線程號set_thread_id=0時判斷低線程對應(yīng)的FIFO是否為幾乎滿,如果為幾乎滿則表示該方向?qū)?yīng)的低線程發(fā)生了近鄰?fù)ㄐ艑懽枞?wr_ngb_blk=1),且同時將近鄰?fù)ㄐ艑懽枞麡?biāo)志(wr_ngb_blk_flag)、近鄰?fù)ㄐ艑懽枞刂?wr_blk_ngb_addr)及近鄰?fù)ㄐ艑懽枞麃碜阅膫€線程的信號(wr_blk_ngb_from_t)發(fā)送給存儲管理模塊;如果不為滿則當(dāng)前目標(biāo)數(shù)據(jù)直接寫入到對應(yīng)方向的 FIFO中。例如指令“BMULT 4092,20,21”,該指令經(jīng)過譯碼解析,將 20號地址單元中的數(shù)據(jù)與21號地址單元中的數(shù)據(jù)進行乘法運算并將結(jié)果送到西邊鄰接的PE。此時譯碼單元需要判斷西邊FIFO是否為滿。若西邊FIFO為滿時,此時該指令就發(fā)生了近鄰寫阻塞;若西邊FIFO不為滿時,直接將乘法結(jié)果寫入到西邊FIFO中。

圖5 近鄰?fù)ㄐ艑懽枞袛嘟Y(jié)構(gòu)

2.2 線程間通信機制設(shè)計與實現(xiàn)

線程間通信是處理單元(PE)線程內(nèi)部之間的數(shù)據(jù)交換,每個處理單元(PE)的線程間通信地址都有自己的標(biāo)志寄存器,用于判斷是否發(fā)生線程間通信阻塞。每個線程數(shù)據(jù)存儲地址的0~7對應(yīng)0~7號線程的共享存儲。

如圖6所示,首先判斷目標(biāo)地址是否為線程間通信地址,圖中dec_dst_addr[11:0]=12’d1表明當(dāng)前線程需要向1號線程寫數(shù)據(jù),其次判斷1號線程對應(yīng)的寫阻塞寄存器(th_low_wr_t1_blk)的最低位,為 0時表明目標(biāo)數(shù)據(jù)可以直接寫入到對應(yīng)線程的共享存儲中,同時將寫線程間阻塞標(biāo)志(wr_th_blk_flag)、寫線程間阻塞地址(wr_th_ blk_addr)及寫線程間阻塞來源于哪個線程(wr_th_blk_ from_t)發(fā)送給存儲管理模塊。為1表明當(dāng)前線程發(fā)生了寫線程間阻塞(wr_th_blk),當(dāng)前線程無法繼續(xù)運行需要切換線程,同時將寫線程間阻塞標(biāo)志(wr_th_blk_flag)、寫線程間阻塞地址(wr_th_blk_addr)及寫線程間阻塞來自于哪個線程(wr_th_blk_from_t)發(fā)送給存儲管理模塊。

圖6 線程間通信寫阻塞判斷接口信號

如圖7所示,首先判斷源地址是否為線程間通信地址,圖中dec_src_addr[11:0]=12’d1表明需要讀取1號線程的數(shù)據(jù),其次判斷1號線程對應(yīng)的讀阻塞信息寄存器(th_low_rd_t1_blk)是否為 2’b11,當(dāng)為 2’b11時表明對應(yīng)的共享存儲中有數(shù)據(jù)且當(dāng)拍發(fā)送讀使能信號(dec_src_rd_en), 下 一 節(jié) 拍 得 到 對 應(yīng) 線 程 的 數(shù) 據(jù)(dec_src_rd_data)。不為2’b11時表明需要的數(shù)據(jù)還沒有寫入到對應(yīng)的線程共享存儲中,則該指令發(fā)生讀線程間阻塞(rd_th_blk)。

圖7 線程間通信讀阻塞判斷接口信號

因為線程間通信的讀阻塞和寫阻塞判斷邏輯類似,只是判斷的條件不同,因此下面對線程間通信的寫阻塞判斷邏輯進行詳細(xì)介紹。

如圖8所示,首先在指令(dec_ins_valid=1)和指令的阻塞標(biāo)志(dec_blk_flg=1)有效情況下,判斷指令的目標(biāo)地址是否為線程間通信地址,根據(jù)目標(biāo)地址的低三位(dec_dst_addr[2:0])判斷寫哪個線程,根據(jù)線程間通信地址對應(yīng)的阻塞寄存器低位判斷當(dāng)前地址是否有阻塞信息。如果有阻塞,表明發(fā)生寫線程間阻塞(wr_th_blk=1),同時發(fā)送寫線程間阻塞標(biāo)志(wr_th_blk_flag)、寫線程間阻塞對應(yīng)的地址(wr_blk_th_addr)及寫線程間阻塞來自于哪個線程的信號(wr_blk_th_from_t)給存儲管理模塊,如果無阻塞則數(shù)據(jù)直接寫入到對應(yīng)線程的共享存儲中。例如指令“BMULT 2,20,21”,該指令經(jīng)過譯碼單元解析后判斷該指令屬于阻塞指令并且屬于線程間通信指令,需要寫2號線程的共享存儲,此時譯碼單元首先判斷2號線程對應(yīng)的阻塞寄存器中的阻塞標(biāo)志位,若為高,表明該共享地址中已經(jīng)有數(shù)據(jù),此時該指令就會發(fā)生寫線程間阻塞;若為低,表明該共享地址中沒有數(shù)據(jù),可以直接將乘法寫入2號線程對應(yīng)的共享存儲中。

圖8 線程間通信寫阻塞判斷結(jié)構(gòu)

3 仿真驗證及結(jié)果分析

仿真驗證使用 Mentor公司的 Modelsim SE 10.1c仿真工具,根據(jù)實際情況編寫不同方案下的測試激勵,在System Verilog搭建的平臺和軟件仿真平臺上驗證時鐘共享多線程處理器系統(tǒng)的功能。

3.1 近鄰?fù)ㄐ诺墓δ芊抡?/p>

測試方案:為了測試近鄰?fù)ㄐ诺耐暾裕謩e測試東/西/南/北四個方向的寫共享FIFO和讀鄰接 PE的共享FIFO數(shù)據(jù)至本地PE。測試匯編程序如圖9所示。

圖9 近鄰?fù)ㄐ艤y試匯編程序

測試說明:選擇0號線程測試近鄰?fù)ㄐ殴δ?。首先測試 0號線程分別向東/西/南/北4個方向?qū)?yīng)的共享FIFO中分別寫入4個數(shù)據(jù),等待鄰接PE讀取。最后測試本地PE的線程0從鄰接PE東/西/南/北4個方向的線程0共享FIFO中分別讀取4個數(shù)據(jù)至本地PE,參與相關(guān)運算;測試匯編程序如圖10所示。

圖10 近鄰?fù)ㄐ欧抡娌ㄐ?/p>

圖10 為近鄰?fù)ㄐ欧抡娌ㄐ?。鄰接PE分別檢測本地PE線程 0對應(yīng)的東/西/南/北 4個方向共享 FIFO是否為空,圖中西邊讀 FIFO0信號不為空(west_rd_fifo0_empty0=0),表明本地PE已經(jīng)將近鄰數(shù)據(jù)寫入到線程 0對應(yīng)的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ù),當(dāng)檢測到鄰接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)準(zhǔn)備好數(shù)據(jù),本地PE發(fā)送 4個方向的讀 FIFO的使能信號(rd_npe_fifo0_en)和選擇信號(rd_npe_fifo0_sel),下一拍得到數(shù)據(jù)(rd_npe_fifo0_data)。當(dāng)數(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號線程對應(yīng)的共享存儲中;線程2需要讀出線程2對應(yīng)共享存儲中的數(shù)據(jù)和21號地址里邊的數(shù)據(jù)進行乘法運算,預(yù)期的運算結(jié)果為5;而線程3則需要讀出線程3對應(yīng)共享存儲中的數(shù)據(jù)和20號地址里邊的數(shù)據(jù)進行乘法運算,預(yù)期的運算結(jié)果為7。

如圖12所示,線程1將數(shù)據(jù)寫入到3號線程對應(yīng)的共享存儲中時,對應(yīng)的寫3號線程阻塞寄存器的值變?yōu)?’b11(th_low_wr_t3_blk=2’b11),當(dāng)寫入3號線程的共享數(shù)據(jù)讀取后,阻塞信息寄存器清零(th_low_wr_t3_blk= 2’b00);3號線程執(zhí)行乘法操作,圖中橫線位置表示 3號線程的乘法結(jié)果有效vout=1且運算結(jié)果mulout=7。

綜上,處理器單元的近鄰?fù)ㄐ藕途€程間通信都是正確的,滿足了預(yù)期的功能。

圖11 線程間通信測試匯編程序

圖12 線程間通信仿真波形

4 總結(jié)

本文提出了一種時鐘共享多線程處理器的數(shù)據(jù)通信機制,完成了modelsim的功能仿真、Xilinx ISE14.4的綜合,工作頻率達到431.816 MHz,在Vertex7-2000T的FPGA開發(fā)板實現(xiàn)了驗證。該設(shè)計的近鄰?fù)ㄐ藕途€程間通信機制減少了片上資源的使用率且降低了數(shù)據(jù)傳輸?shù)难舆t,有效地提高了處理器的性能。

[1]屈文新,樊曉椏,張盛兵.多核多線程處理器存儲技術(shù)研究進展[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].沈陽理工大學(xué)學(xué)報,2012,31(6):70-91.

[4]徐衛(wèi)志,宋風(fēng)龍,劉志勇,等.眾核處理器片上同步機制和評估方法研究[J].計算機學(xué)報,2010,33(10):1777-1787.

[5]李濤,肖靈芝.面向圖形和圖像處理的輕核陣列機結(jié)構(gòu)[J].西安郵電學(xué)院學(xué)報,2012,17(3):43-46.

[6]蒲林.多態(tài)并行處理器中的 SIMD控制器設(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è)計與實現(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-),男,碩士研究生,主要研究方向:計算機系統(tǒng)結(jié)構(gòu)與VLSI。

國家自然科學(xué)基金(61136002);陜西省科學(xué)技術(shù)研究發(fā)展計劃(2011K06-47);陜西省重點學(xué)科建設(shè)西郵計算機體系結(jié)構(gòu)項目資助

李濤(1954-),男,教授,主要研究方向:計算機體系結(jié)構(gòu)、計算機圖形學(xué)研究。

猜你喜歡
線程時鐘指令
別樣的“時鐘”
基于C#線程實驗探究
古代的時鐘
基于國產(chǎn)化環(huán)境的線程池模型研究與實現(xiàn)
淺談linux多線程協(xié)作
有趣的時鐘
殺毒軟件中指令虛擬機的脆弱性分析
時鐘會開“花”
中斷與跳轉(zhuǎn)操作對指令串的影響
一種基于滑窗的余度指令判別算法