多核心訊號傳送必須根據Blocking send/receive handshaking protocol 來溝通。下圖為Blocking send/receive handshaking protocol的表示法。
當P1處理器執行到send指令時,會傳送send訊息給P2,等待P2回傳準備接收資料的訊息,P1接收到P2訊息後,會將資料傳送給P2。
下圖為傳送與接收指令的流程圖,當執行到send指令時,會送出Request to send 的訊息,並判斷Ready to receive是否為1,當Ready to receive=0,處理器會執行nop(空轉)的指令,並且持續送出Request to send的訊息;當Ready to receive=1,表示可以開始傳送資料,傳送結束後繼續執行下一個指令。
當執行到receive 指令時,會送出Ready to receive 的訊息,並判斷Request to send 是否為1,當Request to send=0,處理器會執行nop(空轉)的指令,並且持續送出Ready to receive的訊息;當Request to send=1,表示可以開始傳送資料,傳送結束後繼續執行下一個指令。
指令1到4為執行e = a + b 的訊號處理,指令5到8為執行f = c + d 的訊號處理,指令9跟10為執行g = e + f 的訊號處理,最後再跳回主程式。
下圖為使用PCSpim所執行出來的結果:
當P1處理器執行到send指令時,會傳送send訊息給P2,等待P2回傳準備接收資料的訊息,P1接收到P2訊息後,會將資料傳送給P2。
下圖為傳送與接收指令的流程圖,當執行到send指令時,會送出Request to send 的訊息,並判斷Ready to receive是否為1,當Ready to receive=0,處理器會執行nop(空轉)的指令,並且持續送出Request to send的訊息;當Ready to receive=1,表示可以開始傳送資料,傳送結束後繼續執行下一個指令。
當執行到receive 指令時,會送出Ready to receive 的訊息,並判斷Request to send 是否為1,當Request to send=0,處理器會執行nop(空轉)的指令,並且持續送出Ready to receive的訊息;當Request to send=1,表示可以開始傳送資料,傳送結束後繼續執行下一個指令。
receive $5
receive動作為送出receive=1,當send=1時,會將接收到的訊號放置在regs[rd]內。
send $5
send 動作為送出send=1,當receive=1時,會將regs[rd]放置在senddata內,並傳送出去。
receive動作為送出receive=1,當send=1時,會將接收到的訊號放置在regs[rd]內。
send $5
send 動作為送出send=1,當receive=1時,會將regs[rd]放置在senddata內,並傳送出去。
下面為P2 receive指令
首先,撰寫MIPS組合語言程式,配合PCSpim軟體,測試所撰寫的MIPS組合語言程式是否正確,正確無誤後,將PCSpim.log檔內的相關資料(rom與sram),透過使用C語言所撰寫的程式擷取並將機器碼轉換成二進制。接著將機器碼放置在似MIPS架構的記憶體內,使用SynaptiCAD模擬測試訊號是否正確。最後比較單核心與雙核心的效能。
下圖為單核心的方塊圖:
下圖為單核心的方塊圖:
所做的訊號處理為e =a + b ;f = c + d ; g = e + f ,對單核心處理器來說只要直接一個一個往下執行即可;若以雙核心來執行,因為e =a + b ;f = c + d ;這兩個訊號處理並沒有相關性,故可以將這兩個訊號處理分別放在兩個核心內同時執行, g = e + f 則必須透過兩顆核心互相溝通才可以正確執行。
下圖為使用MIPS組合語言所撰寫的程式,使用單核心執行,與C語言程式的訊號處理相同。
下圖為使用MIPS組合語言所撰寫的程式,使用單核心執行,與C語言程式的訊號處理相同。
指令1到4為執行e = a + b 的訊號處理,指令5到8為執行f = c + d 的訊號處理,指令9跟10為執行g = e + f 的訊號處理,最後再跳回主程式。
下圖為使用PCSpim所執行出來的結果:
從波形圖可以看出,當send1=1時,就是P1執行到send指令,送出訊息要傳送資料,當receive2=1時,就是P2執行到receive指令,並偵側到send1=1,固傳送receive2=1的訊號,告知P1可以傳送資料,傳送資料與接收資料完成後,會將send1 與 receive2 設為0 。
單核心處理器執行所有指令必須用到11個指令,執行時間為3.05us;雙核心處理器P1執行5個指令,P2執行8個指令,故需要8個指令才可以完成所有訊號處理,執行時間為2.35us,Speedup = 3.050000 / 2.350000 =1.2978。
單核心處理器執行所有指令必須用到11個指令,執行時間為3.05us;雙核心處理器P1執行5個指令,P2執行8個指令,故需要8個指令才可以完成所有訊號處理,執行時間為2.35us,Speedup = 3.050000 / 2.350000 =1.2978。













沒有留言:
張貼留言