引用:
作者nanri
反正只要是為了相容x86、AMD所提出的x86-64,
GPR就是那麼多而已,
除非再開發新指令集,再去另外使用新的registers,
不然其他比舊指令集定義還多的registers只能淪落到register rename使用而已。
也就是說,沒用到新的指令集的程式,效能增進還是有限。
|
國外linux玩家曾用fpga實作32gprs rex發現到x64原本有 32gprs prefix跟16gprs prefix. 32gprs rex prefix 有兩組正副accumulator(r0+r8a, r16+r31a), 16gprs rex prefix 只有一組正副accumulator(r0+r8a) i386只有eax. 而實驗結果發現在in order下32prefix比16prefix快40%(他們也用ABI實作32bit i386 with r0~r15居然效能爆升且ram usage比x64或i386低很多.)
事實上在1999年時x64 early develop stage的時候amd曾實作過32 gprs rex prefix而後來選擇了16gprs 其原因據說是因為32 gprs在k8 hammer上增益不明顯 為了節省layout complexity以及大改既有的back end而選擇了16版本(不過主要原因是segmentation.). 而intel因為早在2000年為了強行推廣itanium+netburst就退出了x64制定規格(連帶把timna, yamhill給掉cancel)所以有話語權的amd理所當然的選擇能optimize自家既有cpu的方案 只能說amd缺乏遠見. stackoverflow一些討論更直指如果當年是使用32prefix現在x86絕不會停在高原期了.