《電子技術應用》
您所在的位置:首頁 > 通信与网络 > 设计应用 > 时钟共享多线程处理器通信机制的设计与实现
时钟共享多线程处理器通信机制的设计与实现
2016年电子技术应用第3期
雷晓锋1,李 涛2
1.西安邮电大学 计算机学院,陕西 西安710061;2.西安邮电大学 电子工程学院,陕西 西安710061
摘要: 多核多线程处理器[1]是并行技术的一个发展方向,基于多核多线程处理器,提出了一种时钟共享多线程处理器。该处理器有近邻通信和线程间通信两种通信机制,近邻通信采用近邻共享FIFO来传递信息,线程间通信通过线程间共享存储来传递信息,这样可以提高处理器的资源利用率和并行执行能力。
中圖分類號: TP302
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.03.012
中文引用格式: 雷曉鋒,李濤. 時鐘共享多線程處理器通信機制的設計與實現[J].電子技術應用,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.
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
Abstract: 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.
Key words : shared-clock multithreading processor;neighbor communication;thread-thread communication

0 引言

    隨著并行技術的不斷發展,如何更好地提高處理器性能成為設計者急需解決的問題。傳統處理器通過開發指令級并行(Instruction Level Parallelism,ILP)來提高處理器的性能,但硬件的復雜度及功耗等因素影響了處理器的性能。因此設計者們紛紛把目光投向更高層次的并行-線程級并行(Thread Level Parallelism,TLP),時鐘共享多線程處理器就是在這種背景下產生的。但微處理器核間與線程間通信的線延遲問題仍是需要解決的核心問題[2-3]。本文基于時鐘共享多線程處理器的功耗和結構復雜度要求,設計了近鄰通信和線程間通信兩種通信機制[4],并且對設計電路進行了功能仿真和FPGA驗證。

1 時鐘共享多線程處理器的體系結構

    本文提出的時鐘共享多線程處理器系統支持多指令多數據(MIMD)、分布式指令并行和流處理3種運行模式[5-6]。它由16個處理單元(Processing Element,PE)互連構成一個4×4的二維陣列,還包括1個前端處理器、4個協處理器、2個調度器及2個存儲管理。系統整體結構如圖1所示。

wdz5-t1.gif

2 設計與實現

2.1 近鄰通信機制設計與實現

    近鄰通信機制采用鄰接共享FIFO實現。處理單元(PE)可訪問的存儲空間包括本地存儲、近鄰共享FIFO、線程間共享存儲。本地存儲分為8個4 K大小的Bank存儲,單個PE的近鄰通信結構如圖2所示。

wdz5-t2.gif

    近鄰通信的電路在譯碼模塊中完成,該模塊完成指令的解析,近鄰通信數據、線程間通信數據及本地數據的讀取,判斷近鄰通信和線程間通信阻塞的產生及解除。近鄰通信機制完成如下功能:

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

    本處理單元(PE)與4個鄰接PE進行近鄰數據通信,東/西/南/北四個方向的近鄰通信機制結構、端口數量及接口時序也類似。本小節以西邊第一組的相關接口時序為例進行說明。

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

wdz5-t3.gif

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

wdz5-t4.gif

    因為近鄰通信的讀阻塞和寫阻塞判斷邏輯類似,只是條件不同,下面對近鄰通信的寫阻塞判斷邏輯做詳細介紹。

    如圖5所示,首先在指令(dec_ins_valid=1)和指令的阻塞標志都有效(dec_blk_flg=1)情況下判斷指令的目標地址是否為近鄰通信地址,然后根據目標地址的低兩位(dec_dst_addr[1:0])判斷近鄰通信的方向,每個方向有兩個FIFO分別對應低線程和高線程;當目標線程號set_thread_id=0時判斷低線程對應的FIFO是否為幾乎滿,如果為幾乎滿則表示該方向對應的低線程發生了近鄰通信寫阻塞(wr_ngb_blk=1),且同時將近鄰通信寫阻塞標志(wr_ngb_blk_flag)、近鄰通信寫阻塞地址(wr_blk_ngb_addr)及近鄰通信寫阻塞來自哪個線程的信號(wr_blk_ngb_from_t)發送給存儲管理模塊;如果不為滿則當前目標數據直接寫入到對應方向的FIFO中。例如指令“BMULT 4092,20,21”,該指令經過譯碼解析,將20號地址單元中的數據與21號地址單元中的數據進行乘法運算并將結果送到西邊鄰接的PE。此時譯碼單元需要判斷西邊FIFO是否為滿。若西邊FIFO為滿時,此時該指令就發生了近鄰寫阻塞;若西邊FIFO不為滿時,直接將乘法結果寫入到西邊FIFO中。

wdz5-t5.gif

2.2 線程間通信機制設計與實現

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

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

wdz5-t6.gif

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

wdz5-t7.gif

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

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

wdz5-t8.gif

3 仿真驗證及結果分析

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

3.1 近鄰通信的功能仿真

    測試方案:為了測試近鄰通信的完整性,分別測試東/西/南/北四個方向的寫共享FIFO和讀鄰接PE的共享FIFO數據至本地PE。測試匯編程序如圖9所示。

