題:
對於主流計算,鑑於當前和不久的將來的需求,64位寄存器大小的CPU有哪些實際優勢?
satur9nine
2019-11-17 06:45:28 UTC
view on stackexchange narkive permalink

我了解32位處理器的局限性之一是無法輕鬆解決超過4GiB的RAM,即使對於手機,平板電腦和筆記本電腦上的主流計算,這也是當今的需求。

與64位寄存器大小的體系結構相比,64位寄存器大小的體系結構還有哪些其他主流計算優勢?

請在回答中引用相關消息來源或提供詳細的推理。用2的冪表示的位數更好沒有技術上的依據。

當然,如果不考慮價格,那麼位數越多越好,我們顯然也無法預測遙遠的未來需求。

更寬的總線也許能夠更快地移動數據,但是總線大小並不一定總是與寄存器大小匹配嗎?也許由於物理限制,具有更多晶體管和更多線路的CPU可能會被迫以稍慢的時鐘速率運行?

使用48位,您可以尋址256TiB的RAM:至少在接下來的幾十年中有足夠的空間可用。通常,對於主流編程的大多數整數和十進制計算而言,似乎32位數字已經足夠大了,這使64位看起來很浪費。 64位應用程序最終會消耗更多的RAM,而處理器本身最終會在ALU,控制單元和總線中浪費大量晶體管,這些晶體管根本不需要。所有這些東西都佔用了額外的矽空間,這些空間可以用來簡單地使處理器更小,更便宜,或者可以以緩存或附加內核的形式更好地使用。

因為我們想要更高的性能。
總的可尋址內存似乎毫無意義,但是內存速度落後於處理器速度,而更寬的總線寬度意味著傳輸數據的周期更少。還有一個叫做雙精度浮點數的東西,儘管這可能只是循環邏輯。還請考慮從32位遷移到64位實際需要多長時間。您確實確實不需要遷移兩次,如果您知道自己處於從32位直接升級到64位的良好技術地位的情況下,也可能不需要遷移。變大或回家。
因為它是小數位數的下一個數字:0、1、2、4、8、16、32、64、128等
處理器的位數與它的可尋址存儲空間無關。例如,大多數8位處理器使用16位地址。該數字表示數據路徑的寬度。
因為在下一個十年進行另一次升級將是一件痛苦的事,所以最好使該步驟足夠大以持續一段時間。
這是兩個問題的合一-*為什麼32位不夠?*和*我們為什麼要使用64位?*
@SolarMike並不要求字(或字節)中的位數完全為2的冪。許多較舊的體系結構使用了很多奇怪的大小。
@leftaroundabout顯然就是為什麼放棄它們並將其留給歷史...
@DKNguyen:總線寬度與具有高速緩存的CPU上的寄存器寬度本質上無關。寄存器寬度對於ISA上的memcpy帶寬很重要,它不能提供更好的加載/存儲數據的方法,但是x86-64和AArch64都保證存在128位SIMD寄存器以及64位GP整數寄存器。32位Intel P5 Pentium保證64位對齊的加載/存儲是原子的(因為它具有64位數據總線和64位寬的緩存訪問權限),但這只有在x87 FPU上才能實現,直到後來的微體系結構添加了MMX和SSE,然後是後來的x86-64。
AWS現在提供24TiB RAM實例。到明年年底,256TiB還遠遠不夠。:-)
芯片設計人員實際上是Sith的學徒-他們相信2的規則(並擁有權力),並且永遠遵守!
@dan04向以下建議之一的張貼者提出建議,建議其比例相同...
-1
實際上x86_64使用48位地址空間。
通過使用一些符號位和“有效/無效/溢出/ zeo”位,10位用於指數以及50位精度,可以在線性系統建模中獲得約200dB的動態範圍。我喜歡;我使用線性系統工具來檢查Q == 1萬億XTAL振盪器中增益/相位要求的行為。具有64位數學運算。
為什麼要爬山?因為摩爾定律規定,每隔幾年會使晶體管的數量增加一倍(而不是1.5倍)。
@HSebastian:是的,但是並不能自動得出這些晶體管的最佳用途就是簡單地將數據路徑的寬度加倍。
十 答案:
Tom Carpenter
2019-11-17 06:58:54 UTC
view on stackexchange narkive permalink

