newsence
來源篩選

How many registers does an x86-64 CPU have? (2020)

Hacker News

This Hacker News discussion delves into the number of registers available in an x86-64 CPU, exploring the nuances of general-purpose registers, segment registers, and other specialized register types.

newsence

x86-64 CPU 有多少個暫存器?

Hacker News
14 天前

AI 生成摘要

這篇 Hacker News 的討論深入探討了 x86-64 CPU 中可用的暫存器數量,探討了通用暫存器、段暫存器和其他專用暫存器類型的細微差別。

背景

這篇文章探討了 x86-64 架構中暫存器的數量與多樣性,指出這是一個比現代其他指令集架構(ISA)更為複雜的領域。作者透過定義明確的計數規則,將通用暫存器、子暫存器、特殊用途暫存器以及浮點數與 SIMD 暫存器進行分類統計,揭示了 x86-64 為了相容性與功能擴展所累積的龐大暫存器規模。

社群觀點

在 Hacker News 的討論中,社群成員針對暫存器數量的增加對效能與編譯器行為的影響展開了激烈的辯論。部分討論聚焦於 Intel 即將推出的新一代架構(如 Nova Lake)將通用暫存器(GPR)數量從 16 個增加到 32 個的影響。反對者認為,增加暫存器數量可能會導致函數調用時需要將更多暫存器內容推入堆疊(spilling),特別是在非葉函數中,這種記憶體往返開銷可能抵消暫存器增加帶來的收益。他們指出,雖然更多的暫存器能減少函數內部的局部變數溢出,但在遵循標準應用二進位介面(ABI)的情況下,保存與恢復暫存器的成本依然存在。

然而,多數資深開發者與編譯器專家持相反意見,認為 32 個暫存器是業界公認的黃金比例。他們指出 ARM Aarch64 與 IBM POWER 等架構早已證明 32 個 GPR 優於 16 個。支持者強調,現代編譯器具備強大的內聯(inlining)能力,能將許多函數調用消除,使更多暫存器能被有效利用以減少記憶體存取。此外,編譯器並非強制填滿所有暫存器,若溢出成本過高,優化器自然會選擇更經濟的分配策略。討論中也提到,x86-64 的暫存器並非完全對等,暫存器分配與指令選擇之間存在高度依賴,這使得增加暫存器數量在實作上比 RISC 架構更具挑戰性。

除了效能爭論,社群也觸及了硬體實作的細節。有留言提到,架構層面的暫存器數量並不等同於物理暫存器,現代 CPU 透過暫存器重新命名(Register Renaming)技術,在後端擁有數百個物理暫存器來支撐亂序執行。關於未來發展,討論者認為雖然 64 位元定址空間在可預見的未來已足夠使用,但 128 位元架構的討論仍具前瞻性,儘管目前 64 位元暫存器多數時間是透過向量指令(如 AVX-512)以 SIMD 形式運作,而非單純處理超大數值。

延伸閱讀

在討論過程中,參與者分享了數個具深度的技術資源。針對 x86 指令集的詳細編碼與操作,Felix Cloutier 的線上 x86 指令參考網站被視為權威工具。在學術與歷史層面,留言者推薦了 David W. Wall 於 1986 年發表的關於連結時期全域暫存器分配的研究,以及 Richard L. Sites 在 1979 年撰寫的經典論文《如何使用一千個暫存器》,這些文獻為理解大規模暫存器檔案的設計挑戰提供了重要的歷史脈絡。此外,針對 Intel 最新的 APX 擴展,討論中也提到了 REX2 預置碼與 EVEX 格式在增加暫存器定址能力上的技術細節。