理論上 CPU 字長上限是多少位元組,1M 可不可能?
假如想設計1M位元組字長的cpu晶元,物理學上有沒有可能?
從實際應用估計,CPU以後最大會增加到多少位元組?(還是說儘可能保持短,除非遇到32位地址空間太小之類的問題才增加?)
理論上肯定是有可能的。
因為字長的大小跟CPU的製程沒有太大關係,所以不會碰到量子學的障礙,理論上多大的字長都可以。
實際上困難在於設計和製造上。
1Mbit的字長,那麼一個寄存器就要有1024*1024位,這麼大的一個寄存器,如何保持信號的穩定性是個大難題,CPU對外的匯流排寬度也會大的離譜,這麼寬的匯流排如何保持信號穩定並且互相不干擾實在是太難了。我能想到的辦法是降速。
為什麼現在不少高速設備都是串列的,比如USB,比如SATA,因為串列傳輸在高速模式下各條線的干擾非常小。並行傳輸需要同步,高頻傳輸時各條線之間干擾極大。所以如果是1Mbit的字長,我覺得可以考慮把傳輸頻率降低到1KHz左右了。
CPU內部的信號頻率極高,在這種情況下,如果要保證如此大字長的信號穩定、同步傳輸,那麼設計上的困難是非常大的,一點點的擾動可能產生的危害就是致命的。
而且寄存器都這麼大了,那麼ALU和各級緩存肯定都不小了,那麼一個晶元的尺寸肯定也不會小了,製造成本肯定也不小,所以肯定困難重重啊。還有,要不要cache呢?cache起碼得是寄存器長度的整數倍,一個寄存器就是1Mbit,那一個cache起碼得要幾十到幾百倍個寄存器的寬度吧,真無法相信cache的面積得多大……
而且,地址線+數據線,加起來得有幾百萬個吧,CPU的引腳得多少才夠用呢?這麼多引腳,板子得做的多大才夠用呢?
我的結論是:能是肯定能的,但未必實用,速度未必就很快,製造和設計肯定會十分困難。
根據題主補充的問題,我也做一個補充,最長用多大的字長肯定是綜合考慮效率和成本,如果晶元的核心尺寸能大幅度提高,晶元設計和製造成本能大幅度降低,那麼肯定會有人設計更大的字長。大字長可以帶來更快的計算速度,但如果計算速度帶來的效益不足以抵消設計成本,那麼大字長的晶元就不會普及。所以簡單的說,應該就是夠用就好了。完全可能。CPU字長表示其執行的指令的位寬。分為操作碼和操作數兩個部分。操作碼只需要在眾多指令集中(也就100多個)區分出是哪條指令就行,有8bit就夠用。剩下100萬bit都是操作數的話,不知道要塞多少個多大的數才能塞滿,不然多浪費CPU的如此強悍的位寬處理能力。
物理上看,給你28nm製造工藝,最小線寬為28nm,那麼晶體管最小尺寸為56nm。約成50nm。一個周期處理1M的數據,該數據從寄存器中一次性讀出,採用最簡單的D觸發器寄存數據,一個D觸發器至少需要要3個NMOS和PMOS。考慮到布局,只計算NMOS寬度,那麼1M的數據存儲光是NMOS寬度就達到15cm(3M*50*10的-9次方)。這還沒考慮布線所佔面積跟實際處理電路,只考慮寄存數據(多數指令的第一步就是從寄存器中取數據運算),只能說太浪費了。機器字長這個東西在硬體設計上來說主要會影響兩個東西,一個叫做位寬,涉及到寄存器和執行器,比如alu的構建寬度,另一個就是匯流排寬度了。二者其中位寬是硬性要求的,如果你是1m寬度,那就真的一個寄存器需要1m個d觸發器存在。而1m的alu理論上來說也不是不能設計出來,但是難度會非常大,比較可行的是分段實現,不過效率會很低且中間緩存寄存器會非常多。匯流排寬度的話並不是硬性的,往往可以採用分時復用的方式減少寬度,但是這樣就需要兩個通信者都有串並轉化邏輯和緩存,每個寄存器之間如果都這麼通信那效率就很低了,而且邏輯會很複雜。外部引腳其實也跟匯流排是一樣的,不需要非得跟位寬一樣,但是短了效率肯定低。其實32的x86匯流排寬度是36位的(是的,並不是32位處理器不能支持4g以上內存,這隻跟地址線有關係,安藤IA32支持4g內存都是上個世紀的事情了,而造成這種錯誤映像的是win intel聯盟的人為限制而已。這裡面事很多,就不細說了),但是早在486年代外部內存地址線一直都是16位寬的,怎麼用呢,分時復用唄。現在的各種串列匯流排不過是分時復用的極致罷了,不過現在的串列是為了高頻減少串擾。
所以理論上來說可以實現,但是實際來說非常難。
硬體的設計其實跟其要達到的目的和成本相關,這就決定了其實字長設計這個東西沒有硬性的要求,比如現在8086的soc工控片子也有人用啊,因為洗衣機裡面用32寬度的不是不行,是貴了沒人買啊。而我見過比較長的是有些dsp裡面的一些邏輯的字長,我上學做項目里那個1024的FFT還真是1024寬的哦,當然了這種都是專用處理器。
其實字長也是活的,並不是一個cpu裡面就是這麼長,用過sse mmx的就知道,sse寄存器都是128寬的。
就現在通用處理器來說,64位是一個比較好的平衡點了,但是在長可能就沒有必要了,想想當年的ps2, NB到不可一世的128字長和超高速sram現在看起來實際上說是個gpu更貼切,當cpu實在沒有必要。
字長從軟體上來說其實用出也有限,除非涉及到科學計算,音視頻編解碼等等計算密集型場景,否則很難體現出他的好處,而字長過長帶來的明顯壞處就是內存的浪費,因為全部指針的長度跟字長一致,字長翻番這個也翻。類似的還有pading問題。
1MByte的單字長度=8Mbit。這麼長的字,我就問問引腳打算出多少根?。。。別跟我說串列哈,一個並行引腳都滿足不了的話,這基本就是個廢U~~
我給個形象的比喻,excel07中有個控制小數位的按鍵,你是不需要不停的按它來增加精度的。討論cpu的並行性和功耗/性能的取捨是現時要點。128位都不知道在os和cpu廠商的roadmap里哪裡呢!
推薦閱讀: