K8神威終于顯露!純64位應(yīng)用全球首測
通常我們把需要CPU進行不同處理的單個數(shù)據(jù)稱為標(biāo)量數(shù)據(jù)(Scala Data)。標(biāo)量數(shù)據(jù)既可以是整數(shù)數(shù)據(jù),也可以是浮點數(shù)據(jù)。其中整數(shù)標(biāo)量數(shù)據(jù)的存放區(qū)一般為通用寄存器(GPR),浮點標(biāo)量數(shù)據(jù)的存放區(qū)一般為浮點寄存器(FPR)。
與標(biāo)量數(shù)據(jù)相對的是矢量數(shù)據(jù)(Vector Data)。所謂矢量數(shù)據(jù)就是指一列需要由處理器作相同處理的數(shù)據(jù)集合。比如處理器在做MP3編碼的過程中,需要對內(nèi)存中的音頻文件里的各字節(jié)數(shù)據(jù)作相同的MP3編碼操作。那么通常使用MMX或SSE這類單指令多數(shù)據(jù)流(SIMD)指令,將數(shù)個字節(jié)打包為一組矢量數(shù)據(jù),存放在MMX或SSE寄存器中,再送往相應(yīng)的功能單元進行統(tǒng)一操作。
和標(biāo)量數(shù)據(jù)一樣,這些矢量數(shù)據(jù)既可以是整數(shù)數(shù)據(jù),也可以是浮點數(shù)據(jù)。矢量數(shù)據(jù)以封包的形式批量存放在MMX(對于使用MMX、3DNow!進行操作的數(shù)據(jù)而言)和XMM(對于使用SSE、SSE2進行操作的數(shù)據(jù)而言)寄存器中。
通過下面的圖,我們可以更好地了解標(biāo)量數(shù)據(jù)和矢量數(shù)據(jù)的區(qū)別:
標(biāo)量與矢量數(shù)據(jù)
以下,我們整理了標(biāo)量數(shù)據(jù)和矢量數(shù)據(jù)在X86-32位處理器以及AMD的X86-64處理器中所用寄存器的具體區(qū)別如下表:
實際上,MMX和XMM通過寄存器映射的方法,也可以參與標(biāo)量浮點數(shù)據(jù)的存儲。同時數(shù)據(jù)類型也遠不止整數(shù)、浮點這兩類基本數(shù)據(jù)類型,還包括有指令指針數(shù)據(jù)、BCD數(shù)據(jù),位數(shù)據(jù)等。要把這些情況一一說清,顯然不是一兩篇文章能解決得了問題的。
幸好,這些省略的部分與我們的結(jié)論并沒有影響,因此我們敘述時使用了簡化的措施。需要更詳細完整的資料,您可以參考Intel的IA32以及AMD的X86-64架構(gòu)編程指導(dǎo)書。
從上表我們可以看見,K8的64位擴展部分似乎僅對于整數(shù)、地址數(shù)據(jù)有效。對浮點和向量數(shù)據(jù)則仍然保持原樣。
經(jīng)過上面的分析,我們似乎可以得出這樣的結(jié)論,那就是:我們能從K8向64位的擴展所獲得的好處,只不過是可以在同樣一條指令中,處理更大數(shù)值的整數(shù)數(shù)值以及管理空間更大的內(nèi)存區(qū)域而已。而在32位的情況下,由于通用寄存器只能容納最大32位的數(shù)據(jù),因此顯然要花費更多條指令對尺寸超過32位的數(shù)據(jù)進行處理。
這種改進對服務(wù)器、科學(xué)計算這樣的領(lǐng)域雖然具有一定的意義,但顯然并不是普通家用環(huán)境急需的改進。試問在近期普通應(yīng)用中,有多少情況下會用到超過232這樣大的整數(shù)數(shù)值和超過4GB的內(nèi)存空間呢?
然而,如果你因此低估了K8和X86-64指令集的實力,那就大錯特錯了。
關(guān)注我們
