處理器運算位數

wallimn發表於2011-08-29
轉自:http://publish.it168.com/cword/3401.shtml

CPU的位寬對CPU效能的影響絕不亞於主頻。位寬是指微處理器一次執行指令的資料頻寬。處理器的定址位寬增長很快,業界已使用過4、8、16位定址再到目前主流的32位,而64位定址浮點運算已經逐步成為CPU的主流產品。
受虛擬和實際記憶體尺寸的限制,目前主流的32位CPU在效能執行模式方面存在一個嚴重的缺陷:當面臨大量的資料流時,32位的暫存器(注:為了處理資料,暫時儲存結果,或者做間接定址等等動作,每個處理器都具備一些內建的記憶體,這些能夠在不延遲的狀態下存取的記憶體就稱為“暫存器”,每個暫存器的大小都相同)和指令集不能及時進行相應的處理運算。
32位CPU一次只能處理32位,也就是4個位元組的資料;而64位CPU一次就能處理64位即8個位元組的資料。如果我們將總長128位的指令分別按照16位、32位、64位為單位進行編輯的話:舊的16位CPU(如Intel 80286 CPU)需要8個指令,32位的CPU需要4個指令,而64位CPU則只要兩個指令。顯然,在工作頻率相同的情況下,64位CPU的處理速度比16位、32位的更快。

[align=center]
[img]http://dl.iteye.com/upload/attachment/545661/332b28bd-6164-3686-9282-77d785f47762.jpg[/img]
[/align]

位寬原理示意圖


可以比較一下圖中的32位與64位CPU,64位的程式碼流的數量沒有改變,其寬度隨著指令程式碼的寬度而變化;而資料流的寬度則增加了一倍。雖然理論上在一個時鐘週期內64位系統處理的資料量是32位系統的兩倍,但理論和現實通常都是有差距的。
 要注意的是,CPU不只需要位寬夠寬的暫存器,也需要足夠數量的暫存器,以確保大量資料處理。因此為了容納更多的資料,暫存器和內部資料通道也必須加倍,因此在64位CPU中的暫存器位數一般是32位CPU中的兩倍。
 不過,雖然暫存器位數增加了,但正在執行指令的指令暫存器卻都是一樣的,即資料流加倍而指令流不變。此外,增加資料位數還可以擴大動態範圍。在通常使用的十進位制中,只能得到最多10個整數(一位數情況下),這是因為0~9中只有10個不同的符號來表示相應的意思,想要表示10以上的數就需要增加一位數,兩位數(00-99)才可以表示100個數。
 可以得出十進位制的動態範圍的計算公式:DR=10n (n表示數字位數)。在二進位制體系中,相應的我們可以得到公式:DR=2n,那麼目前使用的32位就可以達到232=4.3×109,升級到64位之後,就可以達到264=1.8×1019。動態範圍擴大了43億倍。
提示:擴大動態範圍可以在一定程度上提高暫存器中資料的準確性。比如,當使用32位系統處理氣象模擬運算任務時,當處理的資料超過32位所能提供的最大動態範圍時,系統就會出現諸如Overflow(超過了最大正整數)或Underflow(低於最小的負整數)的錯誤提示,這樣暫存器中的資料就無法保證準確。
 除了運算能力之外,與32位CPU相比,64位CPU的優勢還體現在系統對記憶體的控制上。由於地址使用的是特殊的整數,而64位CPU的一個ALU(算術邏輯運算器)和暫存器可以處理更大的整數,也就是更大的地址。
 傳統32位CPU的定址空間最大為4GB,使得很多需要大容量記憶體的大規模的資料處理程式在這時都會顯得捉襟見肘,形成了執行效率的瓶頸。而64位的處理器在理論上則可以達到1800萬個TB(1TB=1024GB),將能夠徹底解決32位計算系統所遇到的瓶頸現象。
 當然64位定址空間也有一定的缺點:記憶體地址值隨著位數的增加而變為原來的兩倍,這樣記憶體地址將在快取中佔用更多的空間,其他有用的資料就無法載入快取,從而引起了整體效能一定程度的下降。

相關文章