星期一, 10月 24, 2005

MOVE32Int:Transport Triggered Architecture





昨天晚上才剛喝下兩公升啤酒,某個「老戰友」丟給我看這玩意,酒馬上就醒了。

基本上,這個MOVE Machine有幾個主要特點:

一、只有一個指令「move」。

二、program counter是採用memory mapping實作的visible設計。所謂的jump動作,就是將一個值、搬移到PC內,一個unconditional jump就是「move destination PC」,subroutine linkage則反。換言之,沒有條件控制流程指令。

三、VLIW架構,將四個指令包在一起。

四、full guarding,每個指令都有3 bits欄位標示guard條件碼。

問題來了,這個MOVE指令集有什麼缺點?

第一個比較明顯的是:code density太低,像一個add r1,r2,r3的簡單加法動作(Oint <= R2; Tadd1 <= R3; R1 <= Rint1),在MOVE上就需要三個指令。換句話說,需要48 bits長度,這個還比IA-64(41 bits)來得高。

另外一個問題是:register file的複雜度,MOVE這種架構需要很多register,如果減少register的數量,將會需要更多的指令去進行運算工作;但如果實作成集中式的register file,可能會有困難,因為register file的port數會隨著issue rate而線性成長,直接增加複雜度。

更重要的是,大多數的register file都會被拿去作為控制用途之類的特殊register,實際上的GPR反而不多,以MOVEint32為例,GPR只有10個(hardwired zero的r0不算)。

最後,就我自己的感覺,雖然這是1990年代的東西,但MOVE架構的例外處理機制一定不簡單,這地方我得再好好想想,很久沒碰這些東西了。

我真的很期待他努力多年的成果:要如何設計出一個兼具MOVE優點與高code density的指令集?

沒有留言: