為什麼沒有128位甚至更多位的處理器呢?用不著?還是做不出來?
計算機
轉一篇 @Skogkatt 的博文:為什麼沒有「128位」的通用處理器
在專用領域,比如DSP,GPU中,通用寄存器通常都很寬,也就是說大於通常的32位或者64位。其原因在於,這些針對特定領域設計的處理器,其硬體架構是為問題服務的,舉例來說,GPU處理顏色的時候,一個像素ARGB是四個32位或者16位的浮點數,所以寄存器有128位或者64位寬也就不足為奇了。
那麼我們為什麼沒有見到,或者說市場上為什麼沒有「128位」的通用處理器呢?這有很多計算機體系結構的原因在裡面,容我一一說來:
首先,我們得定義這個「128位」是什麼。以傳統的POWER、x86和x64來說,處理器的位數是用通用寄存器的寬度來定義的,即32位處理器的通用寄存器是32位,64位處理器的寄存器是64位,那麼如果我們有了128位處理器,也應該一樣。但是,這麼做有必要麼?常規的整數運算是用不到這麼大的寄存器的,真正的大數運算也不會用這種方法來實現。而在現代的32位、64位處理器中,更重要的浮點運算所使用的浮點寄存器早已經是128位甚至256位了。所以128位通用寄存器在這裡沒什麼意義。
那麼就有人說,我們需要128位的定址能力。好吧,64位的定址能力是2^64位元組,大約是1.84467441 times; 10^19 位元組,如果你對這個科學計數法表示的數字沒什麼感覺,我用另外一種寫法:18.45 EB 也就是大約18200000 TB,如果說這個不夠用,那你需要的不是人類目前的硅晶元計算機,你需要求助於E.T.。
使用大地址空間有幾個額外的問題,尤其是對RISC處理器來說,會帶來致命的性能問題。很多用戶,尤其是初級的計算機用戶,並不知道RISC這四個字母下隱藏的計算機哲學,或者說藝術:所有的OP code都是定長。以POWER為例,訪問32位的常量地址,需要分兩次計算16位的地址,因為OP code中只有16bits來存放這樣的數據,64位則需要四個OP存放。而在CISC處理器中,地址可以直接編碼在指令里,導致指令明顯變長,比如32位的跳轉通常是5個位元組,而64位下面甚至需要15個位元組。這只是問題的開始:隨著使用的OP的增多,對CPU匯流排和cache的壓力也越來越大,原本一個時鐘周期能fetch兩條指令,現在可能一條都取不到;原本可以存放兩條、四條指令的cache空間,現在只能存放一條指令。
另一個原因是程序中的數據結構。學過計算機科學初級內容的人都知道,現代數據結構中最最最最最基本的要素是:指針。大多數關鍵的數據結構都離不開指針:鏈表、樹……,對於程序來說,從32位編譯成64位會大幅增加運行時的內存消耗,道理很簡單,指針本身變長了,存儲指針自身需要的空間增加了。變成128位是什麼樣呢?可想而知。同樣訪問內存中的數據需要更多的時間,因為數據本身變大了,假設一個結構體裡面有兩個指針,32位下編譯出來需要8個位元組,64位就需要16個位元組(假設4位元組對齊)。同理,cache面臨更大的壓力。
上面是軟體上的,或者說是理論上的,那麼我們來看看硬體上的問題。既設我們需要製造「128位」的通用處理器,有128位的地址匯流排,128位甚至256位的數據匯流排,那麼什麼樣的封裝能滿足要求呢?在現代處理器3~~4G的這個工作頻率上,安排這麼大量的匯流排連接,那麼保守估計需要1500~~2500個針腳的封裝才能穩定工作(需要大量的供電和接地針腳來平衡電流和改善信號質量),而且這麼高密度的,還有大電流,估計要12~24層布線,設計生產這樣的一塊PCB本身就是挑戰電子製造業,至於良品率和價格就不敢想了。
既然我們有了便宜的4核、8核處理器,為什麼要設計生產完全不可行,沒有任何工業和商業價值的「128位」處理器呢?所以,市場上沒有「128位」通用處理器。
我從另一個角度來回答一下這個問題:
首先要定義一下128位處理器:我認為完整的128位處理器應該是通用寄存器、地址線寬度都是128位的處理器,而不是現在這種帶有128位計算功能的處理器,否則像Intel的AVX寄存器都已經達到512位了,那它算不算是512位處理器?我認為不算。
我們如果需要用128位處理器,是用來做什麼?
做計算?現在已經有AVX這類能提供512位計算能力的寄存器了,對於通用寄存器來說,沒這個必要。況且haswell里AVX寄存器有32個,而通用寄存器才16個。
所以,唯一的可能性就是存儲空間不夠,地址線不夠長,我們需要128位地址線,我相信這是很多人爭論的關鍵點:是否需要128位地址線?
支持128位地址線的觀點說「未來是不斷發展的,我們肯定有一天要用上128位」。
但我認為,用不上。
原因嘛,除非人類不在地球上,否則,地球上容不下太多的128位處理器。
128位處理器最大定址是3*10^38,地球上總原子個數大概在10^48左右(可能有一定誤差),換句話說,如果地球上每個原子都用來存儲1位元組,那麼整個地球上的所有資源加起來,能造出的用滿128位的存儲器大概也就是10^10個,大概100億個,就算是有一兩個數量級的誤差,現在智能設備+電腦的總量也差不多有100億個了吧。況且人類還沒辦法做到1個原子保存一個位元組。
所以,除非把地球拆了,否則地球上的有限資源註定了真正的128位計算機不會大量普及。
至於256位處理器,還請有時間的人算算太陽系的資源夠不夠用。
總結一下,能處理128位甚至更多位數處理器是有的,但具備128位定址功能的處理器短時間內不會出現,出現了也不會普及,地球資源限制了它的存在,而如果廠商真把它造出來了,數量又非常少的話,製造它的意義就不大了。
----------------------------------------------------
評論里說只要地址線超過64位就有必要上128位,問題是現在64位地址線才用了48位,說超過64位的各位你們真算過64位地址線有多大嗎?
2^64 = 18446 74407 37095 51616,約合2*10^20,計算機中1EB大概相當於10^18,1ZB是10^21,1YB相當於10^24,如果用滿64位,假設是66位的話,那麼大概就是1ZB的樣子的,Google的數據中心據說總容量大概在1YB以內,按照內存:外存比例是1000倍的話差不多外存就是一個Google數據中心那麼大。
以上是給各位形象的描述一下64位用滿是什麼情況。
有了尺度再說小型化的問題,摩爾定律即將到達極限,做個不合理的假設,假設最小存儲單元可以做到1nm(10^-9米,實際上現在晶體管都比這個大),那麼要製作一個1ZB的內存,其晶元大小將達到100平米,這還不考慮布線的問題。
並且,再考慮一下普及和外存的問題,按說如果CPU地址線超過64位,假設是66位的話,能上128位的原因肯定是大規模普及,那麼設備產量應該是以億來計算的,1ZB*10^8,我相信現在地球上所有的存儲器加起來可能還沒有這麼多。況且這麼多設備再加上1000倍容量的外存(內存:外存比例是1000不算誇張吧),最終還是要考慮地球資源夠不夠的問題。
所以,在人類量子存儲等技術沒有突破之前,在有限的地球資源的限制下(地殼質量佔地球總質量比例很小,人類能開採的資源其實更少),要全球大規模普及超過64位的CPU,仍然是一件不太可能的事情。Belleve說的非常正確, 128位處理器做的出來, 用不上.
反對匿名用戶的答案, 處理器的應用與變革, 是由市場驅動的, 並不是想像力.
參考現在的處理器性能, 十年之內不會有128位通用處理器的需求.第一點, 處理器位寬的增加, 對數據/地址空間是指數級增長. 不需要128bit.
用主流桌面x86處理器舉例, 從32位到64位的過度, 主要原因是為了增大定址空間. 32位地址匯流排定址能力固定在了4G, AMD的第一代64位處理器採用了40位地址匯流排, 定址空間為1T. 增加8根線, 空間翻倍是256倍. 如果地址匯流排增加32根, 定址空間會翻倍2^32. 更_本_用_不_上!實際上, 即使是Intel最新的處理器, 地址匯流排也沒超過48根.第二點. 處理器位寬增加, 並不會帶來大幅性能提升.
64bit運算為什麼比32bit更有效率? 假設用戶需要算兩個32位整形數相乘, 對於32位cpu或64位cpu, 都需要計算1次.假設用戶需要算兩個64位整形數相乘, 對於32位cpu, 需要計算4次, 對於64位cpu僅需一次.對於絕大多數數據, 32位整形計算足矣, 如果用戶非要用64位整形數計算, 64位cpu才有優勢.如果有用戶非要用128位整形數計算, 128位cpu才有優勢, 這種情況我建議他重寫代碼.
浮點一會再說.第三點, 很多人證明過了, 64bit比32bit CPU跑分高, 所以128bit CPU更好?
64bit比32bit CPU跑分高是必然的, 因為CPU內部寄存器數量翻倍了. 但是, 寄存器翻倍帶來的性能提升也不過10~15%. 假設某128bit通用CPU比64bit CPU寄存器再多一倍, 也許性能提升僅會再增加3~5%. 這個不難解釋, 一個用戶, 帶一個手機覺得夠用, 帶兩個手機覺得富餘, 帶四個手機覺得和帶兩個手機差不多.第四點, 在某些測試上, 64bit比32bit CPU更慢, 128bit CPU同理.
因為數據寬度變大了, 先說同頻CPU, 假設結構差不多, Cache大小1024bit.那麼這個Cache可以存32個32bit數, 或者16個64bit數. 對於普通程序來說, 當然前者更快, 因為Cache容數多Miss少. 假設某128bit CPU的Cache仍是1024bit, 那麼它僅能存放8個數據拷貝, 不得不頻繁訪問內存, 降低效率.此外, 128bit CPU意味著更寬的內部匯流排, 這一點會制約CPU主頻上限, 不過對諸如Intel這樣的大廠不是大問題.第五點, 市面上的128bit CPU是怎麼運作.
市面上並沒有128bit的商業通用CPU. 而專用CPU, 或DSP的位寬有可能超過128bit, 但是它們基本不運行桌面操作系統.
樓上兩位知友提到了1999年Sony的CPU Emotion Engine , 這可以算是通用CPU了, 但是很遺憾它仍然是64位的. 知友"韋誠"的回答中提到了它整形數據是64bit, 雖然它支持128bit的load/store, 我相信它也是僅供SIMD使用的, 而且是32bit x 4的格式(注意沒有單個數據超過32bit). 而且, 這款CPU的僅是數據匯流排到了128bit (bus帶寬待考), 地址線我相信仍沒有超過32位. 要說是128bit CPU還很勉強. 另外, 由於它的主頻低(300MHz), 所以才敢上128bit的數據匯流排. 要知道同期的Pentium4主頻在2.5G以上.最後一點, 128bit及以上的真正意義是SIMD.
僅在CPU範圍討論. 假設CPU浮點位寬128bit, 那有兩種用法. 1. 數據精度更高. 2. 可以同時存多個低精度數據.第一項, 數據精度, IEEE 754規範, 浮點數可以到128位. 一般科學計算64位就夠了. 普通的x86 CPU也就支持80位, 也沒見科學家反應精度低, 所以, 與計算吞吐量(即Flops)相比, 精度需求本不大.第二項, SIMD將多個低精度數據打包使用, 這是現代通用CPU的浮點計算單元格式. 這個Intel在1997年的MMX指令集就實現了. 最新的AVX指令集位寬是256bit. 馬上會有512bit的新指令集誕生.因此, 如果說Sony Emotion Engine是128bit, 那Intel Core就是256bit.廢話了不少, 結論就是128bit的通用CPU造出來不難, 但用不上, 市場也不需要. 而現有的64bit CPU的浮點部分已經是256bit了, 可以滿足絕大多數科學計算的需求.
謝邀.啥叫128位啊,基本上有三個標準:數據匯流排,地址匯流排,通用寄存器
人類的數據需求是無限的,所以數據處理能力會按照技術能力,幾何級數增加。理論上的定址能力也會同樣增加,但內存實際需求確是有限的,不會無限增長。
所以早期數據是位數的瓶頸,現在呢,是地址需求沒那麼多,地址是瓶頸
早期cpu是集成電路集成度不夠,因此內部數據處理能力不強,內存數目卻可以根據實際需求設置,基本不受制約,地址匯流排常常比數據匯流排多。比如1980年左右的處理器,常見8條數據線,16條地址線; 16條數據線,20條地址線之類的情況。那時候,數據線和通用寄存器是cpu的瓶頸。誰少以誰為準,所以大家就以通用寄存器和數據匯流排數目為準評判cpu啦。
現在技術沒啥障礙啦,cpu處理128位甚至更多數據都可以很容易實現啊,但是內存並不需要幾何級數增長啊,64位百年內恐怕也用不到。很多處理器有了128條數據匯流排,但地址匯流排遠不到64條。未來cpu數據匯流排可以隨著技術進步不斷增加,但地址匯流排很多年不會超過64條啊。
這就是現在常見的64位處理器的情況啊,數據匯流排128條,但地址匯流排不超過64條,也就是滿足現在的需求的程度,就是40多條;內部的寄存器有64/128/256位。
以後肯定還會有更多的256條數據匯流排甚至512條數據匯流排的處理器出現。但是,地址匯流排,肯定還是不會超過64條。至於通用寄存器,如果地址匯流排不超過64條,那麼,內部起碼要保留相當一部分64位寄存器用於定址。那麼我們仍然會看到64/128/256/512不同寄存器並存的處理器。這個算多少位的呢?
按照現在認識,這些也只能算64位的處理器。----------更新----------之前一直沒回來看這個問題,才發現已經被踩到很下面了,上面 @Ricky Li 的答案反對我,我以為有什麼高見,結果說了一句
十年之內不會有128位通用處理器的需求
呵呵,這說明根本就沒有理解我的意思嘛
我反對的是什麼?是根本就不需要128位處理器這樣的觀點
我從來沒有說現在就需要128位,我也同意現在不應該上128位的處理器,這在我的原答案中都有提到,我的觀點是,也許10年,也許20年,甚至100年,但終究會需要128位處理器的,除非計算機體系結構有重大變化
另外,我什麼時候說處理器的應用與變革是靠想像力驅動的了?我的意思是市場終會有這個需求,雖然現在沒有,但至少不要一口咬定未來一定沒需求啊,然後在別人口中就變成靠想像力驅動了,佩服理解力,呵呵
----------原文----------
目前排名第一的答案我不是特別認同,尤其下面這段:18.45 EB 也就是大約18200000 TB,如果說這個不夠用,那你需要的不是人類目前的硅晶元計算機,你需要求助於E.T.。
這和比爾蓋茨當年的電腦只需要640K內存的觀點簡直異曲同工啊,這和手握1.44M軟盤的時代無法想像1T硬碟的存在簡直一模一樣啊
通篇很多觀點如果把64換成32,把128換成64,那麼在若干年前看也會感覺很有道理的,但是現在64位的普及大家也是可以看得到的
我覺得沒有128位的原因主要是目前64位還足夠使用,128位反倒增加了很多不必要的消耗以及成本,才暫時不需要 (那篇文章中說128位會導致很多消耗和成本增加,我是完全同意的,但64位對32位同樣也有成本增加,卻沒有阻止64位的普及,因為利大於弊)
但這不代表未來不需要128位,再過若干年,如果計算機體系結構沒有特別重大的變化,128位的需求簡直是一定的
不要被現狀束縛了你的想像因為大部分計算雙精度浮點夠用,剩下的一些科學計算雙精度不太夠但是湊合能用。不過將來如果硬體128位浮點數能很便宜的做出來,用處還是很多的。
舉兩個例子,比如算svd的時候小奇異值在目前的雙精度浮點下時常有問題,即使用jacobi svd之類穩定性更好的演算法。另外比如用pseudospectral法時候遇到kk exp(-ikr)這種就很容易丟失精度。長遠看有硬體128位浮點的話還是很有好處。
當然這裡說的128位是硬體浮點數位寬,和其他答案說的128位指針,128位寄存器不完全是一回事。用不著,位而已,你喜歡造多少都行啊,匯流排加寬就好了
怎麼會造不出來呢,13年前的ps2就是128位的
是真用不著,又不是位高就快,位是寬度不是速度首先做肯定是可以做的出來的,而且很久以前就可以造了。
比如2000年出的PS2的CPU就是128位的: - 128 bit Emotion Engine - 運作主頻:294.912 MHz - 16KB暫存內存RAM (SPRAM) - 8KB數據快取 - 16KB指令快取 - 主內存:32MB Direct Rambus DRAM - 主內存帶寬:3.2GB/s - 浮點運算效能:6.2GFLOPS - 整數運算單元:64-bit - 多媒體擴充指令:128-bit * 107個 - 通用暫存器:128-bit * 32個 - TLB (Translation-Lookaside Buffer): 48 double entries - 直接內存存取(DMA): 10 channels - 輔助處理器1: FPU - 輔助處理器2: VU0 - 向量處理器:VU1 - 製程:0.18微米 - 核心電壓:1.8伏特 - 耗電量:15W - 晶體管數:10.5 M - 晶元尺寸:240 mm^2 - 封裝:540 sockets, PBGA但是為什麼沒有普及呢?主要原因還是用不上,目前來說64位已經足夠了。以後的事誰也說不準……上面的答案都有道理,但科技會一直發展的,64bit 不見得一直夠用。很可能幾十年後128bit的處理器就成為主流了。。。
用不上,或者說買的人太少,導致成本高。如果所有的pc需要128位分分鐘就造出來了。
開玩笑地說,40排的算盤就差不多等於128位的處理器。要是需要,宋朝就有了。主要還是在通用的運算領域不需要。在很多專用領域應該有很多128位,256位的運算器。印象中全美達早就造出來過128位的CPU
只是目前還不需要那麼大的定址空間罷了,64位的地址空間目前還看不出來不夠使用的跡象。也許未來我們會需要128位的處理器。
推薦閱讀:
※為什麼網上的硬體圈子有種強烈的不認可低壓CPU(U結尾)的傾向?
※哪位大神可以幫忙分析一下i7 7700與i7 7700k的區別?
※AMD新公布的「線程撕裂者」Ryzen Threadripper處理器能否將Intel再次拉下神壇?
※i7 6700k和i7 5820k那個CPU更好?
※在 AMD 工作是怎樣的體驗?
TAG:中央處理器CPU |