通過48位,您可以尋址256TiB的RAM,還有很多可用空間

與地址空間(*)無關。

實際上,大多數64位台式機處理器都具有 48位地址總線。是的,沒有什麼比這更大的了。

對於大多數整數和十進制計算而言,通常32位數字似乎已經足夠大了

很多,但絕不是全部,也許不是大多數。許多計算(甚至在32位CPU上)最終都使用64位計算

最簡單的例子是Y2k38錯誤,它將在未來20年內咬死使用32位Unix時間戳的任何系統。

許多浮點數是雙精度(64位),因為單精度浮點的範圍非常有限。

64位處理器也仍然可以執行32位計算,並且實際上具有64位高速緩存允許將兩倍的32位值存儲在高速緩存中,從而有可能通過減少內存操作(高速緩存未命中)來提高性能。 )

支持高級SIMD樣式指令的現代64位處理器也可以同時執行多個32位運算,因此即使32位計算也可以受益。

那麼,為什麼處理器設計者選擇了這麼快就跳到64位?

其中的64位是數據總線。我們傾向於喜歡使用基值的兩倍的冪進行工作-在計算機中,這通常是8位字節。因此,您希望得到的2的冪是8位(1 x 8位),16位(2 x 8位),32位(4 x 8位)。因此,下一個邏輯步驟是64位(8 x 8位)。

48位數據總線的字節數為非2的冪,這使尋址操作變得更加有趣,因為數據不再以兩個多重邊界的良好冪對齊。這不是不可能,只是很少見。


(*)好,有點。

如果您選擇在64位OS中運行32位或64位應用程序,並且應用程序大小會影響可用內存的大小,並產生更多碎片,那麼性能提升可能不會很明顯。由於某些原因,我更喜歡在具有i8內核的8GB Win7x64上使用32位版本的Irfanview
您需要考慮32位產品和64位產品。64位提供了很多優點(更大的地址空間,更快的數學運算符...),但指針有一些沉重的開銷。這就是為什麼在Linux上創建x32 ABI來提供64位處理器但具有32位指針的某些優點的原因,特別是當您考慮cpu的緩存大小時
*具有64位寄存器高速緩存允許將兩倍多的32位值存儲在高速緩存中*什麼?寄存器不是緩存,它們是體系結構狀態的一部分。同樣,除非您在GP整數寄存器中執行SIMD,否則每個寄存器只有1個值。大多數ISA對於同一寄存器的高/低32位半部分沒有單獨的名稱。例如,在x86-64上,您可以選擇將32位EAX零擴展到64位RAX的“添加eax,ecx”指令,或執行64位加法的“添加rax,rcx”指令。您無法有效地在RAX的上半部分中保留一個單獨的數字。
如果您在談論實際的高速緩存(L1d / L2 /等),則它們不會隨著寄存器寬度的增加而免費增長!較寬的指針是不利的一面,使大量指針的數據結構佔用更多的緩存佔用空間和/或內存帶寬。這就是* ILP32 ABI存在的原因(64位模式下為32位指針),以及為什麼SPECint頂級結果經常使用這些ABI的原因。例如ARM ILP32或x86的Linux [x32 ABI](https://en.wikipedia.org/wiki/X32_ABI)。也就是說,在64位模式下運行可以獲得的緩存命中次數與32位模式一樣多,而不是更少。
SIMD寄存器寬度與GP整數寄存器寬度正交。即使在32位模式下,如果支持,x86 CPU仍可以使用AVX和AVX512。(x86傳統指令編碼廢話意味著32位模式只能使用8個而不是16個或32個向量寄存器,但是它們的* width *仍然是256或512位。在64位模式下擁有更多的寄存器只是x86的事情。,通常情況並非如此)。抑或是您正在談論在其通用整數寄存器中執行SIMD的64位CPU?有一些例如我認為MIPS和Alpha這樣做是為了代替單獨的體系結構寄存器。
地址總線的寬度與虛擬地址的寬度無關,擁有天文數字般大的虛擬地址空間具有很高的價值。它使您可以執行有效的ASLR,並且如果某些位是標記/著色位(請參閱ARM MTE等),則可以免費消除整個類的內存安全性錯誤。如果有大量這樣的位(想像一個128位的地址空間,其中只有48位左右才是有效的),它可以讓您**從不重用**釋放的地址,從而獲得更大的安全性。
@R ..:巨大的地址空間並不總是空閒的。因為您需要更多級別的頁表,所以它使頁面瀏覽速度變慢。而且,如果分配過於稀疏,則實際上必須存在更多的頁表基數樹。這是x86-64 CPU僅實現48位*虛擬*地址空間或57位(即將到來的(或最近的?)PML5擴展用於可選的第5級頁表,仍然是52位phy)的原因之一。但是,是的,物理地址和虛擬地址的寬度沒有連接,但是更廣泛的虛擬地址是更可取的,因此內核可以直接映射所有內容,並且仍然留有很多空間供用戶使用。
@Tom: Re:您的更新:正如我之前說的,緩存大小不會隨CPU位免費擴展。在32位或64位CPU中,32kiB緩存的成本相同。(特別是如果“ 32位” CPU已經具有FPU和/或SIMD單元,或者可以執行64位加載/存儲的加載/存儲對指令,則高速緩存訪問硬件必須那麼寬。)給定相同的緩存,32位值僅保持與以前相同的緩存命中率。構建兩倍大但速度一樣快的緩存是非常重要的,並且在使CPU為64位時並不是免費的。需要更大的編輯。
-1
@minix我希望我能闡明為什麼當我選擇快速精益Win7x64時,對於32位應用程序我遇到的無法解釋的“麻煩”問題更少了。但這就是為什麼我將32位應用程序用於Dropbox,Teamviewer,IRFANView,KODI和QT Webengine
Peter Green
2019-11-17 15:32:16 UTC
view on stackexchange narkive permalink

儘管有少數例外,但計算機行業已在很大程度上對8位字節進行了標準化*。

最好使字長為字節長的2的倍數。當總線系統需要將字節地址轉換為字地址時,不這樣做會導致地址轉換非常混亂。

也非常希望能夠在單個數據字中操作存儲器地址,尤其是在現代高度流水線化的CPU上。

也非常希望具有向後兼容性,這意味著32位模式。為您的系統添加處理“半個單詞”的支持相對容易,為“三分之二的單詞”添加支持會更加麻煩。

將這些因素放在一起,使內存地址空間超出32位限制的最合乎邏輯的方法是將數據字的大小擴展到64位。即使您不打算立即使用所有這些位進行內存尋址(許多64位系統的內存地址空間少於64位)。

*出於本文的目的,“字節”用於指代處理器可以尋址的最小數據單元,“字”用於指代主要整數數據路徑可以處理的最寬數據類型作為一個單元。

Agent_L
2019-11-17 16:59:19 UTC
view on stackexchange narkive permalink

您認為這很浪費,但是保存在一個地方通常意味著浪費在另一個地方。

在字長上節省幾個寄存器單元會浪費CPU週期來處理未對齊的值。運行新的全48位程序當然不會有問題,但是嘗試在48位CPU上運行舊的32位程序將是一場噩夢。您本可以節省的所有晶體管很可能會以專用的32位處理/翻譯單元的形式歸還利息。另一種選擇是打破向後兼容性,也就是“沒有人使用的CPU”。

這與殺死英特爾的64位Itanium的情況非常相似:作為一種全新的體系結構,它無法運行舊的32位代碼,而運行速度比AMD的x86粗略擴展(字長)大一倍。沒有人留下來看看英特爾這個勇敢的新世界是否最終會實現-過渡的成本使每個人都害怕。另一方面,AMD帶來了“更多的好東西”並看著我們:16年後,我們仍然留下了32位代碼的痕跡,而我們的64位CPU的運行速度比以往任何時候都快。

現在已經不是80了。 Ram和Register的空間現在並不稀缺,因此我們不再以“盡可能少”為目標。我們改為“盡可能實際地”射擊。 64位是最實用的:正如Tom所說,我們已經在32位CPU上運行了64位精度,但是恕我直言,主要賣點是輕鬆處理舊版。

在x86市場中,傳統追溯到IBM XT一直是不容忽視的力量。而且,由於一種架構擁有64種東西,因此沒有人能賣出更少的東西。那是行銷。客戶不了解到底是什麼,他們只知道越多越好。

user236378
2019-11-17 17:18:29 UTC
view on stackexchange narkive permalink

我開始在大型計算機上工作,該計算機上每個單詞的字寬為60位,雖然有多個12位字符(如小寫字母),但使用6位單位作為字符(10到一個單詞) 。地址和地址寄存器為18位。這是一個主要用於數字處理的系統:由於無法通過字符尋址內存,因此文本處理明顯笨拙。

那麼今天這種設置有什麼問題呢?今天的數據,無論好壞,幾乎都是按字節大小交換的。字節大小的數量用二進制地址尋址,並以2的冪為單位的扇區/塊/單位進行組織。儘管在非常有限的上下文中有特殊的指令尋址位,但是該標準是針對尋址字節的指令,包括僅適用於整個字的指令。即使在具有嚴格對齊要求的CPU上(儘管x86體系結構成員在這裡都相當寬鬆),內存地址也始終是字節地址(我記得一個TI圖形處理器,基本可尋址單元實際上是一個位,但這已經是一個奇怪的現象了)當時)

