我試圖編寫一個排序算法來重新排序雙重問題處理器(單元SPU)的指令。獲得處理指令的雙重問題的一種方法不應該依賴於它之前的指令(另一個涉及單獨的管道,但我關注的是同一管道中的指令)。我知道這對於編譯器來說太多了,我在搜索時沒有找到我需要的東西。這可以在大多數情況下通過手工完成,但是排序算法應該確保最低的「序列計數」(相互關聯的數量或相關指令)。對雙重問題處理的相關指令進行排序/重新排序
我的問題是有這樣或類似的事情嗎?有沒有優化的方法?
簡單實例僞碼減半指令時間(輸入:i1, i2, i3
):
v1 = i1^i2; - #single-issued
v2 = v1 | i2; \ #v2,v3 dual-issued
v3 = i1 & i3;/#v2,v3 dual-issued
v4 = v3 & i2; - #single-issued
可以寫爲:
v1 = i1^i2; \ #v1,v3 dual-issued
v3 = i1 & i3;/#v1,v3 dual-issued
v2 = v1 | i2; \ #v2,v4 dual-issued
v4 = v3 & i2;/#v2,v4 dual-issued
這裏是我創建的遞歸重新排列到指令的Python實現達到最低的「序列計數」。
reorder.py
http://pastebin.com/dt8eWy3H
樣品t8-1.h
http://pastebin.com/w0DYg8ff
空指令沒有問題,SPU編譯器(CC = SPU-GCC/AS = SPU-AS)還不夠聰明,重新排序的說明。 – frankiek3 2015-07-26 02:12:28