輕松讀懂移動處理器 CPU微架構(gòu)全解析
泡泡網(wǎng)CPU頻道1月26日 原文標題為《輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版》,對不起,你被標題欺騙了,實際上對許多讀者來說要讀懂本文并不是那么輕松:p
隨著半導(dǎo)體工藝的日趨先進,智能手機(Smartphone 或者 Superphone)、平板電腦(Tablet 或者 Pad)已經(jīng)成為許多網(wǎng)友最常使用、最多關(guān)注、更新最快的電子消費產(chǎn)品,高度便攜性是這類產(chǎn)品的最關(guān)鍵成功原因。
所謂便攜性自然是指產(chǎn)品必須足夠輕便而且需要有足夠的續(xù)航能力,因此這就要求產(chǎn)品的原件必須足夠省電,只有這樣才能減少散熱和電池體積這兩個最占體積和重量的問題。
要達到這個目標,肯定要做功能和性能上的妥協(xié),至少相對個頭更大的筆記本電腦、臺式機而言,像降低吞吐率或者增加時延,從實測性能而言,目前智能手機或者平板電腦的 CPU、圖形處理器性能基本上相當(dāng)于 6 到 10 年前臺式電腦的水準。
舉個簡單的例子,在俄羅斯網(wǎng)站 ixbt 的討論區(qū)上,有這樣的一條帖子,一位名為 ssvb 的網(wǎng)友采用 origenboard.org 的一片 Samsung Exynos 4210 開發(fā)板(配有 Exynos 4210 處理器具備兩個 ARM Cortex-A9 處理器內(nèi)核)跑出來的 High Performance Linpack (HPL)性能是 1.307 GFLOPS,同貼中還有 Intel Atom N450(Pineview 架構(gòu),45nm,單核) 1.66GHz 的測試結(jié)果——0.944 GFLOPS 以及 Cortex-A15 1.7GHz 雙核 HPL 為 4.3 GFLOPS。
NVIDIA 官網(wǎng)上的一份 SC011 文件也表明 Tegra 2(ARM Cortex-A9 雙核 1GHz,理論雙精度浮點性能 2GFLOPS)的 HPL 性能為 1.15GFLOPS( 57% 效率,200MFLOPS/瓦) 。
這都是一個什么概念?我曾經(jīng)在 06 年的時候用 Pentium D 820 2.8GHz 跑出來的 HPL 性能為 10.12 GFLOPS,Athlon64X2 2.6GHz 為 9.158 GFLOPS。
那么現(xiàn)在臺式機的 HPL 性能狀況如何?
在去年我用 Core i7 2600K 3.4GHz 配合未支持 AVX 指令的 GotoBLAS(數(shù)學(xué)庫)上得到的 HPL 性能為 51.18 GFLOPS 左右,后來又用支持 AVX 的 OpenBLAS(原 GotoBLAS 開發(fā)者停止更新后的其中一個后續(xù)開源社區(qū)版)得出的 HPL 性能為 99.38 GFLOPS,到 2013 年支持 AVX2 指令集的 Haswell 架構(gòu)出來后,這個測試結(jié)果應(yīng)該還能接近再翻番,達到 200 GFLOPS 級別。
也許你會說手機、平板要雙精度干啥呢?請不要忘記在 30 年前的 x86 處理器根本沒有集成任何硬件浮點單元,現(xiàn)在的情況又如何?曾經(jīng)做出號稱最強 x87 協(xié)處理器的 Cyrix 后來一頭扎進整數(shù)為王的產(chǎn)品策略后現(xiàn)在影都沒了。
“干啥”這個問題往往是硬件具備并達到一定性能條件后就會有答案的,臺式機上的性能測試軟件和方案會隨著手機、平板性能日益強大而變得在這類設(shè)備上運行也理所應(yīng)當(dāng),除了上面說的 HPL 外,各類 PC 上流行的測試工具例如 SPEC CPU20xx、3DMark 等也會是如此。
傳統(tǒng)的 CPU 性能測試的確不能完全適用于手機、平板的 SoC 芯片(人們把可以在移動操作系統(tǒng)上跑應(yīng)用軟件的 SOC 稱作應(yīng)用處理器,簡稱 AP),但是請注意我說這句話是因為 SoC 并不僅僅有 CPU,還有 GPU、音視頻編解碼器、存儲控制器、非易失性存儲單元、數(shù)模/模數(shù)轉(zhuǎn)換器以及各種輸入輸出周邊等,這使得我們要單純評價一款 SoC 是否非常好的的時候可能會感到頗為傷神。
話雖如此,不過總的來說,SoC 中和性能最密切相關(guān)的依然是 CPU、GPU,因為智能設(shè)備里幾乎所有程序的運行都必須依仗兩者來執(zhí)行,與用戶的使用感受有直接關(guān)系(請注意,我們這里說的只是指 SoC 芯片中,而非手機或者平板電腦整體)。因此,縱然手機、平板處理器型號各異并且內(nèi)中千頭萬緒,我們還是應(yīng)該從大家最關(guān)心的 CPU、GPU 著手來了解。
現(xiàn)在情況簡單多了,按照 ISA(指令集架構(gòu))劃分,因為目前的手機、平板 CPU 無非是 ARM、Intel/AMD 兩大陣營,潛在的還有 MIPS,不過目前 MIPS 似乎在這個領(lǐng)域還成不了氣候,更像是一個備胎。
如果你對計算機科學(xué)還不是很了解的話,對 ISA 這個詞可能也不會很了解,雖然它經(jīng)常出現(xiàn)在一些時髦的技術(shù)文章中。
電腦顯然并不能直接明白 C、Java、Basic 這樣的高級語言(雖然有人嘗試過開發(fā)高級語言處理器,但是無不失敗告終),搭建在高級語言和 CPU 本機代碼之間的就是 ISA。
ISA 的全稱是 instruction set architecture,中文就是指令集架構(gòu),有時候直接稱呼為架構(gòu)(architecture),是指程序員實際“可見”的指令集,包含了程序員編寫一個能正確運行的二進制機器語言程序的所有信息,涉及到指令、 I/O 設(shè)備等。例如 Intel 的 IA-32、Intel 64(曾經(jīng)名為 IA32e、EM64T 等);ARM 的 ARMv7、ARMv8 等等。
這里的 IA32、Intel 64 或者 ARMv7、ARMv8 其實是指各自指令集架構(gòu)的不同版本,有時候我們嫌啰嗦,所以把前兩者統(tǒng)稱 x86,后兩者統(tǒng)稱 ARM。
將 ISA 變成真正可以使用的實物需要經(jīng)過“實現(xiàn)”,它包括兩個層面:組成和硬件。
組成是從計算機設(shè)計的高階層面而言,例如:存儲系統(tǒng)、存儲互連接、CPU(包括算術(shù)、邏輯分支、數(shù)據(jù)傳輸?shù)膶崿F(xiàn))設(shè)計,有時候“組成”又被稱作微架構(gòu)(microarchitecture),英特爾 Nehalem、NVIDIA Kepler、ARM Cotrex-A57 都可以屬于各自某系列芯片的微架構(gòu),其中 Kepler 的 ISA 是 CUDA PTX 和 Cortex-A57 的 ISA 屬于 ARMv8。
硬件通常是指電腦的規(guī)格,包括具體的邏輯設(shè)計、封裝技術(shù),同一系列的產(chǎn)品可能有相同的 ISA、近乎一樣的微架構(gòu),但是存在某些具體規(guī)格的差別,例如 NVIDIA Tegra 3,有 AP30、AP33、T30、T33、T30S、T33S、T30SL 等具體的型號,它們都屬于 Tegra 3 微架構(gòu),但是頻率規(guī)格、內(nèi)存規(guī)格等地方都有差別。
而 GPU 方面則復(fù)雜一些,有 PowerVR、高通、NVIDIA、ARM、Intel 等等,其中使用最廣泛的就是 PowerVR,這得益于 PowerVR 10年前就決定全面切換到移動設(shè)備上,鋪橋搭路的功夫很扎實,而 NVIDIA 和 Intel 的商業(yè)模型都是只用于自家產(chǎn)品(當(dāng)然 NVIDIA 也曾經(jīng)在游戲機領(lǐng)域做過 RSX 這樣的 IP core 授權(quán))的,所以目前未能在其他 SoC 上看到。
下面的表格給出了這兩年來比較熱門的手機或者平板電腦 ARM 處理器,它們基本上都被應(yīng)用于各公司的旗艦級產(chǎn)品中。
| 2011/2013 SoC 對比表 | |||||
| SoC | 制程 | CPU | GPU | 內(nèi)存總線 | 發(fā)布時間 |
| Apple A5 | 45nm/32nm | 2 x ARM Cortex A9 w/ MPE @ 1GHz | PowerVR SGX 543MP2 | 2 x 32-bit LPDDR2 | 2011-10-4 |
| Apple A5X | 45nm | 2 x ARM Cortex A9 w/ MPE @ 1GHz | PowerVR SGX 543MP4 | 4 x 32-bit LPDDR2 | 2012-3-16 |
| Apple A6 | 32nm | 2 x Apple Swift @ 1.3GHz | PowerVR SGX 543MP3 | 2 x 32-bit LPDDR2 | 2012-9-12 |
| Apple A6X | 32nm | 2 x Apple Swift @ 1.4GHz | PowerVR SGX 554MP4 | 4 x 32-bit LPDDR2 | 2012-10-23 |
| NVIDIA Tegra 2 | 40nm | 2 x ARM Cortex A9 @ 1GHz | ULV GeForce T2 | 1 x 32-bit LPDDR2 | 2010-1-8 |
| NVIDIA Tegra 3/Kal-El | 40nm | 4 x ARM Cortex A9 w/ MPE @ ~1.3GHz | ULV GeForce T3 | 1 x 32-bit LPDDR2 | 2011-11-8 |
| NVIDIA Tegra 4/Wayne | 28nm | 4 x ARM Cortex A15MPCore w/MPE | ULV GeForce T4 | 2 x 32-bit LPDDR2 | 2012-1 |
| Samsung Exynos 4210 | 45nm | 2 x ARM Cortex A9 w/ MPE @ 1.2GHz | ARM Mali-400 MP4 | 2 x 32-bit LPDDR2 | 2011-2-10 |
| Samsung Exynos 4212 | 32nm | 2 x ARM Cortex A9 w/ MPE @ 1.5GHz | ARM Mali-400 MP4 | 2 x 32-bit LPDDR2 | 2011-10-1 |
| Samsung Exynos 5250 | 32nm | 2 x ARM Cortex A15MPcore w/ MPE @ 1.7GHz | ARM Mali-604 | 2 x 32-bit LPDDR2 | 2011-11-30 |
| Qualcomm MSM8060/8260/8660 | 45nm | 2 x Scorpion @ 1.5GHz | Adreno 220 | 1 x 32-bit LPDDR2* | 2011-2-10 |
| Qualcomm MSM8960 | 28nm | 2 x Krait @ 1.5GHz | Adreno 225 | 2 x 32-bit LPDDR2 | 2011-2-14 |
| Qualcomm MSM8960T | 28nm | 2 x Krait @ 1.7GHz | Adreno 320 | 2 x 32-bit LPDDR2 | 2012-2-27 |
| Qualcomm APQ8064 | 28nm | 4 x Krait @ 1.7GHz | Adreno 320 | 2 x 32-bit LPDDR2 | 2011-2-14 |
它們都屬于 ARMv7 架構(gòu),架構(gòu)寄存器數(shù)量為 16 個,其中 Tegra 2/3、Exynos、A5/A5X 的 CPU 核心是 Cortex A9 或者 Coretx A15,都是來自于 ARM 的 IP core 授權(quán),而 A6/A6X 的 Swift 和高通的 Scorpion/Krait 則分別是蘋果和高通獲得 ARM 架構(gòu)授權(quán)后而各自自行開發(fā)的。
眾所周知,IP core 的全稱是 Intellectual Proerty core,意即知識產(chǎn)權(quán)內(nèi)核,是目前各種嵌入式應(yīng)用、個人智能消費類設(shè)備中最為常見技術(shù)類型,數(shù)十億計的產(chǎn)品都采用了來自 ARM、MIPS 的 IP core。IP core 被設(shè)計成可以和芯片中其他邏輯單元(例如視頻編解碼器、I/O 界面、內(nèi)存界面)協(xié)同運作形成一枚可以支持特定應(yīng)用的處理器。
IP core 分為兩類:硬核(hard core......不要會錯意了)和軟核(soft core)。硬核是針對特定半導(dǎo)體廠商而優(yōu)化的,對外人來說是一個提供了外部界面、不修改的“黑盒子”,獲得授權(quán)的廠商通常只能對核外的邏輯參數(shù)進行修改,例如 L2 cache 大小,但是 IP core 本身不可修改。而軟核的設(shè)計代碼則是可以針對不同半導(dǎo)體廠商做編譯和修改,當(dāng)然這要求設(shè)計廠商具備強大的研發(fā)實力和經(jīng)驗,因為現(xiàn)在的 IP core 相當(dāng)復(fù)雜。
簡而言之而言,硬核的性能更高、占用管芯面積更小,而軟核則可以讓不同廠商作進一步的修改。
ISA 的“實現(xiàn)”需要借助各種微架構(gòu),現(xiàn)在的處理器微架構(gòu)基本上涉及以下部分:
流水線化
多核、多線程
SIMD 向量
存儲系統(tǒng)分層結(jié)構(gòu)
流水線
早期一些采用非常簡單的指令集(注意,我們說的不是 RISC)的電腦是采用單周期設(shè)計的,取指、解碼、執(zhí)行、寫回都是放在同一個拍(周期)內(nèi)順序完成,此時的 CPI(每指令周期數(shù))基本上是 1,但是這樣設(shè)計的效率很低:當(dāng)取指的時候,其余工位都只能瞎瞪眼等開飯,這樣的設(shè)計也被稱作非流水線化執(zhí)行。