文件具有字節大小,並且所有內容均以2的冪為單位,實際數據總線傳輸是CPU字寬的倍數。將48位字放入該世界將是一場噩夢,因為您不僅需要將地址分成更大的總線寬度部分和一個字節的地址部分,還必須進行實際的6除以找出地址在較大的字寬中偏移(您不能真正期望獲得專門用於您的字寬選擇的存儲設備)。

簡而言之:在一個標準化的數據表示形式,字符集以及常用外圍單元和接口的世界中,使用“ 2的冪”以外的其他詞寬比“計算機鼠標”指的是囓齒類動物挖洞時更加禁止。放在打孔卡盒中,這對於長時間存儲數據具有重大危險。
CDC 6600,也許吧?
hotpaw2
2019-11-17 08:29:30 UTC
view on stackexchange narkive permalink

N64軟件開發人員發現,與使用32位MIPS ISA進行編譯相比,64位ISA代碼在實際代碼上的性能更好,因為您可以用更少的指令移動更多的數據並將更多的位存儲在快速寄存器空間中。

與其他一些非冪2寄存器和數據大小相比,64位ISA與現有的32位代碼向後兼容得多,這使得編程和移植庫更加容易。

R4200 MIPS處理器芯片的管芯尺寸僅增加了百分之幾(IIRC,不到10%)以支持64位而不是僅支持32位MIPS ISA。雙贏。

Robin Whittleton
2019-11-18 00:06:27 UTC
view on stackexchange narkive permalink

並不是所有的芯片設計人員都從32位直接跳到了64位。IBM的S / 38和更高版本的AS / 400系列服務器(現為 IBM System i)使用1970年代後期的48位CISC芯片,然後在90年代中期最終轉換為64位。/ p>

John Dallman
2019-11-18 02:13:39 UTC
view on stackexchange narkive permalink

另一個原因是軟件。將操作系統或以復雜方式管理內存的任何應用程序移植到不同的指針大小是一項艱鉅的工作。對於操作系統,所有設備驅動程序也往往必須進行修訂。

軟件公司不希望這樣做的頻率太高;其中一些在1990年代開始從32位移植到64位,並認為從2019年起32位已過時;其他人才剛剛開始。這取決於它們所服務的市場。

如果歷史上在1992年(DEC Alpha)和2005年(英特爾)之間引入64位體系結構的所有供應商都選擇了48位,那麼它可能已經成立。但是,到現在為止,將來它已經太接近其舒適性極限,而64位將開始出現。

如果在1990年代同時提供64位和48位體系結構,那麼有遠見的軟件公司會忽略48位,而將注意力集中在64位體系結構上。曾經採用48位技術的公司現在將開始第二個移植週期,而第一個移植週期將涉及非二乘冪指針大小的複雜性,他們將對此感到非常遺憾。

硬件供應商可以在1990年代看到這種情況的輪廓,並決定採用可以持續更長時間的方法。

我認為OP的問題更多是“為什麼所有處理器設計人員都不使用48位?”(與您假設的相反,在48位和64位之間會有一個分叉)。
@JBentley:這是什麼?
Anthony X
2019-11-18 04:35:11 UTC
view on stackexchange narkive permalink

