背景
以4比特為單位,共16個數。仔細思考狀態轉換過程中的晶體管翻轉次數。
0000
0001,1
0010,2
0011,1
0100,3
0101,1
0110,2
0111,1
1000,4
1001,1
1010,2
1011,1
1100,3
1101,1
1110,2
1111,1
0000,4
分析,例如,從1111到0000,晶體管翻轉4次。
總共的翻轉次數是30,平均30/16=1.875次。
創新
以下編碼,可以使得翻轉次數降低,在順序遞增的過程中。
0000→0
0001→1
0011→2
0010→3
0110→4
0100→5
0101→6
0111→7
1111→8
1110→9
1100→10
1101→11
1001→12
1011→13
1010→14
1000→15
0000→0
以上編碼,晶體管翻轉次數降為16,平均1次。
若按照遞增循環,可以把晶體管翻轉次數降低,從30次到16次,降低(30-16)/30=46.7%
總結
降低晶體管翻轉次數,可以省電。
上述方案,可以在數字遞增循環過程中,將晶體管翻轉次數降到最低。
查表法完成四則運算
使用查表法的目的,同樣是為了省電。
查表法使用大量的ROM,既然X3D可以堆疊cache,我們也可以堆疊ROM,而且ROM比cache省電,可以堆疊更多層。
1比特cache需要6個晶體管,而同等容量的ROM只需要1個晶體管。
總之,堆疊ROM的容量可以很大,使得CPU能夠一次處理很多筆四則運算。
規定float和double格式時,還不流行多核。實際上,可以用多核并行運算,計算decimal數字,不再受位數的限制。
所以,新的CPU擁有極大的ROM,可以通過查表法同時完成許多筆四則運算,這N個整數核,大約可以同時完成N/2筆浮點數運算。N的大小取決于ROM的大小,和表的大小。
程序
該程序輸出8比特的晶體管編碼:
a=('00','01','11','10')def f(x,y,z,t,i):print(a[x%4],a[y%4],a[z%4],a[t%4],'->',i)x=0;y=0;z=0;t=0
for i in range(256):f(x,y,z,t,i)if i%4!=3:t=t+1if (i+1)%4==0:z=z+1if (i+1)%16==0:z=z-1if (i+1)%16==0:y=y+1if (i+1)%64==0:y=y-1if (i+1)%64==0:x=x+1if (i+1)%256==0:x=x-1