上:非流水線化(順序化)執(zhí)行
下:流水線化執(zhí)行
流水線化則是實現(xiàn)各個工位不間斷執(zhí)行各自的任務(wù),例如同樣的四工位設(shè)計,指令拾取無需等待下一工位完成就進行下一條指令的拾取,其余工位亦然。
世界上第一臺采用流水線化指令執(zhí)行的電腦為 1961 年的 IBM Stretch 或者說 IBM 7030,具備四級流水線工位,它同時也是 IBM 第一臺晶體管化電腦。
這樣原本四工位非流水線的一個周期是 800 個皮秒的話,在流水線設(shè)計的處理器上,雖然同樣的指令完成時間依然是 800 皮秒,但是第二條指令則可能只需要在第一條指令完成時間加 200 皮秒即第 1000 皮秒就能完成,而非流水線設(shè)計則需要第 1600 皮秒才能完成。

常見的五周期(FDEMW)流水線形式,對同步處理器來說 Latch 之間為一拍(周期)
對 Pentium 4 這類異步處理器來說,個別工位(simple ALU)頻率為雙倍即 1/2 拍
RISC 指令集具備指令編碼格式統(tǒng)一、等長的特點,在流水線設(shè)計設(shè)計上有得天獨厚的優(yōu)勢,這樣可以使得流水線工位設(shè)計相對于指令編碼格式不統(tǒng)一、非等長的 CISC(例如 x86 的指令長度為 1 個字節(jié)到 17 個字節(jié)不等)來說顯得更容易。
x86 可能需要將一些工位拆開(這意味著流水線工位更多或者流水線長度更深),例如英特爾的第一款流水線化處理器——486 的指令解碼就是拆成兩個工位。
流水線設(shè)計可以讓指令完成時間更短(理論上受限于流水線執(zhí)行時間最長的工位),因此將一些工位再拆開的話,雖然依然是每個周期完成一條指令,但是“周期”更短意味著指令吞吐時間進一步縮短,每秒能跑出來的指令數(shù)更多,這就是超級流水線的初衷。
| 微架構(gòu) (Microarchitecture) |
流水線工位數(shù) (Pipeline stages) |
|---|---|
| Sony Cell PPU | 23 |
| IBM PowerPC 7 | 17 |
| IBM Xenon | 19 |
| AMD Athlon | 10 |
| AMD Athlon XP | 11 |
| AMD Athlon64 | 12 |
| AMD Phenom | 12 |
| AMD Opteron | 15 |
| ARM7TDMI(-S) | 3 |
| ARM7EJ-S | 5 |
| ARM810 | 5 |
| ARM9TDMI | 5 |
| ARM1020E | 6 |
| XScale PXA210/PXA250 | 7 |
| ARM1136J(F)-S | 8 |
| ARM1156T2(F)-S | 9 |
| ARM Cortex-A5 | 8 |
| ARM Cortex-A8 | 13 |
| AVR32 AP7 | 7 |
| AVR32 UC3 | 3 |
| DLX | 5 |
| Intel P5 (Pentium) | 5 |
| Intel P6 (Pentium Pro) | 14 |
| Intel P6 (Pentium III) | 10 |
| Intel NetBurst (Willamette) | 20 |
| Intel NetBurst (Northwood) | 20 |
| Intel NetBurst (Prescott) | 31 |
| Intel NetBurst (Cedar Mill) | 31 |
| Intel Core | 14 |
| Intel Atom | 16 |
| LatticeMico32 | 6 |
| R4000 | 8 |
| StrongARM SA-110 | 5 |
| SuperH SH2 | 5 |
| SuperH SH2A | 5 |
| SuperH SH4 | 5 |
| SuperH SH4A | 7 |
| UltraSPARC | 9 |
| UltraSPARC T1 | 6 |
| UltraSPARC T2 | 8 |
| WinChip | 4 |
| LC2200 32 bit | 5 |
例如 Cortex-A15、Sandy Bridge 都分別具備 15 級、14 級流水線,而 Intel NetBurst(Pentium 4)、AMD Bulldozer 都是 20 級流水線,它們的工位數(shù)都遠超出基本的四(或者五)工位流水線設(shè)計。更長的流水線雖然能提高頻率,但是代價是耗電更高而且可能會有各種性能懲罰。
既然流水線設(shè)計可以實現(xiàn)不間斷取指、解碼、執(zhí)行、寫回,那為何不干脆同時做幾條流水線一起取指、解碼、執(zhí)行、寫回呢?這就引出了超標量設(shè)計。