wdz5-t9.gif

    測試說明:選擇0號線程測試近鄰通信功能。首先測試0號線程分別向東/西/南/北4個方向對應的共享FIFO中分別寫入4個數據,等待鄰接PE讀取。最后測試本地PE的線程0從鄰接PE東/西/南/北4個方向的線程0共享FIFO中分別讀取4個數據至本地PE,參與相關運算;測試匯編程序如圖10所示。

wdz5-t10.gif

    圖10為近鄰通信仿真波形。鄰接PE分別檢測本地PE線程0對應的東/西/南/北4個方向共享FIFO是否為空,圖中西邊讀FIFO0信號不為空(west_rd_fifo0_empty0=0),表明本地PE已經將近鄰數據寫入到線程0對應的FIFO中。鄰接PE開始向西邊的FIFO發送讀使能信號(npe_rd_fifo0_west_en)及讀選擇信號(npe_rd_fifo0_west_sel),下一拍得到數據(npe_rd_fifo0_west_data)。最后本地PE需要從鄰接的4個方向讀取數據,當檢測到鄰接4個方向的FIFO不為空時(rd_west_fifo0_empty=0,rd_north_fifo0_empty=0,rd_east_fifo0_empty=0,rd_south_fifo0_empty=0),表明鄰接4個方向已經準備好數據,本地PE發送4個方向的讀FIFO的使能信號(rd_npe_fifo0_en)和選擇信號(rd_npe_fifo0_sel),下一拍得到數據(rd_npe_fifo0_data)。當數據讀完之后4個方向的rd_fifo0_empty0變為高電平。

3.2 線程間通信的功能仿真

    測試方案:選用PE的0、1、2、3號線程進行測試。0號線程執行加法運算,將其運算結果傳遞給2號線程進行乘法運算;1號線程執行加法運算,將其運算結果傳遞給3號線程進行乘法運算。測試線程間共享存儲的訪問功能。測試匯編程序如圖11所示。

wdz5-t11.gif

    測試說明:線程0執行A+B操作(A=2,B=3)將運算結果D=5寫到2號線程的共享存儲中;線程1執行A+B操作(A=3,B=4),將運算結果D=7寫到3號線程對應的共享存儲中;線程2需要讀出線程2對應共享存儲中的數據和21號地址里邊的數據進行乘法運算,預期的運算結果為5;而線程3則需要讀出線程3對應共享存儲中的數據和20號地址里邊的數據進行乘法運算,預期的運算結果為7。

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

wdz5-t12.gif

    綜上,處理器單元的近鄰通信和線程間通信都是正確的,滿足了預期的功能。

4 總結

    本文提出了一種時鐘共享多線程處理器的數據通信機制,完成了modelsim的功能仿真、Xilinx ISE14.4的綜合,工作頻率達到431.816 MHz,在Vertex7-2000T的FPGA開發板實現了驗證。該設計的近鄰通信和線程間通信機制減少了片上資源的使用率且降低了數據傳輸的延遲,有效地提高了處理器的性能。

參考文獻

[1] 屈文新,樊曉椏,張盛兵.多核多線程處理器存儲技術研究進展[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] 黃志鋼,盛肖煒.多核處理器結構與核間通信的CMC總線設計[J].沈陽理工大學學報,2012,31(6):70-91.

[4] 徐衛志,宋風龍,劉志勇,等.眾核處理器片上同步機制和評估方法研究[J].計算機學報,2010,33(10):1777-1787.西安郵電學院學報,2012,17(3):43-46.

[6] 蒲林.多態并行處理器中的SIMD控制器設計與實現[J].電子技術應用,2013,33(11):53-59.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 久久精品久久久久久国产 免费| 欧美久久久久久久| 日韩一区二区三区在线播放| 国产精品成人av性教育| 国产精品视频99| 欧美在线日韩在线| 国产精品444| 久久偷窥视频| 日韩免费av片在线观看| 国产一区香蕉久久| 一区二区在线高清视频| 国产精品久久久久久av福利 | 国产一区二区视频在线免费观看| 亚洲欧洲精品一区二区| 国产精品视频中文字幕91| 久久久久国产精品熟女影院| 日韩精品极品视频在线观看免费| 自拍日韩亚洲一区在线| 国产精品久久久久久久久久| www.色综合| 国产精品高清网站| 国产自产在线视频一区| 免费久久99精品国产自| 国产精品欧美激情| 国产精品一区二区三区观看 | 日本一区二区三不卡| 国产成一区二区| 国产欧美中文字幕| 国产精品美女呻吟| 国产精品国产亚洲精品看不卡| 国产欧美在线观看| 精品国产一区二区三区在线| 午夜久久资源| 久久精品一本久久99精品| 欧美日韩精品不卡| 日本一区视频在线观看免费| 天天干天天色天天爽| 久久天天躁夜夜躁狠狠躁2022 | 欧美成人免费在线观看| 欧美有码在线观看视频| 欧美国产亚洲一区|