使用64位而不是32位的兩個原因:

  1. 雙精度浮點數佔用64位(數學實際上是使用80位執行的,但這是另一回事)。64位的機器字大小允許一次操作即可移動這些值。
  2. 塊複製操作越快,數據總線越寬,因為您一次要移動更多數據。這使得16位計算機優於8位,而32位計算機優於16位。
  3. ol>

    在將來的某個時候,64位計算機可能會讓位給128位,但是對於通用處理器來說,好處還不夠吸引人,儘管在諸如GPU之類的專用處理器中已經可以看到。/ p>

    對於32到64而不是48,在基於二進制的計算機中以2的冪工作總是更方便(並且通常更高效)。這與物理地址大小無關,儘管地址大小/可尋址內存空間大小是一個促成因素。

user236390
2019-11-17 22:22:52 UTC
view on stackexchange narkive permalink

實際上,如果我們談論的是AMD借助x86-64躍升至64位,這從根本上改變了該平台,那基本上是使Athlon CPU比Intel芯片更強大,從而使其在市場上具有競爭優勢。英特爾在踢屁股。這迫使行業領導者英特爾成為追隨者。但是,必須與Microsoft協作完成此操作-否則,CPU將無法運行,因為它將無法運行Windows。

英特爾確實擁有IA-64,但我認為他們認為這種功能和性能僅適用於公司客戶,而不適用於普通大眾(而且價格太昂貴),並且不適用於x86。但是,如果不是AMD64,英特爾今天仍將生產32位CPU(可能具有一些64位功能作為營銷策略)。

但是,如果您曾經使用SqlServer處理大型photoshop圖像,大型Excel電子表格和數百萬條記錄,那麼您將學到欣賞64位系統的功能。

我認為英特爾假設他們最終將能夠以較小的晶體管尺寸工藝製造足夠便宜的零售IA-64。也許讓整個行業重新編譯IA-64的所有內容,最後擺脫大多數代碼對x86的沉重負擔。同樣,AMD64相當“保守”:AMD可以改進一些小事情(例如瘋狂的CISC語義,用於可變計數移位,或者“ setcc r / m8”可以是“ r32 / m8”),但事實並非如此。據推測,他們希望盡可能多地共享解碼器晶體管,以防AMD64並未真正流行起來,並且對於32位代碼而言,它變得“沉重”。
無論如何,這段歷史都沒有回答為什麼是64而不是48的問題。
Geoff Griswald
2019-11-18 20:47:03 UTC
view on stackexchange narkive permalink

主要是關於營銷。 AMD是第一個發布64位架構的公司,該架構使他們可以聲稱比Intel優越。而Intel爭先恐後地向市場發布自己的,匆忙的,有缺陷的64位芯片,這些芯片的性能比AMD差了幾年。

這兩個時期-首先,當英特爾沒有在市場上出售64位芯片時,AMD可以吹噓自己是最先進的芯片,其次是當英特爾第一次刺穿時他們可以吹噓自己是市場上最快的芯片。使用64位芯片的速度不是很快-允許AMD在2003年/ 2004年發生64位轉換時在銷售和性能方面取得領先。

當時,幾乎沒有軟件可以利用64位提供的額外功能,直到今天,大多數應用程序仍以“以防萬一”的情況在32位舊模式下運行。

正如您已經提到的,除了支持更大的內存池外,由於64位提供了擴展的地址空間,芯片本身也可以更快地執行某些內部計算,例如,您可以在一條64位指令中組合12個8位值芯片,而32位芯片只能真正結合6。但是,這種性能提升至多是微不足道的,並且主要用於營銷目的,而不是任何實際性能提升。

關於為什麼不是64而不是48的兩個原因。一個是市場營銷,64比48高,到目前為止,消費者係統的“位數”每次翻倍,即8、16、32,該序列中的下一個邏輯數字是64。消費者會(錯誤地)認為a 64位CPU的性能是32位CPU的兩倍,這促使它們比提供48位CPU時更容易升級。 第二個原因是更實際的,一個64位寄存器的大小是32位的兩倍,因此從理論上講,將代碼移植到64位上要比使用48位更容易。

除了寄存器大小的爭論外,在對全球計算基礎架構實施批量更改時,“變大還是變大”在邏輯上是合乎邏輯的,以免不得不過於頻繁地做這種可怕的事情。到目前為止,我們還不需要128位處理器,但是大約現在我們可能會從48位更新為64位,因此看起來是個不錯的選擇。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...