上圖就是一個三路超標量四工位流水線的指令/周期執(zhí)行示意圖,可以看到 CPI 從 1 變成 0.33,即每周期執(zhí)行 3.33 條指令,這樣的改進幅度是令人著迷的,因此在初期的時候超標量甚至被人們贊美為標量程序的向量式處理。
不過在現(xiàn)實中不可能都這樣,因為現(xiàn)在的處理器執(zhí)行不同指令時候的“執(zhí)行”段工位并不完全一樣,例如整數(shù)可能短一些,浮點或者向量和 Load/Store 指令需要長一些,加上一些別的因素,實際大部分程序的實際 CPI 都是 1.x 甚至更高啊。
例如:
a = b * c
d = a + 1
這里的第二條指令需要使用到第一條指令的計算結(jié)果,因此必須等待第一條指令完成后才能跑第二條指令,更重要的是,在不少處理器上乘法指令并非一個周期而是需要多個周期才能完成。在遇到這樣的情況時,就不能實現(xiàn)多指令發(fā)射而且會出現(xiàn)流水線停頓。
當(dāng)然,還有更復(fù)雜的情況:
if (a > 5)
b = c;
else
b = d;
將其按照匯編語言編寫出來:
cmp a, 5 ; a > 5 ?
ble L1
mov c, b ; b = c
br L2
L1: mov d, b ; b = d
L2: ...
這里的第二條指令是一個條件分支指令(ble 是小于或等于轉(zhuǎn)移指令,ble L1 表示如果寄存器 a 小于等于 5 就轉(zhuǎn)移到 L1 這行執(zhí)行 mov d,b 這條指令)。
這條指令抵達“執(zhí)行單元”的時候,位于流水線前段的取指單元和解碼單元肯定已經(jīng)拾取和解碼了若干條指令,但是哪一條指令才應(yīng)該接下來被執(zhí)行呢?應(yīng)該是第三、四條還是第五條呢?
在第二行的條件分支指令完成之前,處理器只能等待。處理器平均六條指令就會遇到一條分支指令,因此流水線設(shè)計帶來的大部分性能提升優(yōu)勢此時會被喪失掉。
為此處理器必須進行“猜測”,按照猜測結(jié)果進行取指并推測哪些指令能開始執(zhí)行,不過這些指令的執(zhí)行結(jié)果并不會被遞交(寫回)直到分支指令的執(zhí)行結(jié)果完成。
如果猜錯的話,這部分指令的結(jié)果就會被扔掉,這也意味著這些指令對應(yīng)的時間或者周期數(shù)會被浪費掉。當(dāng)然如果猜中的話,處理器就能全速運行了。
那么如何去做“猜測”呢?
一個辦法是所謂的靜態(tài)分支預(yù)測,例如在指令編碼格式里留出一個位元作為預(yù)測信息,編譯器編譯的時候,對這個位元進行標記,告訴處理器該跑那條分支,不過這對于已經(jīng)采用了不具備這類條件執(zhí)行指令的舊式 ISA 二進制程序來說這樣顯然是不可能的。
另一個辦法就是“運行過程中”進行猜測即動態(tài)分支預(yù)測,通常是采用類似被稱作“片上分支預(yù)測表”的單元來記錄最近分支的地址以及用一個位元指示出哪一條分支是最近是否被采用的。
不過現(xiàn)在大多數(shù)處理器實際上是用兩個位元來作標記的,因此單次的分支“不跳轉(zhuǎn)”并不會馬上導(dǎo)致一般的“跳轉(zhuǎn)”預(yù)測出現(xiàn)反轉(zhuǎn)(這對于循環(huán)邊界來說是很重要的)。不過兩位元分支預(yù)測并有考慮到分支相關(guān)性,所以人們后來有采用兩級分支預(yù)測來解決這個問題,使得預(yù)測精度大大提高。
動態(tài)分支表需要占用相當(dāng)可觀的芯片面積,但是另一方面來說分支預(yù)測對流水線化處理器是相當(dāng)重要的,所以是物有所值的。
不過就算是最好的分支預(yù)測技術(shù)也可能會猜錯,對于超級流水線或者說深流水線來說就會有很多指令的結(jié)果會被扔掉,這樣的情況被稱作 mispredict penalty(誤預(yù)測性能懲罰)。
像 Pentium III 這類具備非常先進分支預(yù)測技術(shù)的處理器,在遇到分支預(yù)測失敗的時候,也會出現(xiàn) 10~15 個周期的性能損失,因此即使正確命中了 90% 的分支,也會因為分支誤預(yù)測導(dǎo)致 30% 的性能損失,所以 Pentium III 其實很多時候會出現(xiàn) 30% 的時間在走冤枉路。
人們在 ISA 中引入條件執(zhí)行指令(predicated instruction),希望籍此盡量減少分支,例如上面的例子,引入名為 cmovle 的判定指令后,可以寫成這樣:
cmp a, 5 ; a > 5 ? mov c, b ; b = c cmovle d, b ; if le, then b = d
cmovle 的作用是“當(dāng)小于或者等于的時候就進行賦值”,只有在條件為“真”的時候才會遞交執(zhí)行,因此被稱作條件執(zhí)行指令。
采用了判定指令后,原來的 5 條指令變成 3 條,避免了兩條分支指令,cmp 和 mov 可以并行執(zhí)行實現(xiàn) 50% 的性能提升,消除了分支預(yù)測錯誤導(dǎo)致的大量誤預(yù)測懲罰。
ARM 從一開始具備完整的判定指令集,而 MIPS 和 x86 后了也都添加了條件賦值指令,IA64(EPIC)中幾乎每條指令都具備條件執(zhí)行功能。
為了充分利用由于分支以及長時延指令導(dǎo)致的流水線“氣泡(停擺)”而浪費的資源,人們引入了亂序執(zhí)行(OoOE)技術(shù)。當(dāng)出現(xiàn)需要等待某條指令的時候,程序中的指令會被“重排序(Re-Ordered)”,使得其他指令可以被執(zhí)行。
對于像 x86 這樣的 ISA 來說,32 位模式下的寄存器只有 8 個(ARMv7 是 16 個),如果程序里的變量較多,就會導(dǎo)致多個變量使用同一個寄存器的情況發(fā)生,這里有可能出現(xiàn)先讀后寫的偽相關(guān)現(xiàn)象。
微架構(gòu)里解決寄存器先讀后寫(WAR)偽相關(guān)的辦法就是寄存器重命名。在微架構(gòu)的寄存器堆里塞進比 ISA 寄存器更多的物理寄存器,透過索引式寄存器堆或者保留站方式,將 ISA 寄存器映射到物理寄存器,從而實現(xiàn)亂序執(zhí)行。
ARM Cortex-A8、Intel Pentium、Intel Atom(Bonnell 內(nèi)核)、IBM Cell PPU 都屬于順序執(zhí)行,它們選擇順序執(zhí)行的原因主要是為了省電,因為 OoOE 需要大量的晶體管來實現(xiàn)。隨著制程的改進,OoOE 的開銷會逐漸淡化變得在某些場合里可行,因此像 ARM 從 Cortex-A9、Intel 從 Pentium Pro/Atom(Silvermont 內(nèi)核)都開始采用 OoOE。
假設(shè)我們有這樣的一段 C 代碼:
int x,y ;
int z ;
x = 100 ;
y = x + 1 ;
z = 5 ;
由于 z 的初始化和賦值都是相對對立的,這里也許可以拆成兩條 thread(線程):
thread #1:
int x,y ;
x = 100 ;
y = x + 1 ;
和 thread #2:
int z ;
z = 5 ;
如果處理器的微架構(gòu)具備兩種架構(gòu)狀態(tài)讓操作系統(tǒng)認為有兩個處理器的話,上面的兩條 thread 就能同時執(zhí)行了,這就是多線程。
多線程有三種類型,即 SMT、FGMT 和 CGMT,其中最早實現(xiàn) SMT 的處理器是 Intel 的 Pentium 4,而 FGMT 大都在 in-order(相對于 OoOE)處理器上采用例如 Cell PPU 和所有的 GPU 上。
隨著半導(dǎo)體工藝提升以及功率墻壁壘橫亙在前面導(dǎo)致超級流水線提升頻率和各種指令并行度措施不再靈光后(這些限制其實在 20 多年前就被處理器廠商和科研界預(yù)見到,例如 1993 年 DEC 西部研究院 David W.Wall)的論文《LIMITS OF INSTRUCTION-LEVEL PARALLELISM》,1993 年英特爾在路線圖中明確提出在 P8(當(dāng)時還是 P5 或者說 Pentium)時代引入多核處理器)廠商開始在片上實現(xiàn)多個內(nèi)核,這也就出現(xiàn)了多核處理器。
多核處理器能讓支持多線程的程序、操作系統(tǒng)跑得更快,但是目前大部分的應(yīng)用通常更偏好于單線程性能出色的處理器,因此你會看到單線程性能較強的雙核處理器比單線程性能較弱的多核處理器更快的情況發(fā)生。
到目前為止我們介紹了指令并行、線程并行的微架構(gòu)實現(xiàn),不過除了這兩種并行技術(shù)外,還有另一種非常常見的并行技術(shù):數(shù)據(jù)級并行化,通常以 SIMD 向量方式實現(xiàn)。
SIMD 就是單指令多數(shù)據(jù)的縮寫,理解起來并不困難,例如執(zhí)行一條 SIMD 加法指令就能在一個周期里完成 64 條數(shù)據(jù)流發(fā)來的 64 個數(shù)字的加法運算。
SIMD 的初衷是為了攤薄大量執(zhí)行單元上的控制單元成本,順帶減少程序的尺寸,因為SIMD 只需要復(fù)制一份代碼就能開跑,而多核處理器(或者說 MIMD)需要每個內(nèi)核都復(fù)制一份代碼和在 cache 上共享多個程序拷貝。
SIMD 最好是用來跑結(jié)構(gòu)相同的一堆數(shù)據(jù),因此它是數(shù)據(jù)級并行的重要實現(xiàn)方式之一,而這類應(yīng)用主要是多媒體為主,所以很多 ISA 都提供了專門的 SIMD 擴展來執(zhí)行多媒體應(yīng)用,ARM 有 NEON、Intel 有 MMX/SSE/AVX 等。
無論是馮·諾依曼還是哈佛結(jié)構(gòu)的處理器,最理想的情況下當(dāng)然是有無限大的存儲空間和 0 時延的存儲系統(tǒng)了,不過這顯然是無法做到的,因此人們就提出了分層式的存儲系統(tǒng)結(jié)構(gòu),從寄存器開始每往下一層容量就更大,但是速度也更慢:

例如對于 ARM Cortex-A9(四核 Tegra 3 的批發(fā)報價一般為 15~21 美元)來說:
物理寄存器堆大小是 56*32-bit = 224 字節(jié)
L1 cache 是 32-KiB(時延 4 周期)
L2 Cache 是 1-MiB,不同大小區(qū)段的時延是:
- 64 KiB - 128KiB = L1C + L2C = 4 + 19 = 23 周期
- 256 KiB - 512 KiB = L1_C + L2_C + TLB_L1 = 4 + 19 + 7 = 30 周期
- 1 MiB = L1_C + L2_C + TLB_L1 + TLB_L2 = 4 + 19 + 7 +7 = 37 周期
不同型號的產(chǎn)品,搭配的內(nèi)存容量不盡相同,以 華為 Ascend P1 XL 為例,搭配的內(nèi)存大小為 1GiB,時延大概是 L2 + 110ns,帶寬一般都有 1000MiB/s 以上。
基本上所有的手機都是采用 NAND 型閃存或者閃存卡作為 DASD(直接存取存儲設(shè)備)來存放程序和數(shù)據(jù),大小一般在 4 GiB 以上,如果搭配 Class 4 的 8 GiB microSD 卡的話讀寫帶寬一般只有 1.x MiB/ss~3.x MiB/s(傳輸數(shù)據(jù)塊大小為 4KiB 時)和 0.005 MiB/s~1.x MiB/s,價格一般為 20 元人民幣左右 。
這里說的時延是從數(shù)據(jù)載入指令發(fā)出到數(shù)據(jù)抵達處理單元所需的時間,這通常并不難理解。
那么這里的 TLB 時延(TLB_L1/TLB_L2)又是怎么回事呢?這是因為虛擬內(nèi)存的存在。
虛擬內(nèi)存(virtual memory)的作用一般有兩個:確保多個程序之間可以有效、安全地實現(xiàn)內(nèi)存共享;讓程序以為有大一塊連續(xù)的內(nèi)存空間(例如虛擬內(nèi)存空間地址有 64-bit,但是我們的物理內(nèi)存實際上只有 16GiB 或者說系統(tǒng)中的物理地址空間只有 34-bit,又或者是虛擬內(nèi)存空間是 32-bit,而物理定址空間是 40-bit)。
對于用戶程序在虛擬內(nèi)存空間里操作的處理器,是需要把虛擬內(nèi)存空間地址轉(zhuǎn)換為物理內(nèi)存空間地址,這就需要進行地址轉(zhuǎn)換了。負責(zé)這個功能的單元一般被稱作內(nèi)存管理單元(MMU),有時候它又被稱作分頁內(nèi)存管理單元,當(dāng)然 MMU 的功能不僅僅是地址轉(zhuǎn)換(否則就不會被蓋這么大的名頭了)。
內(nèi)存的基本管理單位被稱作 page(頁面,或者說頁塊),不同處理器支持的頁面大小不一樣,一般都是 4KiB(在 ARMv7a 里還有 64 KiB、1MiB、16 MiB 等),性能導(dǎo)向型的處理器頁面正變得越來越大,而嵌入式處理器似乎有 1KiB 大小的。
記錄物理內(nèi)存和虛擬內(nèi)存關(guān)系里的數(shù)據(jù)列表被稱作分頁表,這些分頁表也都是放在主內(nèi)存(物理內(nèi)存)中的,但是如果每次讀寫內(nèi)存都要訪問兩次主內(nèi)存的話效率太低了,所以人們引入了名為 TLB(Translate Look-aside Buffer,轉(zhuǎn)換后緩存)的 cache 來改善這個問題。
不同的處理器 TLB 大小都不一樣,以我們這里舉例的 Cortex-A9 為例,本身就存在多種 TLB 配置形式,它的 L1 D-TLB 是 32 個條目(或者說分頁地址映射),而 L1 I-TLB 可以配置為 32 或者 64 條目。
總之,早期的單周期式架構(gòu)效率很差,因此人們引入了流水線設(shè)計,可以充分使用各級工位,各工位執(zhí)行時間越短自然 CPU 的頻率可以更快;然后人們又引入了超標量設(shè)計,讓 CPU 上可以同時跑幾條指令,隨之而來的相依性等問題讓架構(gòu)師們想出了分支預(yù)測、亂序執(zhí)行、寄存器重命名等等技術(shù)來保證處理器的指令執(zhí)行效率。
除了提高指令并行度來改善處理器性能外,還有數(shù)據(jù)并行、線程化并行等方法,但是后兩者都需要程序員和編譯器協(xié)助,并非免費。
影響處理器性能還有內(nèi)存的帶寬和時延問題,因為取指和數(shù)據(jù)讀寫都必須透過內(nèi)存訪問來完成,層階式設(shè)計是目前成本最為合理的方式。
在介紹一些稍微復(fù)雜的技術(shù)概念之后,我們不妨想看看 ARM 的由來。
ARM ISA 屬于 RISC(精簡指令集計算機,最關(guān)鍵特征是指令編碼格式統(tǒng)一),ARM 本身就是 Advanced RISC Machines 的縮寫,不過在早期它的全稱是 Acorn RISC Machine(1983 年 10 月開始設(shè)計,1985 年實現(xiàn)第一枚硅片),因為公司當(dāng)時的名字叫 Acorn。
Acorn 是一家 1978 年在英國劍橋成立的公司,這家公司生產(chǎn)過若干款在英國頗為流行的電腦,例如在當(dāng)?shù)亟虒W(xué)市場占主導(dǎo)的 BBC Micro。
BBC Micro 取得了很大的成功,但是處理器是 8 位 的 6502,Acorn 希望切換到 16 位系統(tǒng)上來,但是英特爾拒絕了 Acorn 的 80286 樣片申請。不過經(jīng)過 Acorn 的多番實地考察和研究后,覺得在(當(dāng)時)設(shè)計一個處理器的研發(fā)成本并不是很高,于是決定開始做 Acorn RISC Machine 這個項目。
基于 Acorn RISC Machine 的 ARM2aS 處理器獲得了蘋果公司名為 Mobius 的類 Apple 2 風(fēng)格原型驗證機接洽,這個項目后來因為蘋果擔(dān)心和大賣的麥金塔電腦產(chǎn)生沖突而腰斬,但是這次接觸對 ARM 處理器的發(fā)展產(chǎn)生了一定的推動作用,因為 Mobios 團隊對 ARM 寄存器做了一些小修改使得原型機的基準性能有不同幅度的顯著改善。
后來蘋果開始著手開發(fā)名為 Newton 的個人掌上電腦,他們發(fā)現(xiàn)似乎只有 Acorn RISC Machine 能滿足要求耗電要求,但是當(dāng)時 Acorn RISC Machine 處理器的內(nèi)存管理單元并非 Acorn 自家,而是由 MEMC 公司提供芯片實現(xiàn)的,Acorn 沒錢開發(fā)這個功能。于是雙方就有了合作的想法,到了 1996 年 Acorn 和蘋果合資組建了 ARM 公司,不過 Acorn 公司依然獨立存在著直到 2000 年才基本煙消云散。
和一般的 RISC 不同的是,ARM ISA 除了指令長度固定為 32-bit(ARMv8 的 AArch 提供了 64-bit)的“經(jīng)典 ARM” ISA 外,還有長度為 32-bit 或 16-bit 名為 Thumb(拇指)的 ISA 擴展。
Thumb 的目的是在低端或者說入門市場應(yīng)用中改善 ARM 的指令密度(官方說法是減少大約 25%~35% 代碼空間,按照 Linaro Dave Martin 的 Linux Kernel 編譯結(jié)果,代碼空間少了大概 20%),提高指令密度可以讓 cache 塞進更多的指令減少命中缺失,更高密度的指令編碼也有利于多線程因為可用寄存器資源更多了等。大部分的 Thumb 指令編碼都能(經(jīng)過位于指令解碼器前的一個轉(zhuǎn)譯器實現(xiàn)簡單轉(zhuǎn)換)對應(yīng)到經(jīng)典 ARM 指令編碼格式上。
Thumb 是 ARM 在嵌入式市場得以攻城拔寨的關(guān)鍵利器,在很長一段時間里都鮮有對手,Cortex 家族中用于單片機為主應(yīng)用的 Cortex-M 甚至只支持 Thumb-2 指令(ARMv7 M),同樣以授權(quán)方式運營的 MIPS 直到 2010 年才推出類似的 microMIPS 指令。
VFP(Vector Floating Point,向量浮點)是 ARM 架構(gòu)的浮點單元協(xié)處理器擴展,提供了完全遵循 IEEE 754-1985 的低成本單精度和雙精度浮點支持。雖然 VFP 打著向量的名頭,不過這些“向量”指令的各個向量是串列方式執(zhí)行(或者需要單精度搭配雙精度才能實現(xiàn)并行執(zhí)行)的,并不能提供真正的 SIMD 向量并行,因此這個向量模式被拿掉了。
Advanced SIMD(NEON)擴展在微架構(gòu)實現(xiàn)中被稱作 MPE(媒體處理引擎),是一個 64-bit 和 128-bit SIMD 指令集擴展,支持 8/16/32/64 位整數(shù)和 32-bit 單精度浮點數(shù),共享使用 VFP 的寄存器。從 ARMv8 開始,NEON 在 AArch 64-bit 模式下提供完全遵循 IEEE 754 和雙精度支持并且透過 VFPv4 具備 32 個 128-bit 寄存器。
Cortex-A9 的代號為 Falcon,是在 ARM 公司在 2007 年 10 月 3 日發(fā)布的 IP core,距今大約有五個年頭。
Cortex-Ax 這個名字中后綴 A 表示屬于 Application(應(yīng)用處理器),Cortex 另有 M 系列(即單片機或者微控制器)、R 系列(實時應(yīng)用),這里顯然是 A 系列的規(guī)格最高,具備 MMU(內(nèi)存管理單元)。
基于 Cortex-A9 的芯片實現(xiàn)有前面提到的 NVIDIA Tegra 2/Tegra3、Apple A5/A5X 以及 TI OMAP4430/4440、ST-愛立信 NovaThor U8500/U9500/LT9540、STM SPEAr1310、三星 Orion/Exynos 4210、華為 K3V2、ZiiLabs ZMS-20/ZMS-40、Sony CXD5315GG(PSV)、聯(lián)發(fā)科 MT6577、華為海思 K3V2 等等,是目前 Google Android 操作系統(tǒng)高端手機、智能平板陣營中最主流的 CPU 內(nèi)核。
![]() |
![]() |
| Cortex-A8 微架構(gòu) | Cortex-A9 微架構(gòu) |
Cortex-A9 的前身是 Cortex-A8,它們同屬于 ARMv7 ISA 的實現(xiàn),和 Cortex-A8 相比,Cortex-A9 除了流水線更短、增加了專門的多核方案等大家熟知的變化外,還具備多項改進。
1、Cortex-A9 擁有眾多 RISC CPU 的先進特性,例如推測數(shù)據(jù)存取、動態(tài)分支預(yù)測、多指令發(fā)射、硬件 Cache 一致性、亂序執(zhí)行、寄存器重命名,號稱史上第一枚亂序執(zhí)行移動處理器。
除了雙指令發(fā)射和分支預(yù)測外,Cortex-A8 都并不具備,因此在 Cortex-A9 上匯編碼優(yōu)化、NEON SIMD 的重要性相對來說要低很多(經(jīng)過調(diào)優(yōu)的匯編碼在 A8 上可以做到 10-30 倍性能,而 A9 一般只會有 2-5 倍,如果是 A9 使用 NEON C Intrinsics 的話性能基本上和匯編一樣)。
2、Cortex-A9 的每條 L1 Cache Line 是 32 字節(jié),Corte-A8 是 64 字節(jié)。Cache Line 又稱作 data block(數(shù)據(jù)塊)或者 Cache Block,Cache 每次更新都以固定大小的 Cache Line 為單位。
Cache Line 的大小主要影響命中率、內(nèi)存存取效率、發(fā)生 Cache 命中缺失時候的性能懲罰時間。
3、Cortex-A9 的 L2 Cache 位于“核外”( ARM 對應(yīng)的方案是 PL310 或者更新一點的 L2C-310),而 Cortex-A8 則是速度更快的核內(nèi) L2 Cache。
從對 Cortex-A8 1GHz(三星 Samsung Hummingbird,即 Exynos 3110)和 CortexA-A9 1.2GHz(三星 Exynos 4210)實測來看,A8/A9 的 L1 cache 延遲分別為 3 周期和 4 周期,L2 Cache 延遲(含 L1 Cache 延遲但是不含 L1/L2 TLB 命中缺失懲罰的情況下)分別為 13 周期和 23 周期。
4、Cortex-A9MPCore 的各內(nèi)核 L1 Cache 采用了數(shù)據(jù)、代碼分離式設(shè)計,L1 數(shù)據(jù) Cache 具備硬件 Cache 一致性。各個內(nèi)核共享外部 L2 Cache。
5、Cortex-A9 具備完整的 VFPv3 FPU,而 Cortex-A8 則只有縮水版的 VFPlite,主要區(qū)別是 Cortex-A9 的大多數(shù)浮點操作都只需要 1 個周期,而 Cortex-A8 需要 10 個周期,因此 Cortex-A8 的浮點性能相當(dāng)爛。
6、Cortex-A9 支持半精度(fp16),而 Cortex-A8 只支持 32-bit 單精度(FP32)和雙精度(FP64),不過半精度在 CPU 級別的應(yīng)用并不是很多見。
7、Cortex-A9 不能同時發(fā)射兩條 NEON 指令,而 Cortex-A8 卻能夠?qū)崿F(xiàn) 1 條 NEON L/S 指令搭配一條非 L/S NEON 指令。
8、Cortex-A8 的 NEON 單元位于 ARM 單元下游,所以 NEON 單元訪問寄存器和內(nèi)存更快,而且數(shù)據(jù)可以很快從 ARM 寄存器搬到 NEON/VFP 單元寄存器,但是將 NEON/VFP 寄存器數(shù)據(jù)搬到 ARM 寄存器的話就非常慢,會導(dǎo)致 Cortex-A8 的流水線停擺 20 個周期。
9、Cortex-A8 的 NEON 和 ARM 各有一個分離的 L/S 單元,如果一起對同一塊 Cache Line 進行 Load 或者 Store 操作的話,會導(dǎo)致額外的 20 個周期延遲。
10、Cortex-A9 對多線程化同步采用 LDREX/STREX,不會杜塞所有的內(nèi)核,而 Cortex-A8 對互斥使用簡單的斷禁制。
11、所有的 Cortex-A8 都集成了 NEON SIMD 單元,但是 Cortex-A9 則未必,例如 NVIDIA Tegra 2 就沒有集成 NEON,不過 Tegra 3 則具備 NEON。
如果使用 7-zip(不包含任何浮點)實測來看,Cortex-A8 1GHz 的壓縮(受內(nèi)存時延、數(shù)據(jù) Cache 大小和速度以及 TLB 影響較大)/解壓縮(受 CPU 整數(shù)性能影響較大)性能相當(dāng)于 Core i7 920 2.67GHz 的 3.5% 和 5.5%;而 Cortex-A9 雙核則是 Core i7 920 的 8.8% 和 12.7%。
代號 Eagle 的 Cortex-A15 是在 2012 年 9 月發(fā)布的 ARMv7 架構(gòu)實現(xiàn),是 ARM 首次引入三路指令解碼的微架構(gòu) IP core,目前三星的 Exynos 5 5250(雙核,32nm HKMG,1.7GHz)是市場上能看到的第一波 Cortex-A15 產(chǎn)品,Chromebook、Nexus 10(均在 2012 年 10 月發(fā)布)都采用了這枚芯片。
和 Cortex-A9 相比,Cortex-A15 有非常明顯的變化:
1、整數(shù)流水線最短工位數(shù)達到 15 級,管芯面積占用比 Cortex-A9 高一倍。
2、采用三路超標量微架構(gòu),可以每個周期取指四條指令,解碼器每個周期可以為發(fā)送單元提供 3 條指令,而指令發(fā)射單元可以亂序提供最高 8 個微操作供執(zhí)行單元運行。
相比之下,A9 的解碼器只能每周期跑兩條指令,派發(fā)單元每周期派發(fā) 4 個微操作給執(zhí)行單元。
3、Cortex-A15 的動態(tài)分支預(yù)測技術(shù)和 Cortex-A8/A9 差不多,但是 A15 引入了一個 64 條目的 microBTB,而此前的 A8/A9 并不具備這樣的分層結(jié)構(gòu)。動態(tài)分支預(yù)測能力是影響現(xiàn)代風(fēng)格處理器的關(guān)鍵因素之一,像 Pentium 4 的 BTB 是 4K 條目,SandyBridge 據(jù)說達到 8K~16K。
雖然 A15 的兩級 BTB 條目總數(shù)較 A8/A9 少,但是 A15 的 Return Stack 條目數(shù)從 8 條增加到了 18 條,取指帶寬從之前的 64-bit 提升到 128-bit,而且完全支持邊界非對齊地址的拾取。
4、Cortex-A15 支持 VFPv4,具備硬件 FMA 指令執(zhí)行,可以在同頻下提供兩倍的峰值浮點性能。此外,A15 還具備硬件除法指令,在 A9 上這需要接近 50 個周期來執(zhí)行。
5、A15 的周邊總線為 AMBA4,128-bit master 界面,A9 的 AMBA3 的 master 界面是 64-bit。
6、雖然 ARMv7 是 32-bit ISA,但是現(xiàn)在 Cortex-A15 支持 40-bit 物理定址(類似于當(dāng)年的 Pentium Pro 和 Atlhon),而且 L1/L2 Cache 具備 ECC,因此理論上適用于服務(wù)器級應(yīng)用。
7、A15 和 A9 都有一個類似的 small loop 緩存,用于存放小循環(huán),讓執(zhí)行單元無需訪問指令 cache 就能抓到指令。在 A9 上它可以存放大小為 64 字節(jié)的指令。
而在 A15 上則是 32 條目,可以存放兩條前轉(zhuǎn)分支和一條后轉(zhuǎn)分支,而且 A15 的 small loop 緩存存放的是已經(jīng)解碼的微操作,這意味著連解碼步驟也能節(jié)省掉。
這類似于 Intel 的做法:先在 Conroe 上引入 loop buffer,然后在 Nehalem 引入 uop loop buffer(28 條目),到了 SandyBridge 則徹底改成了 uop cache(1500 個 uop),逐步改進。
Cortex A15 的整數(shù)性能為 3.5~4.01 DMIPS/MHz,相比起 A9 的 2.5 DMIPS/MHz 和 A8 的 2.0 DMIPS/MHz 有明顯的改進,不過因為三路超標量而帶來的各種資源增加,A15 需要更先進的制程(32 納米或更先進)才能在手機、平板上變得比較適用。

上圖是高通 2012 年 11 月于分析者日會議上公布的 AP 產(chǎn)品路線圖
雖然 2012 年年初的時候 NVIDIA Tegra 3 大放異彩,但是到了臨近年末的時候,高通的 Snapdragon 4 Pro APQ8064 卻已經(jīng)是成為了幾乎所有性能導(dǎo)向新 Android 手機的主角,其中一個重要原因就是它采用的 Krait 微架構(gòu)能提供對手不具備的特性。
Krait 微架構(gòu)是高通第四代 Snapdragon(驍龍)處理器所搭配的 CPU 內(nèi)核微架構(gòu),是 ARMv7 架構(gòu)的實現(xiàn),屬于高通的 ARM 架構(gòu)級授權(quán)、自行研發(fā)的處理器內(nèi)核微架構(gòu)。
Krait 的前身是 Scorpion,在產(chǎn)品布局上它和 Scorpion 有些類似,例如 Scorpion 定位于 Cortex-A8 和 Cortex-A9,而 Krait 的定位也是類似,即 Cortex-A9 和 Cortex-A15 之間,具備一些 Cortex-A15 的特征。
例如 L0 cache(Cortex-A15 上有類似作用的 loop buffer,相當(dāng)于 L0 I-cache,指令調(diào)度器無需經(jīng)過解碼器就能抓到小循環(huán)的微操作指令)、三路超標量、VFP4 浮點單元、128-bit SIMD 處理能力(高通稱 SIMD 單元為 VeNum,ARM 自己則稱之為 NEON)以及基于 A15 同級的半導(dǎo)體制程節(jié)點。至于有人說 Krait 是 A9 的改進版,這樣的觀點我很難認同,它和 Scorpion 都類似于當(dāng)年 DEC 獲得 ARMv4 ISA 授權(quán)而自行研發(fā)的微架構(gòu)。
不過另一方面,Krait 的亂序執(zhí)行要遜色于 Cortex-A15,后者具備八個指令發(fā)射端口和八個執(zhí)行端口,每一個執(zhí)行端口都對應(yīng)一個(準)保留站(有些類似于 AMD K7-K10),而 Krait 只有四個指令發(fā)射端口和七個執(zhí)行端口,并且采用的是類似 Cortex-A9 或者說 Pentitum Pro 方式的單個大規(guī)模指令發(fā)射隊列單元。
| 微架構(gòu)對比 ARM vs 高通 | ||||||
| ARM11 | ARM Cortex A8 | ARM Cortex A9 | ARM Cortex A15 | Qualcomm Scorpion | Qualcomm Krait | |
| 解碼能力 | 單路 | 雙路 | 雙路 | 三路 | 雙路 | 三路 |
| 整數(shù)流水線 | 8 級 | 13 級 | 8 級 | 15 級 | 10 級 | 11 級 |
| 亂序執(zhí)行 | 否 | 否 | 是 | 是 | 部分 | 是 |
| 浮點單元 | VFP11 (流水線式) |
VFPv3 (非流水線式) |
可選 VFPv3 (流水線式) |
VFPv4 (流水線式) |
VFPv3 (流水線式) |
VFPv4 (流水線式) |
| SIMD(NEON) | 不具備 | 具備 (64-bit) |
可選 MPE (64-bit) |
具備 (128-bit) |
具備 (128-bit) |
具備 (128-bit) |
| 半導(dǎo)體制程 | 90nm | 65nm/45nm | 40nm | 32nm | 40nm | 28nm |
| 典型頻率 | 412MHz | 600MHz/1GHz | 1.2GHz | 2GHz | 1GHz | 1.5GHz |
在現(xiàn)實測試中,Krait 的表現(xiàn)和它的微架構(gòu)一樣,提供了比 Cortex-A9 更強的性能,在對單線程性能較高的應(yīng)用中,即使是雙核版的 Karit 都可以比四核 Cortex-A9 更快。
正如我們前面提過的,蘋果公司在上世紀九零年代就已經(jīng)和 ARM 合作并且提供了一些微架構(gòu)設(shè)計上的修改方案,因此蘋果對 ARM 一點都不陌生甚至有非常豐富的經(jīng)驗。
從 iPad、iPhone 4/iTouch 4、Apple TV 2 開始,蘋果開始真正介入 ARM 芯片設(shè)計,推出了名為 A4 的自行設(shè)計 ARM 處理器。A4 采用了 ARM 授權(quán)的 Cortex-A8 IP Core,但是蘋果找來了 Intrinsity 公司(已經(jīng)被蘋果收購)和三星公司合作進行了一些調(diào)優(yōu),可以讓 A4 的頻率跑得比基于上一代制程的 Cortex-A8 更快。曾經(jīng)有說法認為 A4 的 L2 cache 大小是 640KiB,但是后來確認修正為 512KiB(這是 ARM Cortex-A8 內(nèi)核的可選配置方式之一)。
A5 系列依然是采用 ARM IP core,從 Cortex-A8 升級為 Cortex-A9 雙核,不過整個 A5 系列出現(xiàn)了三個版本,即 APL0498、APL2498、APL5498(A5X),三個版本的芯片面積各不一樣,其中 A5X 的 GPU 是四核 PowerVR 5 并且擁有 4 通道內(nèi)存總線,定制化設(shè)計在這里體現(xiàn)得非常明顯。
真正的定制化設(shè)計是從 A6 開始,蘋果公司給 A6 搭配的 CPU 內(nèi)核是完全有自己團隊開發(fā)的 Swift,不僅這樣,蘋果還提出了一個新的名字:ARMv7s。傳統(tǒng)上,ARMv7 是屬于 ISA 版本名稱,不過 ARMv7s 至今都并未出現(xiàn)在 ARM 官網(wǎng)的公開資料里,因此 ARMv7s 可能并非 ARM 的產(chǎn)物,而是蘋果自己在 ARMv7 基礎(chǔ)上做的一個架構(gòu)優(yōu)化定義,讓編譯器可以為 Swift 微架構(gòu)匹配對應(yīng)的調(diào)優(yōu),本質(zhì)上 ISA 還是 ARMv7A。
| CPU | iPhone | iPad | iPod Touch | Apple TV | ||
| ISA | 內(nèi)核 | 芯片名稱 | ||||
| "ARMv7s" | Apple Swift | Apple A6X | 4 | |||
| Apple A6 | 5 | |||||
| ARMv7A | ARM Cortex-A9 | Apple A5X | 3 | |||
| Apple A5 | mini | |||||
| 4S | 2 | 5 | 3 | |||
| ARM Cortex-A8 | Apple A4 | 4 | 1 | 4 | 2 | |
| 三星 S5PC100 | 3GS | 3(32/64GB) | ||||
| ARMv6 | ARM 1176JZ(F)-S | 3(8GB) | ||||
| 3 | 2 | |||||
| 1 | 1 | |||||
那么 Swift 和以往的 Cortex-A9 相比有哪些改進呢?蘋果公司并未詳細說明,傳統(tǒng)上這家公司就是這樣,千方百計捂著,不過 Anandtech 利用一些自己編寫的微型基準測試程序進行了一些探測,以程序員的角度大致估量出了 Swift 的微架構(gòu)是長得如何了。
在前端部分,Swift 具備三個指令解碼器,可以每個周期完成三條指令的解碼,而在指令分發(fā)器上,具備五個發(fā)射端口,浮點單元、整數(shù)單元各占兩個,還有一個專供 Load/Store 單元使用,具備亂序執(zhí)行能力、整數(shù)流水線深度為 12 級,cache 子系統(tǒng)的時延比 Cortex-A9 低了差不多一半。
“ARMv7s”的設(shè)立估計就是讓編譯器獲知編譯執(zhí)行對象是 Swift,這樣就能對各種指令順序進行一些預(yù)調(diào)度,確保盡可能低的 CPI。
簡而言之,A6 系列就是采用了比 A5 系列更先進制程和微架構(gòu)的產(chǎn)物,其中的 CPU 內(nèi)核則是蘋果首次真正完全執(zhí)行開發(fā)的設(shè)計,未來是否會在 GPU 上也有類似的動靜將會是值得關(guān)注的。
Atom 是英特爾計劃實現(xiàn) x86 anywhere 戰(zhàn)略的重要產(chǎn)品,為此它不惜賣掉了口碑不錯的 Xscale 系列 ARM 處理器部門給 Marvel,從 2008 年 3 月發(fā)布迄今已經(jīng)有了 45nm 和 32nm 兩代制程,產(chǎn)品型號可以說是多如牛毛,就代號而言,有最初的 Silverthrone、Diamondville,然后經(jīng)過制程改進,分別有了 Lincroft 和 Pineview,“新近”的 Cedarview 則是源自 Pineview。
不過這么多型號,到目前為止它們所基于的內(nèi)核微架構(gòu)都是 Bonnell。第一代的 Atom 處理器(Silverthrone)是 45 納米高性能制程制造,但是需要另外搭配一個 TDP 兩瓦的 130nm 制程芯片組,這枚 Atom 雖然有低于 1 瓦的版本,但是此時很多功能都被關(guān)閉,性能很弱,考慮到那個芯片組,根本不會有人拿這個做手機產(chǎn)品。
兩年后的 Lincroft 集成了 GPU、視頻單元以及內(nèi)存控制器,采用專門的 45 納米 SoC 工藝制成,但是依然需要搭配一個代號 Langwell、由臺積電 65nm 制程生產(chǎn)的 I/O 芯片,兩者合起來的名字叫 Morrestown 平臺,這個系列中的 Z600 被嘗試用來做了一兩款手機,但是太高耗電的問題使得它們依然難以成為智能手機市場的競爭者。
到了 2012 年,名為 Medfield 的新平臺似乎讓英特爾的支持者看到了些許的曙光,因為在經(jīng)過三次制程技術(shù)和三個不同的設(shè)計后,現(xiàn)在英特爾終于有了一個可以在耗電上達到智能手機要求的低功耗產(chǎn)品,這個平臺中基于 32 納米 SoC 制程的 Penwell 芯片集成了代號 Saltwell 的內(nèi)核,在微架構(gòu)上,Saltwell 和之前所有 Atom 處理器的內(nèi)核微架構(gòu)其實都是幾乎一樣的,都屬于 Bonnell 微架構(gòu),不過 Saltwell 由于采用了更精密的 32nm 制程,得以在微架構(gòu)上做一些優(yōu)化,因此在細節(jié)上是有一些不同的。

上圖為第一代 Bonnell 微架構(gòu)(Silverthorne)
到了 Saltwell(第三代 Bonnell)BTB 為 8096,具備 uop cache
Bonnell 采用超標量流水線設(shè)計,可以每個周期執(zhí)行最多兩條指令,指令需要遵循一定配對原則才能實現(xiàn)超標量執(zhí)行(類似于 Pentium 的 U/V 設(shè)計),具備 16 級工位,支持 x86_64 指令集以及最高 SSE3 擴展,但是手機版本只支持 32-bit ISA,內(nèi)存容量也被限制在 1GiB,對應(yīng)平板和低端筆記本等版本則打開了 64-bit ISA 支持,內(nèi)存容量放寬到 2~4GiB。
相對于當(dāng)前的許多競爭對手來說,英特爾在產(chǎn)品技術(shù)細節(jié)公布上要大氣許多,各種數(shù)據(jù)表、涉及微架構(gòu)內(nèi)部關(guān)鍵特征的編程優(yōu)化手冊都能在產(chǎn)品發(fā)布后就能公開下載到,這讓我們可以更詳細的為大家介紹這款產(chǎn)品。
1、Saltwell 的分支預(yù)測器是一個具備 8096 條目(兩倍于 Bonnell 4096 條目)的全局式分支預(yù)測器;
2、Lincroft 時代引入的 48 字節(jié)后段取指緩存(post-fetch instruction buffer)在 Saltwell 里升格為一個高速緩存(Cache),以便減少 Saltwell 的重復(fù)取指。該技術(shù)類似于 Conroe/Merom 的 Loop Stream Detector(循環(huán)指令流偵測器),前面我們在介紹 ARM Cortex 微架構(gòu)的時候也有提到類似的技術(shù)。
3、Saltwell 的 L1 I-Cache 是 32KiB 8 路相關(guān)聯(lián),L1 D-Cache 是單端口 24KiB 6 路相關(guān)聯(lián)。
4、Saltwell 的指令發(fā)射端口依然和 Bonnell 那樣是采用 Pentium 配對式發(fā)射風(fēng)格的 U/V 流水線設(shè)計;
5、Saltwell 能實現(xiàn)更多的整數(shù)指令配對以及更快的 memcopy 微代碼規(guī)則。
6、加入了不間斷時間標簽計數(shù)器(TSC)和本地 APIC 計時器,主要是為了協(xié)助電力管理和減少喚起 CPU 的情況。
7、L2 Cache 維持之前的 512-KiB 8 路相關(guān)聯(lián)設(shè)計,運行于內(nèi)核同頻,讀取帶寬為每周期 32 字節(jié)(256-bit),可支持 32 個待發(fā) cache 請求。改變的地方主要是 L2 Cache 的電壓軌線與內(nèi)核是分開了的。例如 Saltwell 內(nèi)核的 Vmin 是 0.7 伏特,L2 Cache 則在固定的 1.05 伏特電壓軌線上跑,這樣的設(shè)計有助于減少 C6(最節(jié)電模式)電力狀態(tài)轉(zhuǎn)換時延。
8、頻率變頻粒度更精細。以 Z2460 為例,雖然 CPU 的最高持續(xù)頻率為 1.3GHz,但是頻率的變動范圍達到 1.6GHz,步進粒度為 100MHz;而之前的 Z600 系列頻率范圍是 0.2GHz ~ 0.8GHz 持續(xù),最高 1.2 GHz。
9、Saltwell 和之前的 Bonnell 系列微架構(gòu)同樣沒有專用的硬件整數(shù)乘法、除法單元,這些操作都是和浮點硬件共享。
10、在 Medfield 中還有一塊獨立分離于 512 KiB L2 Cache 外的 256KiB SRAM,位于不間斷模塊內(nèi),主要用圖像信號處理器存放圖像數(shù)據(jù)以及優(yōu)化最低漏電。在 SOC 進入節(jié)電模式后,這塊 SRAM 還會被用于存放架構(gòu)狀態(tài),就好象 Saltwell 內(nèi)核具備自己的 C6 SRAM 來存放 x86 狀態(tài),這塊更大的 SRAM 則是存放整個平臺的。在進入 S0ix 狀態(tài)時,像圖形或者視頻編解碼器等單元都會被關(guān)掉,它們的狀態(tài)信息和配置信息都會保留在這塊 256 KiB SRAM 里。
中低價位的智能手機勢必成為 2013 年亮點,海量的千元以下甚至 600 元以下的智能手機、平板電腦將會在這一年推出,不過因為成本限制,它們在各方面的規(guī)格必然比更高價位的產(chǎn)品有所削弱,其中之一當(dāng)然是必定搭載的應(yīng)用處理器。
中低價位市場是 ARM 所最擅長的領(lǐng)域,目前它的產(chǎn)品線中除了像當(dāng)年 Apple iPhone 1 所使用的 ARM11 內(nèi)核外,還有接替 ARM11 的 Cortex-A5 以及接替 Cortex-A8 的 Cortex-A7。
| ARM 微架構(gòu)對比 | ||||||
| ARM11 | Cortex A5 | Cortex A7 | Cortex A8 | Cortex A9 | Cortex A15 | |
| 解碼能力 | 單路 | 單路 | 雙路 | 雙路 | 雙路 | 三路 |
| 整數(shù)流水線 | 8 級 | 8 級 | 8 級 | 13 級 | 8 級 | 15 級 |
| 亂序執(zhí)行 | 否 | 否 | 否 | 否 | 是 | 是 |
| 浮點單元 | VFP11 (流水線式) |
VFPv4 (流水線式) |
可選 VFPv4 (流水線式) |
VFPv3 (非流水線式) |
可選 VFPv3 (流水線式) |
VFPv4 (流水線式) |
| SIMD(NEON) | 不具備 | 可選 MPE (128-bit) |
可選 MPE (64-bit) |
具備 (64-bit) |
可選 MPE (64-bit) |
具備 (128-bit) |
| 半導(dǎo)體制程 | 90nm | 40nm | 40nm | 65nm/45nm | 40nm | 32nm |
| 典型頻率 | 412MHz | 0.3~0.8GHz | 0.8~1.2GHz | 0.6~1GHz | 1.2GHz | 2GHz |
1、Cortex-A5 是目前 Cortex-A 系列中最低階的內(nèi)核,和 ARM11 的 1.2 DMIPS/MHz 性能相比,Cortex-A5 達到了 1.57DMIPS/MHz;
2、Cortex-A5 具備 ARM 最新的 VFPv4 浮點單元和 128-bit NEON 向量處理單元。,相比之下 ARM11 只有老式的 VFP11;
3、Cortex-A5 的制程為 40nm,面積是 90nm 制程 ARM11 的一半。
4、Cortex-A5 可以提供單核、雙核、四核等配置,像聯(lián)發(fā)科就做了一個價格非常低的 Cortex-A5 四核方案,在低價位手機市場里競爭力非常強大。
5、Cortex-A7 的 DMIPS 性能是 1.9 DMIPS/MHz,Cortex-A8 是 2.0 DMIPS/MHz。
6、Cortex-A7 具備硬件整數(shù)除法、虛擬指令、40-bit 內(nèi)存定址能力,所有 Cortex-A15 的程序都能在 Cortex-A7 上執(zhí)行。
7、Cortex-A7 和 Cortex-A8 類似集成了一個低時延(10 周期)的 L2 Cache。
8、Cortex-A7 的整數(shù)流水線是 8 級順序雙發(fā)射,分支預(yù)測單元比 Cortex-A8 更先進,因此在分支預(yù)測能力和分支預(yù)測失敗懲罰方面都會比 Cortex-A8 更好;
9、雖然不能像 Cortex-A8 那樣雙發(fā)射浮點或者 NEON 指令,但是 Cortex-A7 的浮點單元是流水線化設(shè)計。
10、在同樣的制造工藝節(jié)點下,Cortex-A7 的面積是 Cortex-A8 的 1/3~1/2。
11、Cortex-A7 能實現(xiàn)單核、雙核、四核等配置,而 Cortex-A8 只有單核配置。
12、Cortex-A7 在 ARM 的 big.LITTLE 策略中屬于伴核角色,就是給 Cortex-A15 作為低負荷工作的雜役。
從定位上看,我們相信 Cortex-A5 在低價智能手機市場上會有相當(dāng)奪目的表現(xiàn),而 Cortex-A7 作為非伴核的單獨產(chǎn)品時則更多的會在中低價平板電腦市場上攻城拔寨。
目前移動圖形 GPU 大致上有五個陣營,即 ImgTec PowerVR、ARM Mali、高通的 Adreno、NVIDIA GeForce ULP 以及 Vivante(中文名是:圖芯),由于 Intel 下一代 Atom 中將會應(yīng)用自己的 GPU,因此很快就會擴展成為六個陣營。這里的 Vivante 的人是來自 NVIDIA 的,如果你仔細看 Vivante 的文檔就會發(fā)現(xiàn) Vivante 的很多“市場行銷式術(shù)語”都和 NVIDIA 極其相似。
在這幾家廠商中,做移動圖形時間最長的當(dāng)然是 ImgTec PowerVR 了。
不僅與此,PowerVR 對于許多九十年代中就已經(jīng)接觸 PC 的游戲玩家來說也不陌生,當(dāng)年的圖形加速卡概念剛剛被炒作起來,做圖形加速器(注意,不是板卡喲)的廠商多如牛毛。例如 ATi、Tseng Labs(代表作是 ET4000)、Rendtion(代表作是 V閞it?2x00)、3dfx(代表作是 Voodoo 2 三維加速芯片)、PowerVR、Bitboys、GigaPixel、Trident、S3 Graphics、3D Labs、Cirrus Logic、Alliance Semiconductor(代表作是大名鼎鼎的 ProMotion 6410,VCD 最流行的時候,6410 就是顯卡代名詞)、Matrox、Chromatic Research(代表作是 Mpact! 系列可編程多媒體芯片)、Number Nine(代表作是 Imagine 128,傳說中的神作,當(dāng)時 2D 顯卡的巔峰一個是 Matrox,另一個就是 Number Nine),NVIDIA 在當(dāng)時同樣也只是一家剛剛起步的公司。
這里有一張歷史樹圖:http://www.vgamuseum.info/images/stories/doc/historysm.png
PowerVR 在這眾多的圖形芯片公司中是一家很特別的廠商。首先它是以技術(shù)授權(quán)方式將設(shè)計轉(zhuǎn)讓給其他芯片公司,由其他芯片公司將設(shè)計物理化后成為真正賣給廠商的芯片,其次是 PowerVR 的渲染架構(gòu)是分塊式延后渲染,理論上可以完全消除像素的無效重復(fù)渲染。
在當(dāng)時,極少有圖形芯片公司是這樣的方式運作以及具備這樣的渲染技術(shù),當(dāng)然并不是說完全沒有,除了 PowerVR 外,還有一家名為 GigaPixel 的公司也是采用授權(quán)制和具備分塊式延后渲染(被稱作 Giga3D 架構(gòu),具備比當(dāng)時 PowerVR 兼容性更高的分塊式延后渲染設(shè)計以及采用 eDRAM 的特點)的,不過這家公司出彩的時間沒有幾天就被 3dfx 收購,而 3dfx 的所有資產(chǎn)后來也被 NVIDIA 收購了,其中也包括 Giga3D。
PowerVR 的渲染模式是 tile-based deferred rendering(分塊式延后渲染)。
分塊式渲染(TBR)并不難理解,就是把畫面切成若干個 16x32 或者 16x16 的像素塊進行渲染,這樣的好處是可以在芯片上建立一個中間緩存(也可以稱作 Tiler Buffer,分塊緩存,里面用于存放當(dāng)前渲染 Tiler(像素塊)的深度/蠟版幀緩存、色彩幀緩存、渲染對象等),不再需要片外的顯存來存放 Z-buffer,讓渲染過程中的讀寫盡量在片上完成,減少內(nèi)存的讀寫。
由于在中間緩存渲染的時候都是很高的精度(IEEE 32-bit),減少了以 16-bit(例如 R:G:B=5-bit:6-bit:5-bit)幀緩存模式時在內(nèi)存上進行透明混合等操作時的精度損失,因此 TBR 可以較低的內(nèi)存讀寫和占用實現(xiàn)高品質(zhì)的輸出。
ARM 的 Mali、當(dāng)年 Bitboys 的 Glaze3D 都屬于 TBR,不過也僅此如此,它們并非 TBDR,仍然屬于 IMR(立即渲染器),只有有限的 HSR 能力(例如 Early-Z、Hi-Z 之類的技術(shù)),并不能完全消除無效渲染。
TBDR 是在上面的分塊式渲染(TBR)基礎(chǔ)上增加了對場景中當(dāng)前屏幕畫面三角形的篩選分倉(binning)的步驟,將三角形的前后位置關(guān)系標記起來并存放于片外的顯存中,這樣就能實現(xiàn)將不可見面在進入著色渲染流水線之前剔除掉,實現(xiàn)完全消除無效渲染。
由于增加了分倉動作,貼圖和著色必須等待三角形可視性問題解決后才渲染,渲染上增加了時延,所以這種渲染方式被稱作分塊式延后渲染。
不過在 OpenGL 中缺乏專門的標記來指示一幀畫面什么時候開始和結(jié)束,所以 TBDR 對一幀畫面什么時候才接收到所有的三角形進行偵測將會有點麻煩,這會導(dǎo)致三角形分倉陷入迷失中。
在 Direct3D 中有 BeginScene() 和 EndScene() 這樣的標記,但是由于在幾乎所有的硬件上都沒有效果,所以開發(fā)人員都會懶得去用這些標記并且隨意地在這些界限外使用 z-buffer,這會導(dǎo)致 API 無法確保 z-buffer 中存放有效的數(shù)據(jù)。PowerVR 硬件本體雖然可以把 Z-buffer 存放在片外顯存中,但是代碼必須編寫正確。
TBDR 可以減少無效渲染、實現(xiàn)極高的低內(nèi)存占用渲染輸出品質(zhì),但是它的缺點是需要做一塊容量不小的片上緩存和大量的晶體管確保 TBDR 時候的兼容性,因此 PowerVR 的芯片面積一般都比 GeForce 這類 IMR(立即模式渲染器)大不少,另一個麻煩之處在于行銷的時候,PowerVR 的紙面規(guī)格相當(dāng)難看(當(dāng)年 PowerVR3 就是搭配 SDR 作為顯存上市的,而此時市場上的許多顯卡都已經(jīng)搭配 DDR 顯存了),當(dāng)然這個可以透過一些媒體測試實證加以解決。
上圖是 PowerVR SGX54X MP4 的微架構(gòu)圖,這個系列中的 PowerVR SGX 543 MP4 曾經(jīng)應(yīng)用于蘋果 iPad 3 中的 A5X 應(yīng)用處理器中,MP4 表示它是以四內(nèi)核形式組成的 GPU。
需要注意的是,PowerVR 說的內(nèi)核是真正的內(nèi)核而非 NVIDIA/AMD 那樣的把單個 ALU 都當(dāng)成 core 的市場行銷術(shù)語,它這里的四個內(nèi)核可以并行處理四個三角形渲染,NVIDIA 到了 Fermi(GTX 480)開始實現(xiàn)多三角形渲染,而 AMD 是在 Tahiti(7970)開始實現(xiàn)。
在 PowerVR 54x MP4 中,每個圖芯渲染計算單元被稱作 Multi-Threaded Co-Processor,對應(yīng) OpenCL 的術(shù)語就是 PE(Processing Element,處理部件)。每個 PE 每個周期可以完成兩個浮點操作。
每四個 PE 構(gòu)成一個 Pipe(渲染流水線,因此 Pipe 本質(zhì)上就是一個四路 SIMD),每個 PowerVR SGX54X 內(nèi)核包括四個這樣的 Pipe,即 16 個 PE,故此 PowerVR SGX54X MP4 就有 64 個 PE。
因此如果 PowerVR SGX 54x MP4 運行于 300MHz 的話,浮點性能就是 38.4 GFLOPS。
即使是同一代的 PowerVR,不同的內(nèi)核版本具體的實現(xiàn)細節(jié)都可能有些差別,例如 Pipe 內(nèi)的 PE 數(shù)或者是每個內(nèi)核內(nèi)的 Pipe 數(shù),例如 PowerVR SGX 554 MP4(Apple A6X 采用該 GPU)的每個內(nèi)核有 8 條 Pipe 而非 PowerVR SGX 54x MP4 的四條。
PowerVR SGX 5 被設(shè)計成統(tǒng)一渲染結(jié)構(gòu),即幾何體頂點和屏幕像素計算都是由上面說的 PE 執(zhí)行,這樣的好處是讓 GPU 內(nèi)的計算單元可以盡量保持運作狀態(tài),而不是像分離式架構(gòu)那樣遇到非平衡負載的處理時候,VS(頂點計算單元)有時候在等 PS(像素著色計算單元)或者 PS 在等 VS。
根據(jù) PowerVR 的資料,SGX 54X 的每個 Pipe 內(nèi)有一個線程調(diào)度器(Thread Scheduler),每個線程調(diào)度器內(nèi)有 16 個線程可供派發(fā),每次可以派發(fā)其中的 4 個線程給下面的 PE 執(zhí)行。
PowerVR SGX 5 系列中有明確的 API 支持規(guī)格的內(nèi)核基本上都是支持 DX9.X,但是有一個特例,那就是 PowerVR SGX 545,可以實現(xiàn) DX 10.1、OpenGL 3.2 支持。
如果資料沒有錯誤的話,PowerVR SGX 5 的 ALU:TEX 比例為 2:1,即每兩個 PE 就會配上一個紋理單元,因此我們這里的 PowerVR SGX 54x 單個內(nèi)核具備 8 個紋理單元。
雖然說 PowerVR 微架構(gòu)的資料并不是很多,但是相對于除了 Intel 的其他對手而言,已經(jīng)是非常大方了。
在本文中,我們首先指出了當(dāng)前手機、平板電腦所使用的應(yīng)用處理器與平時大家接觸的電腦仍然存在巨大的性能差別,以性能來看的話,可能是 6~10 年的距離。
由于電池和散熱的限制,移動應(yīng)用處理器不可能像臺式處理器那樣相對較少地考慮耗電問題,對移動應(yīng)用處理器來說,所有的一切都得圍繞一個詞進行:省電。
省電不只光靠制程上的改進,還有芯片本身的設(shè)計也是極為重要的,例如英特爾的 Atom 在實驗室的時候采用了 6T(單位元六個晶體管)的 Cache 設(shè)計,速度和面積都不錯,但是為了省電,后來上市的產(chǎn)品轉(zhuǎn)用了 8T(單位元八個晶體管),這樣的設(shè)計會增加不少面積,但是更省電了,類似這樣犧牲芯片面積換取功率控制的措施在移動應(yīng)用處理器上比比皆是。
不過差距并非完全來自于處理器本身,像 Android 這個操作系統(tǒng),程序是跑在一個 Google 自己做的虛擬機上面,絕大部分 apk 的開發(fā)語言都是 Java,這使得問題變得更加嚴重。
在這個博客里,博主采用 C 和 Java 兩個版本的程序在 Android 上作對比,得出的差別是 C 版本跑了 8 秒,而 Java 是 57 秒。類似這樣的區(qū)別在 C 和 Java 的對比上其實比比皆是甚至往往會出現(xiàn)更加巨大的差別。
所以這邊架構(gòu)師和半導(dǎo)體工廠絞盡腦汁做了一個性能/耗電比非常出色的產(chǎn)品,但是如果碰上使用 Java 來編寫性能敏感型應(yīng)用的時候往往會被 Android 毫不留情地從工業(yè)時代打回石器時代,而臺式機這邊已經(jīng)是太空時代,差距就這么明顯。
這就是一個整天吹噓所謂“手機看大片”的移動時代的悲哀,但愿可以快點結(jié)束。
寫了這么多東西,肯定有人不耐煩了:你說這么多屁話有啥用,直接告訴老子什么處理器最好不就得了。
就等你這句話,因為這個問題一點都不難回答。
從上面大家可以得知,軟件對性能的影響,所以從現(xiàn)實出發(fā),我推薦大家都選擇 iOS 下的產(chǎn)品,因為這個操作系統(tǒng)對應(yīng)的開發(fā)平臺基本上都是使用本機語言代碼編譯程序的。
這是一個技術(shù)正確的回答,但是“政治”上未必正確,因為 Android 的廠商實在太多了,相關(guān)的用戶群也是海量級,隨便一口口水就能把我給淹沒掉,所以還是需要給這個用戶群體推薦的。
如果以已經(jīng)發(fā)布的產(chǎn)品,我傾向于像 N 記 Tegra 4 這個產(chǎn)品,它有一些比較特別之處。首先,它是集成了 Cortex-A15 四核處理器,這是高通 Krait 架構(gòu)不可能相提并論的微架構(gòu),其次是它的 GPU 部分,雖然不太可能比得上 iPad 4 中 A6X 采用的 PowerVR SGX 554MP4,但是性能和其他同級產(chǎn)品的最快圖形內(nèi)核相比應(yīng)該也是叮當(dāng)馬頭,要知道 Tegra4 的芯片面積只有 80mm^2 級別,而 A6X 已經(jīng)達到 123mm^2。還有就是 N 記似乎和游戲業(yè)界比較熟絡(luò),對于希望手機玩玩游戲的人來說更有保障。
什么?對游戲不感興趣,那就挑個聯(lián)發(fā)科的四核 Cortex-A5 手機好了,最省功夫。
由于 Ti、ST-愛立信的退出,現(xiàn)在移動應(yīng)用處理器的廠商雖然看似熱鬧,但是已經(jīng)露出了一些紅海的跡象,或者說骨頭變硬了、肉變少了,將來剩下的廠商必定是具備較強大技術(shù)儲備和充足資金支持的。
英特爾是最具這樣特征的公司,他們的下一代 Atom 腳步正越來越近,亂序執(zhí)行的引入和比所有對手提前一年導(dǎo)入的 22 納米制程勢必引來業(yè)界對英特爾在移動應(yīng)用處理器上前所未有的重視,至少對我來說就很有點當(dāng)年 Pentium 升級 Pentium Pro 的期待。■<
關(guān)注我們


