av免费福利片在线播放,99热精品久久只有精品,18video性欧美19sex,ysl蜜桃色www,国产精品一区二区久久国产

泡泡網(wǎng)CPU頻道 PCPOP首頁      /      CPU     /      評測    /    正文

輕松讀懂移動(dòng)處理器 CPU微架構(gòu)全解析

    泡泡網(wǎng)CPU頻道1月26日 原文標(biāo)題為《輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版》,對不起,你被標(biāo)題欺騙了,實(shí)際上對許多讀者來說要讀懂本文并不是那么輕松:p

隨著半導(dǎo)體工藝的日趨先進(jìn),智能手機(jī)(Smartphone 或者 Superphone)、平板電腦(Tablet 或者 Pad)已經(jīng)成為許多網(wǎng)友最常使用、最多關(guān)注、更新最快的電子消費(fèi)產(chǎn)品,高度便攜性是這類產(chǎn)品的最關(guān)鍵成功原因。

所謂便攜性自然是指產(chǎn)品必須足夠輕便而且需要有足夠的續(xù)航能力,因此這就要求產(chǎn)品的原件必須足夠省電,只有這樣才能減少散熱和電池體積這兩個(gè)最占體積和重量的問題。

要達(dá)到這個(gè)目標(biāo),肯定要做功能和性能上的妥協(xié),至少相對個(gè)頭更大的筆記本電腦、臺式機(jī)而言,像降低吞吐率或者增加時(shí)延,從實(shí)測性能而言,目前智能手機(jī)或者平板電腦的 CPU、圖形處理器性能基本上相當(dāng)于 6 到 10 年前臺式電腦的水準(zhǔn)。

舉個(gè)簡單的例子,在俄羅斯網(wǎng)站 ixbt 的討論區(qū)上,有這樣的一條帖子,一位名為 ssvb 的網(wǎng)友采用 origenboard.org 的一片 Samsung Exynos 4210 開發(fā)板(配有 Exynos 4210 處理器具備兩個(gè) 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,理論雙精度浮點(diǎn)性能 2GFLOPS)的 HPL 性能為 1.15GFLOPS( 57% 效率,200MFLOPS/瓦) 。

這都是一個(gè)什么概念?我曾經(jīng)在 06 年的時(shí)候用 Pentium D 820 2.8GHz 跑出來的 HPL 性能為 10.12 GFLOPS,Athlon64X2 2.6GHz 為 9.158 GFLOPS。

那么現(xiàn)在臺式機(jī)的 HPL 性能狀況如何?

在去年我用 Core i7 2600K 3.4GHz 配合未支持 AVX 指令的 GotoBLAS(數(shù)學(xué)庫)上得到的 HPL 性能為 51.18 GFLOPS 左右,后來又用支持 AVX 的 OpenBLAS(原 GotoBLAS 開發(fā)者停止更新后的其中一個(gè)后續(xù)開源社區(qū)版)得出的 HPL 性能為 99.38 GFLOPS,到 2013 年支持 AVX2 指令集的 Haswell 架構(gòu)出來后,這個(gè)測試結(jié)果應(yīng)該還能接近再翻番,達(dá)到 200 GFLOPS 級別。

也許你會(huì)說手機(jī)、平板要雙精度干啥呢?請不要忘記在 30 年前的 x86 處理器根本沒有集成任何硬件浮點(diǎn)單元,現(xiàn)在的情況又如何?曾經(jīng)做出號稱最強(qiáng) x87 協(xié)處理器的 Cyrix 后來一頭扎進(jìn)整數(shù)為王的產(chǎn)品策略后現(xiàn)在影都沒了。

“干啥”這個(gè)問題往往是硬件具備并達(dá)到一定性能條件后就會(huì)有答案的,臺式機(jī)上的性能測試軟件和方案會(huì)隨著手機(jī)、平板性能日益強(qiáng)大而變得在這類設(shè)備上運(yùn)行也理所應(yīng)當(dāng),除了上面說的 HPL 外,各類 PC 上流行的測試工具例如 SPEC CPU20xx、3DMark 等也會(huì)是如此。

傳統(tǒng)的 CPU 性能測試的確不能完全適用于手機(jī)、平板的 SoC 芯片(人們把可以在移動(dòng)操作系統(tǒng)上跑應(yīng)用軟件的 SOC 稱作應(yīng)用處理器,簡稱 AP),但是請注意我說這句話是因?yàn)?SoC 并不僅僅有 CPU,還有 GPU、音視頻編解碼器、存儲控制器、非易失性存儲單元、數(shù)模/模數(shù)轉(zhuǎn)換器以及各種輸入輸出周邊等,這使得我們要單純評價(jià)一款 SoC 是否非常好的的時(shí)候可能會(huì)感到頗為傷神。

話雖如此,不過總的來說,SoC 中和性能最密切相關(guān)的依然是 CPU、GPU,因?yàn)橹悄茉O(shè)備里幾乎所有程序的運(yùn)行都必須依仗兩者來執(zhí)行,與用戶的使用感受有直接關(guān)系(請注意,我們這里說的只是指 SoC 芯片中,而非手機(jī)或者平板電腦整體)。因此,縱然手機(jī)、平板處理器型號各異并且內(nèi)中千頭萬緒,我們還是應(yīng)該從大家最關(guān)心的 CPU、GPU 著手來了解。

現(xiàn)在情況簡單多了,按照 ISA(指令集架構(gòu))劃分,因?yàn)槟壳暗氖謾C(jī)、平板 CPU 無非是 ARM、Intel/AMD 兩大陣營,潛在的還有 MIPS,不過目前 MIPS 似乎在這個(gè)領(lǐng)域還成不了氣候,更像是一個(gè)備胎。 

如果你對計(jì)算機(jī)科學(xué)還不是很了解的話,對 ISA 這個(gè)詞可能也不會(huì)很了解,雖然它經(jīng)常出現(xiàn)在一些時(shí)髦的技術(shù)文章中。

電腦顯然并不能直接明白 C、Java、Basic 這樣的高級語言(雖然有人嘗試過開發(fā)高級語言處理器,但是無不失敗告終),搭建在高級語言和 CPU 本機(jī)代碼之間的就是 ISA。

ISA 的全稱是 instruction set architecture,中文就是指令集架構(gòu),有時(shí)候直接稱呼為架構(gòu)(architecture),是指程序員實(shí)際“可見”的指令集,包含了程序員編寫一個(gè)能正確運(yùn)行的二進(jìn)制機(jī)器語言程序的所有信息,涉及到指令、 I/O 設(shè)備等。例如 Intel 的 IA-32、Intel 64(曾經(jīng)名為 IA32e、EM64T 等);ARM 的 ARMv7、ARMv8 等等。

這里的 IA32、Intel 64 或者 ARMv7、ARMv8 其實(shí)是指各自指令集架構(gòu)的不同版本,有時(shí)候我們嫌啰嗦,所以把前兩者統(tǒng)稱 x86,后兩者統(tǒng)稱 ARM。

將 ISA 變成真正可以使用的實(shí)物需要經(jīng)過“實(shí)現(xiàn)”,它包括兩個(gè)層面:組成和硬件。

組成是從計(jì)算機(jī)設(shè)計(jì)的高階層面而言,例如:存儲系統(tǒng)、存儲互連接、CPU(包括算術(shù)、邏輯分支、數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn))設(shè)計(jì),有時(shí)候“組成”又被稱作微架構(gòu)(microarchitecture),英特爾 Nehalem、NVIDIA Kepler、ARM Cotrex-A57 都可以屬于各自某系列芯片的微架構(gòu),其中 Kepler 的 ISA 是 CUDA PTX 和 Cortex-A57 的 ISA 屬于 ARMv8。

硬件通常是指電腦的規(guī)格,包括具體的邏輯設(shè)計(jì)、封裝技術(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年前就決定全面切換到移動(dòng)設(shè)備上,鋪橋搭路的功夫很扎實(shí),而 NVIDIA 和 Intel 的商業(yè)模型都是只用于自家產(chǎn)品(當(dāng)然 NVIDIA 也曾經(jīng)在游戲機(jī)領(lǐng)域做過 RSX 這樣的 IP core 授權(quán))的,所以目前未能在其他 SoC 上看到。

下面的表格給出了這兩年來比較熱門的手機(jī)或者平板電腦 ARM 處理器,它們基本上都被應(yīng)用于各公司的旗艦級產(chǎn)品中。

2011/2013 SoC 對比表
SoC 制程 CPU GPU 內(nèi)存總線 發(fā)布時(shí)間
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 個(gè),其中 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)用、個(gè)人智能消費(fèi)類設(shè)備中最為常見技術(shù)類型,數(shù)十億計(jì)的產(chǎn)品都采用了來自 ARM、MIPS 的 IP core。IP core 被設(shè)計(jì)成可以和芯片中其他邏輯單元(例如視頻編解碼器、I/O 界面、內(nèi)存界面)協(xié)同運(yùn)作形成一枚可以支持特定應(yīng)用的處理器。

IP core 分為兩類:硬核(hard core......不要會(huì)錯(cuò)意了)和軟核(soft core)。硬核是針對特定半導(dǎo)體廠商而優(yōu)化的,對外人來說是一個(gè)提供了外部界面、不修改的“黑盒子”,獲得授權(quán)的廠商通常只能對核外的邏輯參數(shù)進(jìn)行修改,例如 L2 cache 大小,但是 IP core 本身不可修改。而軟核的設(shè)計(jì)代碼則是可以針對不同半導(dǎo)體廠商做編譯和修改,當(dāng)然這要求設(shè)計(jì)廠商具備強(qiáng)大的研發(fā)實(shí)力和經(jīng)驗(yàn),因?yàn)楝F(xiàn)在的 IP core 相當(dāng)復(fù)雜。

簡而言之而言,硬核的性能更高、占用管芯面積更小,而軟核則可以讓不同廠商作進(jìn)一步的修改。

ISA 的“實(shí)現(xiàn)”需要借助各種微架構(gòu),現(xiàn)在的處理器微架構(gòu)基本上涉及以下部分:

流水線化

多核、多線程

SIMD 向量

存儲系統(tǒng)分層結(jié)構(gòu)

流水線

早期一些采用非常簡單的指令集(注意,我們說的不是 RISC)的電腦是采用單周期設(shè)計(jì)的,取指、解碼、執(zhí)行、寫回都是放在同一個(gè)拍(周期)內(nèi)順序完成,此時(shí)的 CPI(每指令周期數(shù))基本上是 1,但是這樣設(shè)計(jì)的效率很低:當(dāng)取指的時(shí)候,其余工位都只能瞎瞪眼等開飯,這樣的設(shè)計(jì)也被稱作非流水線化執(zhí)行。

流水線示意圖
上:非流水線化(順序化)執(zhí)行
下:流水線化執(zhí)行

流水線化則是實(shí)現(xiàn)各個(gè)工位不間斷執(zhí)行各自的任務(wù),例如同樣的四工位設(shè)計(jì),指令拾取無需等待下一工位完成就進(jìn)行下一條指令的拾取,其余工位亦然。

世界上第一臺采用流水線化指令執(zhí)行的電腦為 1961 年的 IBM Stretch 或者說 IBM 7030,具備四級流水線工位,它同時(shí)也是 IBM 第一臺晶體管化電腦。

這樣原本四工位非流水線的一個(gè)周期是 800 個(gè)皮秒的話,在流水線設(shè)計(jì)的處理器上,雖然同樣的指令完成時(shí)間依然是 800 皮秒,但是第二條指令則可能只需要在第一條指令完成時(shí)間加 200 皮秒即第 1000 皮秒就能完成,而非流水線設(shè)計(jì)則需要第 1600 皮秒才能完成。

流水線 pipelined
常見的五周期(FDEMW)流水線形式,對同步處理器來說 Latch 之間為一拍(周期)
對 Pentium 4 這類異步處理器來說,個(gè)別工位(simple ALU)頻率為雙倍即 1/2 拍

RISC 指令集具備指令編碼格式統(tǒng)一、等長的特點(diǎn),在流水線設(shè)計(jì)設(shè)計(jì)上有得天獨(dú)厚的優(yōu)勢,這樣可以使得流水線工位設(shè)計(jì)相對于指令編碼格式不統(tǒng)一、非等長的 CISC(例如 x86 的指令長度為 1 個(gè)字節(jié)到 17 個(gè)字節(jié)不等)來說顯得更容易。

x86 可能需要將一些工位拆開(這意味著流水線工位更多或者流水線長度更深),例如英特爾的第一款流水線化處理器——486 的指令解碼就是拆成兩個(gè)工位。

流水線設(shè)計(jì)可以讓指令完成時(shí)間更短(理論上受限于流水線執(zhí)行時(shí)間最長的工位),因此將一些工位再拆開的話,雖然依然是每個(gè)周期完成一條指令,但是“周期”更短意味著指令吞吐時(shí)間進(jìn)一步縮短,每秒能跑出來的指令數(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ù)都遠(yuǎn)超出基本的四(或者五)工位流水線設(shè)計(jì)。更長的流水線雖然能提高頻率,但是代價(jià)是耗電更高而且可能會(huì)有各種性能懲罰。

既然流水線設(shè)計(jì)可以實(shí)現(xiàn)不間斷取指、解碼、執(zhí)行、寫回,那為何不干脆同時(shí)做幾條流水線一起取指、解碼、執(zhí)行、寫回呢?這就引出了超標(biāo)量設(shè)計(jì)。

超標(biāo)量

上圖就是一個(gè)三路超標(biāo)量四工位流水線的指令/周期執(zhí)行示意圖,可以看到 CPI 從 1 變成 0.33,即每周期執(zhí)行 3.33 條指令,這樣的改進(jìn)幅度是令人著迷的,因此在初期的時(shí)候超標(biāo)量甚至被人們贊美為標(biāo)量程序的向量式處理。

不過在現(xiàn)實(shí)中不可能都這樣,因?yàn)楝F(xiàn)在的處理器執(zhí)行不同指令時(shí)候的“執(zhí)行”段工位并不完全一樣,例如整數(shù)可能短一些,浮點(diǎn)或者向量和 Load/Store 指令需要長一些,加上一些別的因素,實(shí)際大部分程序的實(shí)際 CPI 都是 1.x 甚至更高啊。

例如:

a = b * c
d = a + 1

這里的第二條指令需要使用到第一條指令的計(jì)算結(jié)果,因此必須等待第一條指令完成后才能跑第二條指令,更重要的是,在不少處理器上乘法指令并非一個(gè)周期而是需要多個(gè)周期才能完成。在遇到這樣的情況時(shí),就不能實(shí)現(xiàn)多指令發(fā)射而且會(huì)出現(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: ...

這里的第二條指令是一個(gè)條件分支指令(ble 是小于或等于轉(zhuǎn)移指令,ble L1 表示如果寄存器 a 小于等于 5 就轉(zhuǎn)移到 L1 這行執(zhí)行 mov d,b 這條指令)。

這條指令抵達(dá)“執(zhí)行單元”的時(shí)候,位于流水線前段的取指單元和解碼單元肯定已經(jīng)拾取和解碼了若干條指令,但是哪一條指令才應(yīng)該接下來被執(zhí)行呢?應(yīng)該是第三、四條還是第五條呢?

在第二行的條件分支指令完成之前,處理器只能等待。處理器平均六條指令就會(huì)遇到一條分支指令,因此流水線設(shè)計(jì)帶來的大部分性能提升優(yōu)勢此時(shí)會(huì)被喪失掉。

為此處理器必須進(jìn)行“猜測”,按照猜測結(jié)果進(jìn)行取指并推測哪些指令能開始執(zhí)行,不過這些指令的執(zhí)行結(jié)果并不會(huì)被遞交(寫回)直到分支指令的執(zhí)行結(jié)果完成。

如果猜錯(cuò)的話,這部分指令的結(jié)果就會(huì)被扔掉,這也意味著這些指令對應(yīng)的時(shí)間或者周期數(shù)會(huì)被浪費(fèi)掉。當(dāng)然如果猜中的話,處理器就能全速運(yùn)行了。

那么如何去做“猜測”呢?

一個(gè)辦法是所謂的靜態(tài)分支預(yù)測,例如在指令編碼格式里留出一個(gè)位元作為預(yù)測信息,編譯器編譯的時(shí)候,對這個(gè)位元進(jìn)行標(biāo)記,告訴處理器該跑那條分支,不過這對于已經(jīng)采用了不具備這類條件執(zhí)行指令的舊式 ISA 二進(jìn)制程序來說這樣顯然是不可能的。

另一個(gè)辦法就是“運(yùn)行過程中”進(jìn)行猜測即動(dòng)態(tài)分支預(yù)測,通常是采用類似被稱作“片上分支預(yù)測表”的單元來記錄最近分支的地址以及用一個(gè)位元指示出哪一條分支是最近是否被采用的。

不過現(xiàn)在大多數(shù)處理器實(shí)際上是用兩個(gè)位元來作標(biāo)記的,因此單次的分支“不跳轉(zhuǎn)”并不會(huì)馬上導(dǎo)致一般的“跳轉(zhuǎn)”預(yù)測出現(xiàn)反轉(zhuǎn)(這對于循環(huán)邊界來說是很重要的)。不過兩位元分支預(yù)測并有考慮到分支相關(guān)性,所以人們后來有采用兩級分支預(yù)測來解決這個(gè)問題,使得預(yù)測精度大大提高。

動(dòng)態(tài)分支表需要占用相當(dāng)可觀的芯片面積,但是另一方面來說分支預(yù)測對流水線化處理器是相當(dāng)重要的,所以是物有所值的。

不過就算是最好的分支預(yù)測技術(shù)也可能會(huì)猜錯(cuò),對于超級流水線或者說深流水線來說就會(huì)有很多指令的結(jié)果會(huì)被扔掉,這樣的情況被稱作 mispredict penalty(誤預(yù)測性能懲罰)。

像 Pentium III 這類具備非常先進(jìn)分支預(yù)測技術(shù)的處理器,在遇到分支預(yù)測失敗的時(shí)候,也會(huì)出現(xiàn) 10~15 個(gè)周期的性能損失,因此即使正確命中了 90% 的分支,也會(huì)因?yàn)榉种д`預(yù)測導(dǎo)致 30% 的性能損失,所以 Pentium III 其實(shí)很多時(shí)候會(huì)出現(xiàn) 30% 的時(shí)間在走冤枉路。

人們在 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)小于或者等于的時(shí)候就進(jìn)行賦值”,只有在條件為“真”的時(shí)候才會(huì)遞交執(zhí)行,因此被稱作條件執(zhí)行指令。

采用了判定指令后,原來的 5 條指令變成 3 條,避免了兩條分支指令,cmp 和 mov 可以并行執(zhí)行實(shí)現(xiàn) 50% 的性能提升,消除了分支預(yù)測錯(cuò)誤導(dǎo)致的大量誤預(yù)測懲罰。

ARM 從一開始具備完整的判定指令集,而 MIPS 和 x86 后了也都添加了條件賦值指令,IA64(EPIC)中幾乎每條指令都具備條件執(zhí)行功能。

為了充分利用由于分支以及長時(shí)延指令導(dǎo)致的流水線“氣泡(停擺)”而浪費(fèi)的資源,人們引入了亂序執(zhí)行(OoOE)技術(shù)。當(dāng)出現(xiàn)需要等待某條指令的時(shí)候,程序中的指令會(huì)被“重排序(Re-Ordered)”,使得其他指令可以被執(zhí)行。

對于像 x86 這樣的 ISA 來說,32 位模式下的寄存器只有 8 個(gè)(ARMv7 是 16 個(gè)),如果程序里的變量較多,就會(huì)導(dǎo)致多個(gè)變量使用同一個(gè)寄存器的情況發(fā)生,這里有可能出現(xiàn)先讀后寫的偽相關(guān)現(xiàn)象。

微架構(gòu)里解決寄存器先讀后寫(WAR)偽相關(guān)的辦法就是寄存器重命名。在微架構(gòu)的寄存器堆里塞進(jìn)比 ISA 寄存器更多的物理寄存器,透過索引式寄存器堆或者保留站方式,將 ISA 寄存器映射到物理寄存器,從而實(shí)現(xiàn)亂序執(zhí)行。

ARM Cortex-A8、Intel Pentium、Intel Atom(Bonnell 內(nèi)核)、IBM Cell PPU 都屬于順序執(zhí)行,它們選擇順序執(zhí)行的原因主要是為了省電,因?yàn)?OoOE 需要大量的晶體管來實(shí)現(xiàn)。隨著制程的改進(jìn),OoOE 的開銷會(huì)逐漸淡化變得在某些場合里可行,因此像 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)認(rèn)為有兩個(gè)處理器的話,上面的兩條 thread 就能同時(shí)執(zhí)行了,這就是多線程。

多線程有三種類型,即 SMT、FGMT 和 CGMT,其中最早實(shí)現(xiàn) SMT 的處理器是 Intel 的 Pentium 4,而 FGMT 大都在 in-order(相對于 OoOE)處理器上采用例如 Cell PPU 和所有的 GPU 上。

隨著半導(dǎo)體工藝提升以及功率墻壁壘橫亙在前面導(dǎo)致超級流水線提升頻率和各種指令并行度措施不再靈光后(這些限制其實(shí)在 20 多年前就被處理器廠商和科研界預(yù)見到,例如 1993 年 DEC 西部研究院 David W.Wall)的論文《LIMITS OF INSTRUCTION-LEVEL PARALLELISM》,1993 年英特爾在路線圖中明確提出在 P8(當(dāng)時(shí)還是 P5 或者說 Pentium)時(shí)代引入多核處理器)廠商開始在片上實(shí)現(xiàn)多個(gè)內(nèi)核,這也就出現(xiàn)了多核處理器。

多核處理器能讓支持多線程的程序、操作系統(tǒng)跑得更快,但是目前大部分的應(yīng)用通常更偏好于單線程性能出色的處理器,因此你會(huì)看到單線程性能較強(qiáng)的雙核處理器比單線程性能較弱的多核處理器更快的情況發(fā)生。

到目前為止我們介紹了指令并行、線程并行的微架構(gòu)實(shí)現(xiàn),不過除了這兩種并行技術(shù)外,還有另一種非常常見的并行技術(shù):數(shù)據(jù)級并行化,通常以 SIMD 向量方式實(shí)現(xiàn)。

SIMD 就是單指令多數(shù)據(jù)的縮寫,理解起來并不困難,例如執(zhí)行一條 SIMD 加法指令就能在一個(gè)周期里完成 64 條數(shù)據(jù)流發(fā)來的 64 個(gè)數(shù)字的加法運(yùn)算。

SIMD 的初衷是為了攤薄大量執(zhí)行單元上的控制單元成本,順帶減少程序的尺寸,因?yàn)镾IMD 只需要復(fù)制一份代碼就能開跑,而多核處理器(或者說 MIMD)需要每個(gè)內(nèi)核都復(fù)制一份代碼和在 cache 上共享多個(gè)程序拷貝。

SIMD 最好是用來跑結(jié)構(gòu)相同的一堆數(shù)據(jù),因此它是數(shù)據(jù)級并行的重要實(shí)現(xiàn)方式之一,而這類應(yīng)用主要是多媒體為主,所以很多 ISA 都提供了專門的 SIMD 擴(kuò)展來執(zhí)行多媒體應(yīng)用,ARM 有 NEON、Intel 有 MMX/SSE/AVX 等。

無論是馮·諾依曼還是哈佛結(jié)構(gòu)的處理器,最理想的情況下當(dāng)然是有無限大的存儲空間和 0 時(shí)延的存儲系統(tǒng)了,不過這顯然是無法做到的,因此人們就提出了分層式的存儲系統(tǒng)結(jié)構(gòu),從寄存器開始每往下一層容量就更大,但是速度也更慢:

Memory Hierarchy

例如對于 ARM Cortex-A9(四核 Tegra 3 的批發(fā)報(bào)價(jià)一般為 15~21 美元)來說:

物理寄存器堆大小是 56*32-bit = 224 字節(jié)

L1 cache 是 32-KiB(時(shí)延 4 周期)

L2 Cache 是 1-MiB,不同大小區(qū)段的時(shí)延是:

  • 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,時(shí)延大概是 L2 + 110ns,帶寬一般都有 1000MiB/s 以上。

基本上所有的手機(jī)都是采用 NAND 型閃存或者閃存卡作為 DASD(直接存取存儲設(shè)備)來存放程序和數(shù)據(jù),大小一般在 4 GiB 以上,如果搭配 Class 4 的 8 GiB microSD 卡的話讀寫帶寬一般只有 1.x MiB/ss~3.x MiB/s(傳輸數(shù)據(jù)塊大小為 4KiB 時(shí))和 0.005 MiB/s~1.x MiB/s,價(jià)格一般為 20 元人民幣左右 。

這里說的時(shí)延是從數(shù)據(jù)載入指令發(fā)出到數(shù)據(jù)抵達(dá)處理單元所需的時(shí)間,這通常并不難理解。

那么這里的 TLB 時(shí)延(TLB_L1/TLB_L2)又是怎么回事呢?這是因?yàn)樘摂M內(nèi)存的存在。

虛擬內(nèi)存(virtual memory)的作用一般有兩個(gè):確保多個(gè)程序之間可以有效、安全地實(shí)現(xiàn)內(nèi)存共享;讓程序以為有大一塊連續(xù)的內(nèi)存空間(例如虛擬內(nèi)存空間地址有 64-bit,但是我們的物理內(nèi)存實(shí)際上只有 16GiB 或者說系統(tǒng)中的物理地址空間只有 34-bit,又或者是虛擬內(nèi)存空間是 32-bit,而物理定址空間是 40-bit)。

對于用戶程序在虛擬內(nèi)存空間里操作的處理器,是需要把虛擬內(nèi)存空間地址轉(zhuǎn)換為物理內(nèi)存空間地址,這就需要進(jìn)行地址轉(zhuǎn)換了。負(fù)責(zé)這個(gè)功能的單元一般被稱作內(nèi)存管理單元(MMU),有時(shí)候它又被稱作分頁內(nèi)存管理單元,當(dāng)然 MMU 的功能不僅僅是地址轉(zhuǎn)換(否則就不會(huì)被蓋這么大的名頭了)。

內(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 來改善這個(gè)問題。

不同的處理器 TLB 大小都不一樣,以我們這里舉例的 Cortex-A9 為例,本身就存在多種 TLB 配置形式,它的 L1 D-TLB 是 32 個(gè)條目(或者說分頁地址映射),而 L1 I-TLB 可以配置為 32 或者 64 條目。

總之,早期的單周期式架構(gòu)效率很差,因此人們引入了流水線設(shè)計(jì),可以充分使用各級工位,各工位執(zhí)行時(shí)間越短自然 CPU 的頻率可以更快;然后人們又引入了超標(biāo)量設(shè)計(jì),讓 CPU 上可以同時(shí)跑幾條指令,隨之而來的相依性等問題讓架構(gòu)師們想出了分支預(yù)測、亂序執(zhí)行、寄存器重命名等等技術(shù)來保證處理器的指令執(zhí)行效率。

除了提高指令并行度來改善處理器性能外,還有數(shù)據(jù)并行、線程化并行等方法,但是后兩者都需要程序員和編譯器協(xié)助,并非免費(fèi)。

影響處理器性能還有內(nèi)存的帶寬和時(shí)延問題,因?yàn)槿≈负蛿?shù)據(jù)讀寫都必須透過內(nèi)存訪問來完成,層階式設(shè)計(jì)是目前成本最為合理的方式。

在介紹一些稍微復(fù)雜的技術(shù)概念之后,我們不妨想看看 ARM 的由來。

ARM ISA 屬于 RISC(精簡指令集計(jì)算機(jī),最關(guān)鍵特征是指令編碼格式統(tǒng)一),ARM 本身就是 Advanced RISC Machines 的縮寫,不過在早期它的全稱是 Acorn RISC Machine(1983 年 10 月開始設(shè)計(jì),1985 年實(shí)現(xiàn)第一枚硅片),因?yàn)楣井?dāng)時(shí)的名字叫 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 的多番實(shí)地考察和研究后,覺得在(當(dāng)時(shí))設(shè)計(jì)一個(gè)處理器的研發(fā)成本并不是很高,于是決定開始做 Acorn RISC Machine 這個(gè)項(xiàng)目。

基于 Acorn RISC Machine 的 ARM2aS 處理器獲得了蘋果公司名為 Mobius 的類 Apple 2 風(fēng)格原型驗(yàn)證機(jī)接洽,這個(gè)項(xiàng)目后來因?yàn)樘O果擔(dān)心和大賣的麥金塔電腦產(chǎn)生沖突而腰斬,但是這次接觸對 ARM 處理器的發(fā)展產(chǎn)生了一定的推動(dòng)作用,因?yàn)?Mobios 團(tuán)隊(duì)對 ARM 寄存器做了一些小修改使得原型機(jī)的基準(zhǔn)性能有不同幅度的顯著改善。

后來蘋果開始著手開發(fā)名為 Newton 的個(gè)人掌上電腦,他們發(fā)現(xiàn)似乎只有 Acorn RISC Machine 能滿足要求耗電要求,但是當(dāng)時(shí) Acorn RISC Machine 處理器的內(nèi)存管理單元并非 Acorn 自家,而是由 MEMC 公司提供芯片實(shí)現(xiàn)的,Acorn 沒錢開發(fā)這個(gè)功能。于是雙方就有了合作的想法,到了 1996 年 Acorn 和蘋果合資組建了 ARM 公司,不過 Acorn 公司依然獨(dú)立存在著直到 2000 年才基本煙消云散。

和一般的 RISC 不同的是,ARM ISA 除了指令長度固定為 32-bit(ARMv8 的 AArch 提供了 64-bit)的“經(jīng)典 ARM” ISA 外,還有長度為 32-bit 或 16-bit 名為 Thumb(拇指)的 ISA 擴(kuò)展。

Thumb 的目的是在低端或者說入門市場應(yīng)用中改善 ARM 的指令密度(官方說法是減少大約 25%~35% 代碼空間,按照 Linaro Dave Martin 的 Linux Kernel 編譯結(jié)果,代碼空間少了大概 20%),提高指令密度可以讓 cache 塞進(jìn)更多的指令減少命中缺失,更高密度的指令編碼也有利于多線程因?yàn)榭捎眉拇嫫髻Y源更多了等。大部分的 Thumb 指令編碼都能(經(jīng)過位于指令解碼器前的一個(gè)轉(zhuǎn)譯器實(shí)現(xiàn)簡單轉(zhuǎn)換)對應(yīng)到經(jīng)典 ARM 指令編碼格式上。

Thumb 是 ARM 在嵌入式市場得以攻城拔寨的關(guān)鍵利器,在很長一段時(shí)間里都鮮有對手,Cortex 家族中用于單片機(jī)為主應(yīng)用的 Cortex-M 甚至只支持 Thumb-2 指令(ARMv7 M),同樣以授權(quán)方式運(yùn)營的 MIPS 直到 2010 年才推出類似的 microMIPS 指令。

VFP(Vector Floating Point,向量浮點(diǎn))是 ARM 架構(gòu)的浮點(diǎn)單元協(xié)處理器擴(kuò)展,提供了完全遵循 IEEE 754-1985 的低成本單精度和雙精度浮點(diǎn)支持。雖然 VFP 打著向量的名頭,不過這些“向量”指令的各個(gè)向量是串列方式執(zhí)行(或者需要單精度搭配雙精度才能實(shí)現(xiàn)并行執(zhí)行)的,并不能提供真正的 SIMD 向量并行,因此這個(gè)向量模式被拿掉了。

Advanced SIMD(NEON)擴(kuò)展在微架構(gòu)實(shí)現(xiàn)中被稱作 MPE(媒體處理引擎),是一個(gè) 64-bit 和 128-bit SIMD 指令集擴(kuò)展,支持 8/16/32/64 位整數(shù)和 32-bit 單精度浮點(diǎn)數(shù),共享使用 VFP 的寄存器。從 ARMv8 開始,NEON 在 AArch 64-bit 模式下提供完全遵循 IEEE 754 和雙精度支持并且透過 VFPv4 具備 32 個(gè) 128-bit 寄存器。

Cortex-A9 的代號為 Falcon,是在 ARM 公司在 2007 年 10 月 3 日發(fā)布的 IP core,距今大約有五個(gè)年頭。

Cortex-Ax 這個(gè)名字中后綴 A 表示屬于 Application(應(yīng)用處理器),Cortex 另有 M 系列(即單片機(jī)或者微控制器)、R 系列(實(shí)時(shí)應(yīng)用),這里顯然是 A 系列的規(guī)格最高,具備 MMU(內(nèi)存管理單元)。

基于 Cortex-A9 的芯片實(shí)現(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)高端手機(jī)、智能平板陣營中最主流的 CPU 內(nèi)核。

輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版 輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版
Cortex-A8 微架構(gòu) Cortex-A9 微架構(gòu)

Cortex-A9 的前身是 Cortex-A8,它們同屬于 ARMv7 ISA 的實(shí)現(xiàn),和 Cortex-A8 相比,Cortex-A9 除了流水線更短、增加了專門的多核方案等大家熟知的變化外,還具備多項(xiàng)改進(jìn)。

1、Cortex-A9 擁有眾多 RISC CPU 的先進(jìn)特性,例如推測數(shù)據(jù)存取、動(dòng)態(tài)分支預(yù)測、多指令發(fā)射、硬件 Cache 一致性、亂序執(zhí)行、寄存器重命名,號稱史上第一枚亂序執(zhí)行移動(dòng)處理器。

除了雙指令發(fā)射和分支預(yù)測外,Cortex-A8 都并不具備,因此在 Cortex-A9 上匯編碼優(yōu)化、NEON SIMD 的重要性相對來說要低很多(經(jīng)過調(diào)優(yōu)的匯編碼在 A8 上可以做到 10-30 倍性能,而 A9 一般只會(huì)有 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 命中缺失時(shí)候的性能懲罰時(shí)間。

3、Cortex-A9 的 L2 Cache 位于“核外”( ARM 對應(yīng)的方案是 PL310 或者更新一點(diǎn)的 L2C-310),而 Cortex-A8 則是速度更快的核內(nèi) L2 Cache。

從對 Cortex-A8 1GHz(三星 Samsung Hummingbird,即 Exynos 3110)和 CortexA-A9 1.2GHz(三星 Exynos 4210)實(shí)測來看,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è)計(jì),L1 數(shù)據(jù) Cache 具備硬件 Cache 一致性。各個(gè)內(nèi)核共享外部 L2 Cache。

5、Cortex-A9 具備完整的 VFPv3 FPU,而 Cortex-A8 則只有縮水版的 VFPlite,主要區(qū)別是 Cortex-A9 的大多數(shù)浮點(diǎn)操作都只需要 1 個(gè)周期,而 Cortex-A8 需要 10 個(gè)周期,因此 Cortex-A8 的浮點(diǎn)性能相當(dāng)爛。

6、Cortex-A9 支持半精度(fp16),而 Cortex-A8 只支持 32-bit 單精度(FP32)和雙精度(FP64),不過半精度在 CPU 級別的應(yīng)用并不是很多見。

7、Cortex-A9 不能同時(shí)發(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 寄存器的話就非常慢,會(huì)導(dǎo)致 Cortex-A8 的流水線停擺 20 個(gè)周期。

9、Cortex-A8 的 NEON 和 ARM 各有一個(gè)分離的 L/S 單元,如果一起對同一塊 Cache Line 進(jìn)行 Load 或者 Store 操作的話,會(huì)導(dǎo)致額外的 20 個(gè)周期延遲。

10、Cortex-A9 對多線程化同步采用 LDREX/STREX,不會(huì)杜塞所有的內(nèi)核,而 Cortex-A8 對互斥使用簡單的斷禁制。

11、所有的 Cortex-A8 都集成了 NEON SIMD 單元,但是 Cortex-A9 則未必,例如 NVIDIA Tegra 2 就沒有集成 NEON,不過 Tegra 3 則具備 NEON。

如果使用 7-zip(不包含任何浮點(diǎn))實(shí)測來看,Cortex-A8 1GHz 的壓縮(受內(nèi)存時(shí)延、數(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)實(shí)現(xiàn),是 ARM 首次引入三路指令解碼的微架構(gòu) IP core,目前三星的 Exynos 5 5250(雙核,32nm HKMG,1.7GHz)是市場上能看到的第一波 Cortex-A15 產(chǎn)品,Chromebook、Nexus 10(均在 2012 年 10 月發(fā)布)都采用了這枚芯片。

輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版

和 Cortex-A9 相比,Cortex-A15 有非常明顯的變化:

1、整數(shù)流水線最短工位數(shù)達(dá)到 15 級,管芯面積占用比 Cortex-A9 高一倍。

2、采用三路超標(biāo)量微架構(gòu),可以每個(gè)周期取指四條指令,解碼器每個(gè)周期可以為發(fā)送單元提供 3 條指令,而指令發(fā)射單元可以亂序提供最高 8 個(gè)微操作供執(zhí)行單元運(yùn)行。

相比之下,A9 的解碼器只能每周期跑兩條指令,派發(fā)單元每周期派發(fā) 4 個(gè)微操作給執(zhí)行單元。

3、Cortex-A15 的動(dòng)態(tài)分支預(yù)測技術(shù)和 Cortex-A8/A9 差不多,但是 A15 引入了一個(gè) 64 條目的 microBTB,而此前的 A8/A9 并不具備這樣的分層結(jié)構(gòu)。動(dòng)態(tài)分支預(yù)測能力是影響現(xiàn)代風(fēng)格處理器的關(guān)鍵因素之一,像 Pentium 4 的 BTB 是 4K 條目,SandyBridge 據(jù)說達(dá)到 8K~16K。

雖然 A15 的兩級 BTB 條目總數(shù)較 A8/A9 少,但是 A15 的 Return Stack 條目數(shù)從 8 條增加到了 18 條,取指帶寬從之前的 64-bit 提升到 128-bit,而且完全支持邊界非對齊地址的拾取。

4、Cortex-A15 支持 VFPv4,具備硬件 FMA 指令執(zhí)行,可以在同頻下提供兩倍的峰值浮點(diǎn)性能。此外,A15 還具備硬件除法指令,在 A9 上這需要接近 50 個(gè)周期來執(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 都有一個(gè)類似的 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 個(gè) uop),逐步改進(jìn)。

Cortex A15 的整數(shù)性能為 3.5~4.01 DMIPS/MHz,相比起 A9 的 2.5 DMIPS/MHz 和 A8 的 2.0 DMIPS/MHz 有明顯的改進(jìn),不過因?yàn)槿烦瑯?biāo)量而帶來的各種資源增加,A15 需要更先進(jìn)的制程(32 納米或更先進(jìn))才能在手機(jī)、平板上變得比較適用。

輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版
上圖是高通 2012 年 11 月于分析者日會(huì)議上公布的 AP 產(chǎn)品路線圖

雖然 2012 年年初的時(shí)候 NVIDIA Tegra 3 大放異彩,但是到了臨近年末的時(shí)候,高通的 Snapdragon 4 Pro APQ8064 卻已經(jīng)是成為了幾乎所有性能導(dǎo)向新 Android 手機(jī)的主角,其中一個(gè)重要原因就是它采用的 Krait 微架構(gòu)能提供對手不具備的特性。

Krait 微架構(gòu)是高通第四代 Snapdragon(驍龍)處理器所搭配的 CPU 內(nèi)核微架構(gòu),是 ARMv7 架構(gòu)的實(shí)現(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)的微操作指令)、三路超標(biāo)量、VFP4 浮點(diǎn)單元、128-bit SIMD 處理能力(高通稱 SIMD 單元為 VeNum,ARM 自己則稱之為 NEON)以及基于 A15 同級的半導(dǎo)體制程節(jié)點(diǎn)。至于有人說 Krait 是 A9 的改進(jìn)版,這樣的觀點(diǎn)我很難認(rèn)同,它和 Scorpion 都類似于當(dāng)年 DEC 獲得 ARMv4 ISA 授權(quán)而自行研發(fā)的微架構(gòu)。

不過另一方面,Krait 的亂序執(zhí)行要遜色于 Cortex-A15,后者具備八個(gè)指令發(fā)射端口和八個(gè)執(zhí)行端口,每一個(gè)執(zhí)行端口都對應(yīng)一個(gè)(準(zhǔn))保留站(有些類似于 AMD K7-K10),而 Krait 只有四個(gè)指令發(fā)射端口和七個(gè)執(zhí)行端口,并且采用的是類似 Cortex-A9 或者說 Pentitum Pro 方式的單個(gè)大規(guī)模指令發(fā)射隊(duì)列單元。

微架構(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í)行 部分
浮點(diǎn)單元 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)實(shí)測試中,Krait 的表現(xiàn)和它的微架構(gòu)一樣,提供了比 Cortex-A9 更強(qiáng)的性能,在對單線程性能較高的應(yīng)用中,即使是雙核版的 Karit 都可以比四核 Cortex-A9 更快。

正如我們前面提過的,蘋果公司在上世紀(jì)九零年代就已經(jīng)和 ARM 合作并且提供了一些微架構(gòu)設(shè)計(jì)上的修改方案,因此蘋果對 ARM 一點(diǎn)都不陌生甚至有非常豐富的經(jīng)驗(yàn)。

從 iPad、iPhone 4/iTouch 4、Apple TV 2 開始,蘋果開始真正介入 ARM 芯片設(shè)計(jì),推出了名為 A4 的自行設(shè)計(jì) ARM 處理器。A4 采用了 ARM 授權(quán)的 Cortex-A8 IP Core,但是蘋果找來了 Intrinsity 公司(已經(jīng)被蘋果收購)和三星公司合作進(jìn)行了一些調(diào)優(yōu),可以讓 A4 的頻率跑得比基于上一代制程的 Cortex-A8 更快。曾經(jīng)有說法認(rèn)為 A4 的 L2 cache 大小是 640KiB,但是后來確認(rèn)修正為 512KiB(這是 ARM Cortex-A8 內(nèi)核的可選配置方式之一)。

A5 系列依然是采用 ARM IP core,從 Cortex-A8 升級為 Cortex-A9 雙核,不過整個(gè) A5 系列出現(xiàn)了三個(gè)版本,即 APL0498、APL2498、APL5498(A5X),三個(gè)版本的芯片面積各不一樣,其中 A5X 的 GPU 是四核 PowerVR 5 并且擁有 4 通道內(nèi)存總線,定制化設(shè)計(jì)在這里體現(xiàn)得非常明顯。

真正的定制化設(shè)計(jì)是從 A6 開始,蘋果公司給 A6 搭配的 CPU 內(nèi)核是完全有自己團(tuán)隊(duì)開發(fā)的 Swift,不僅這樣,蘋果還提出了一個(gè)新的名字:ARMv7s。傳統(tǒng)上,ARMv7 是屬于 ISA 版本名稱,不過 ARMv7s 至今都并未出現(xiàn)在 ARM 官網(wǎng)的公開資料里,因此 ARMv7s 可能并非 ARM 的產(chǎn)物,而是蘋果自己在 ARMv7 基礎(chǔ)上做的一個(gè)架構(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 相比有哪些改進(jìn)呢?蘋果公司并未詳細(xì)說明,傳統(tǒng)上這家公司就是這樣,千方百計(jì)捂著,不過 Anandtech 利用一些自己編寫的微型基準(zhǔn)測試程序進(jìn)行了一些探測,以程序員的角度大致估量出了 Swift 的微架構(gòu)是長得如何了。

在前端部分,Swift 具備三個(gè)指令解碼器,可以每個(gè)周期完成三條指令的解碼,而在指令分發(fā)器上,具備五個(gè)發(fā)射端口,浮點(diǎn)單元、整數(shù)單元各占兩個(gè),還有一個(gè)專供 Load/Store 單元使用,具備亂序執(zhí)行能力、整數(shù)流水線深度為 12 級,cache 子系統(tǒng)的時(shí)延比 Cortex-A9 低了差不多一半。

“ARMv7s”的設(shè)立估計(jì)就是讓編譯器獲知編譯執(zhí)行對象是 Swift,這樣就能對各種指令順序進(jìn)行一些預(yù)調(diào)度,確保盡可能低的 CPI。

簡而言之,A6 系列就是采用了比 A5 系列更先進(jìn)制程和微架構(gòu)的產(chǎn)物,其中的 CPU 內(nèi)核則是蘋果首次真正完全執(zhí)行開發(fā)的設(shè)計(jì),未來是否會(huì)在 GPU 上也有類似的動(dòng)靜將會(huì)是值得關(guān)注的。

Atom 是英特爾計(jì)劃實(shí)現(xiàn) x86 anywhere 戰(zhàn)略的重要產(chǎn)品,為此它不惜賣掉了口碑不錯(cuò)的 Xscale 系列 ARM 處理器部門給 Marvel,從 2008 年 3 月發(fā)布迄今已經(jīng)有了 45nm 和 32nm 兩代制程,產(chǎn)品型號可以說是多如牛毛,就代號而言,有最初的 Silverthrone、Diamondville,然后經(jīng)過制程改進(jìn),分別有了 Lincroft 和 Pineview,“新近”的 Cedarview 則是源自 Pineview。

不過這么多型號,到目前為止它們所基于的內(nèi)核微架構(gòu)都是 Bonnell。第一代的 Atom 處理器(Silverthrone)是 45 納米高性能制程制造,但是需要另外搭配一個(gè) TDP 兩瓦的 130nm 制程芯片組,這枚 Atom 雖然有低于 1 瓦的版本,但是此時(shí)很多功能都被關(guān)閉,性能很弱,考慮到那個(gè)芯片組,根本不會(huì)有人拿這個(gè)做手機(jī)產(chǎn)品。

兩年后的 Lincroft 集成了 GPU、視頻單元以及內(nèi)存控制器,采用專門的 45 納米 SoC 工藝制成,但是依然需要搭配一個(gè)代號 Langwell、由臺積電 65nm 制程生產(chǎn)的 I/O 芯片,兩者合起來的名字叫 Morrestown 平臺,這個(gè)系列中的 Z600 被嘗試用來做了一兩款手機(jī),但是太高耗電的問題使得它們依然難以成為智能手機(jī)市場的競爭者。

到了 2012 年,名為 Medfield 的新平臺似乎讓英特爾的支持者看到了些許的曙光,因?yàn)樵诮?jīng)過三次制程技術(shù)和三個(gè)不同的設(shè)計(jì)后,現(xiàn)在英特爾終于有了一個(gè)可以在耗電上達(dá)到智能手機(jī)要求的低功耗產(chǎn)品,這個(gè)平臺中基于 32 納米 SoC 制程的 Penwell 芯片集成了代號 Saltwell 的內(nèi)核,在微架構(gòu)上,Saltwell 和之前所有 Atom 處理器的內(nèi)核微架構(gòu)其實(shí)都是幾乎一樣的,都屬于 Bonnell 微架構(gòu),不過 Saltwell 由于采用了更精密的 32nm 制程,得以在微架構(gòu)上做一些優(yōu)化,因此在細(xì)節(jié)上是有一些不同的。

輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版
上圖為第一代 Bonnell 微架構(gòu)(Silverthorne)
到了 Saltwell(第三代 Bonnell)BTB 為 8096,具備 uop cache

Bonnell 采用超標(biāo)量流水線設(shè)計(jì),可以每個(gè)周期執(zhí)行最多兩條指令,指令需要遵循一定配對原則才能實(shí)現(xiàn)超標(biāo)量執(zhí)行(類似于 Pentium 的 U/V 設(shè)計(jì)),具備 16 級工位,支持 x86_64 指令集以及最高 SSE3 擴(kuò)展,但是手機(jī)版本只支持 32-bit ISA,內(nèi)存容量也被限制在 1GiB,對應(yīng)平板和低端筆記本等版本則打開了 64-bit ISA 支持,內(nèi)存容量放寬到 2~4GiB。

相對于當(dāng)前的許多競爭對手來說,英特爾在產(chǎn)品技術(shù)細(xì)節(jié)公布上要大氣許多,各種數(shù)據(jù)表、涉及微架構(gòu)內(nèi)部關(guān)鍵特征的編程優(yōu)化手冊都能在產(chǎn)品發(fā)布后就能公開下載到,這讓我們可以更詳細(xì)的為大家介紹這款產(chǎn)品。

1、Saltwell 的分支預(yù)測器是一個(gè)具備 8096 條目(兩倍于 Bonnell 4096 條目)的全局式分支預(yù)測器;

2、Lincroft 時(shí)代引入的 48 字節(jié)后段取指緩存(post-fetch instruction buffer)在 Saltwell 里升格為一個(gè)高速緩存(Cache),以便減少 Saltwell 的重復(fù)取指。該技術(shù)類似于 Conroe/Merom 的 Loop Stream Detector(循環(huán)指令流偵測器),前面我們在介紹 ARM Cortex 微架構(gòu)的時(shí)候也有提到類似的技術(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è)計(jì);

5、Saltwell 能實(shí)現(xiàn)更多的整數(shù)指令配對以及更快的 memcopy 微代碼規(guī)則。

6、加入了不間斷時(shí)間標(biāo)簽計(jì)數(shù)器(TSC)和本地 APIC 計(jì)時(shí)器,主要是為了協(xié)助電力管理和減少喚起 CPU 的情況。

7、L2 Cache 維持之前的 512-KiB 8 路相關(guān)聯(lián)設(shè)計(jì),運(yùn)行于內(nèi)核同頻,讀取帶寬為每周期 32 字節(jié)(256-bit),可支持 32 個(gè)待發(fā) cache 請求。改變的地方主要是 L2 Cache 的電壓軌線與內(nèi)核是分開了的。例如 Saltwell 內(nèi)核的 Vmin 是 0.7 伏特,L2 Cache 則在固定的 1.05 伏特電壓軌線上跑,這樣的設(shè)計(jì)有助于減少 C6(最節(jié)電模式)電力狀態(tài)轉(zhuǎn)換時(shí)延。

8、頻率變頻粒度更精細(xì)。以 Z2460 為例,雖然 CPU 的最高持續(xù)頻率為 1.3GHz,但是頻率的變動(dòng)范圍達(dá)到 1.6GHz,步進(jìn)粒度為 100MHz;而之前的 Z600 系列頻率范圍是 0.2GHz ~ 0.8GHz 持續(xù),最高 1.2 GHz。

9、Saltwell 和之前的 Bonnell 系列微架構(gòu)同樣沒有專用的硬件整數(shù)乘法、除法單元,這些操作都是和浮點(diǎn)硬件共享。

10、在 Medfield 中還有一塊獨(dú)立分離于 512 KiB L2 Cache 外的 256KiB SRAM,位于不間斷模塊內(nèi),主要用圖像信號處理器存放圖像數(shù)據(jù)以及優(yōu)化最低漏電。在 SOC 進(jìn)入節(jié)電模式后,這塊 SRAM 還會(huì)被用于存放架構(gòu)狀態(tài),就好象 Saltwell 內(nèi)核具備自己的 C6 SRAM 來存放 x86 狀態(tài),這塊更大的 SRAM 則是存放整個(gè)平臺的。在進(jìn)入 S0ix 狀態(tài)時(shí),像圖形或者視頻編解碼器等單元都會(huì)被關(guān)掉,它們的狀態(tài)信息和配置信息都會(huì)保留在這塊 256 KiB SRAM 里。

中低價(jià)位的智能手機(jī)勢必成為 2013 年亮點(diǎn),海量的千元以下甚至 600 元以下的智能手機(jī)、平板電腦將會(huì)在這一年推出,不過因?yàn)槌杀鞠拗?,它們在各方面的?guī)格必然比更高價(jià)位的產(chǎn)品有所削弱,其中之一當(dāng)然是必定搭載的應(yīng)用處理器。

中低價(jià)位市場是 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í)行
浮點(diǎn)單元 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 達(dá)到了 1.57DMIPS/MHz;

2、Cortex-A5 具備 ARM 最新的 VFPv4 浮點(diǎn)單元和 128-bit NEON 向量處理單元。,相比之下 ARM11 只有老式的 VFP11;

3、Cortex-A5 的制程為 40nm,面積是 90nm 制程 ARM11 的一半。

4、Cortex-A5 可以提供單核、雙核、四核等配置,像聯(lián)發(fā)科就做了一個(gè)價(jià)格非常低的 Cortex-A5 四核方案,在低價(jià)位手機(jī)市場里競爭力非常強(qiáng)大。

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 類似集成了一個(gè)低時(shí)延(10 周期)的 L2 Cache。

8、Cortex-A7 的整數(shù)流水線是 8 級順序雙發(fā)射,分支預(yù)測單元比 Cortex-A8 更先進(jìn),因此在分支預(yù)測能力和分支預(yù)測失敗懲罰方面都會(huì)比 Cortex-A8 更好;

9、雖然不能像 Cortex-A8 那樣雙發(fā)射浮點(diǎn)或者 NEON 指令,但是 Cortex-A7 的浮點(diǎn)單元是流水線化設(shè)計(jì)。

10、在同樣的制造工藝節(jié)點(diǎn)下,Cortex-A7 的面積是 Cortex-A8 的 1/3~1/2。

11、Cortex-A7 能實(shí)現(xiàn)單核、雙核、四核等配置,而 Cortex-A8 只有單核配置。

12、Cortex-A7 在 ARM 的 big.LITTLE 策略中屬于伴核角色,就是給 Cortex-A15 作為低負(fù)荷工作的雜役。

從定位上看,我們相信 Cortex-A5 在低價(jià)智能手機(jī)市場上會(huì)有相當(dāng)奪目的表現(xiàn),而 Cortex-A7 作為非伴核的單獨(dú)產(chǎn)品時(shí)則更多的會(huì)在中低價(jià)平板電腦市場上攻城拔寨。

目前移動(dòng)圖形 GPU 大致上有五個(gè)陣營,即 ImgTec PowerVR、ARM Mali、高通的 Adreno、NVIDIA GeForce ULP 以及 Vivante(中文名是:圖芯),由于 Intel 下一代 Atom 中將會(huì)應(yīng)用自己的 GPU,因此很快就會(huì)擴(kuò)展成為六個(gè)陣營。這里的 Vivante 的人是來自 NVIDIA 的,如果你仔細(xì)看 Vivante 的文檔就會(huì)發(fā)現(xiàn) Vivante 的很多“市場行銷式術(shù)語”都和 NVIDIA 極其相似。

在這幾家廠商中,做移動(dòng)圖形時(shí)間最長的當(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 最流行的時(shí)候,6410 就是顯卡代名詞)、Matrox、Chromatic Research(代表作是 Mpact! 系列可編程多媒體芯片)、Number Nine(代表作是 Imagine 128,傳說中的神作,當(dāng)時(shí) 2D 顯卡的巔峰一個(gè)是 Matrox,另一個(gè)就是 Number Nine),NVIDIA 在當(dāng)時(shí)同樣也只是一家剛剛起步的公司。

這里有一張歷史樹圖:http://www.vgamuseum.info/images/stories/doc/historysm.png

PowerVR 在這眾多的圖形芯片公司中是一家很特別的廠商。首先它是以技術(shù)授權(quán)方式將設(shè)計(jì)轉(zhuǎn)讓給其他芯片公司,由其他芯片公司將設(shè)計(jì)物理化后成為真正賣給廠商的芯片,其次是 PowerVR 的渲染架構(gòu)是分塊式延后渲染,理論上可以完全消除像素的無效重復(fù)渲染。

在當(dāng)時(shí),極少有圖形芯片公司是這樣的方式運(yùn)作以及具備這樣的渲染技術(shù),當(dāng)然并不是說完全沒有,除了 PowerVR 外,還有一家名為 GigaPixel 的公司也是采用授權(quán)制和具備分塊式延后渲染(被稱作 Giga3D 架構(gòu),具備比當(dāng)時(shí) PowerVR 兼容性更高的分塊式延后渲染設(shè)計(jì)以及采用 eDRAM 的特點(diǎn))的,不過這家公司出彩的時(shí)間沒有幾天就被 3dfx 收購,而 3dfx 的所有資產(chǎn)后來也被 NVIDIA 收購了,其中也包括 Giga3D。

PowerVR 的渲染模式是 tile-based deferred rendering(分塊式延后渲染)。

分塊式渲染(TBR)并不難理解,就是把畫面切成若干個(gè) 16x32 或者 16x16 的像素塊進(jìn)行渲染,這樣的好處是可以在芯片上建立一個(gè)中間緩存(也可以稱作 Tiler Buffer,分塊緩存,里面用于存放當(dāng)前渲染 Tiler(像素塊)的深度/蠟版幀緩存、色彩幀緩存、渲染對象等),不再需要片外的顯存來存放 Z-buffer,讓渲染過程中的讀寫盡量在片上完成,減少內(nèi)存的讀寫。

由于在中間緩存渲染的時(shí)候都是很高的精度(IEEE 32-bit),減少了以 16-bit(例如 R:G:B=5-bit:6-bit:5-bit)幀緩存模式時(shí)在內(nèi)存上進(jìn)行透明混合等操作時(shí)的精度損失,因此 TBR 可以較低的內(nèi)存讀寫和占用實(shí)現(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)系標(biāo)記起來并存放于片外的顯存中,這樣就能實(shí)現(xiàn)將不可見面在進(jìn)入著色渲染流水線之前剔除掉,實(shí)現(xiàn)完全消除無效渲染。

由于增加了分倉動(dòng)作,貼圖和著色必須等待三角形可視性問題解決后才渲染,渲染上增加了時(shí)延,所以這種渲染方式被稱作分塊式延后渲染。

不過在 OpenGL 中缺乏專門的標(biāo)記來指示一幀畫面什么時(shí)候開始和結(jié)束,所以 TBDR 對一幀畫面什么時(shí)候才接收到所有的三角形進(jìn)行偵測將會(huì)有點(diǎn)麻煩,這會(huì)導(dǎo)致三角形分倉陷入迷失中。

在 Direct3D 中有 BeginScene() 和 EndScene() 這樣的標(biāo)記,但是由于在幾乎所有的硬件上都沒有效果,所以開發(fā)人員都會(huì)懶得去用這些標(biāo)記并且隨意地在這些界限外使用 z-buffer,這會(huì)導(dǎo)致 API 無法確保 z-buffer 中存放有效的數(shù)據(jù)。PowerVR 硬件本體雖然可以把 Z-buffer 存放在片外顯存中,但是代碼必須編寫正確。

TBDR 可以減少無效渲染、實(shí)現(xiàn)極高的低內(nèi)存占用渲染輸出品質(zhì),但是它的缺點(diǎn)是需要做一塊容量不小的片上緩存和大量的晶體管確保 TBDR 時(shí)候的兼容性,因此 PowerVR 的芯片面積一般都比 GeForce 這類 IMR(立即模式渲染器)大不少,另一個(gè)麻煩之處在于行銷的時(shí)候,PowerVR 的紙面規(guī)格相當(dāng)難看(當(dāng)年 PowerVR3 就是搭配 SDR 作為顯存上市的,而此時(shí)市場上的許多顯卡都已經(jīng)搭配 DDR 顯存了),當(dāng)然這個(gè)可以透過一些媒體測試實(shí)證加以解決。

輕松讀懂“應(yīng)用處理器”微架構(gòu) 2013 版

上圖是 PowerVR SGX54X MP4 的微架構(gòu)圖,這個(gè)系列中的 PowerVR SGX 543 MP4 曾經(jīng)應(yīng)用于蘋果 iPad 3 中的 A5X 應(yīng)用處理器中,MP4 表示它是以四內(nèi)核形式組成的 GPU。

需要注意的是,PowerVR 說的內(nèi)核是真正的內(nèi)核而非 NVIDIA/AMD 那樣的把單個(gè) ALU 都當(dāng)成 core 的市場行銷術(shù)語,它這里的四個(gè)內(nèi)核可以并行處理四個(gè)三角形渲染,NVIDIA 到了 Fermi(GTX 480)開始實(shí)現(xiàn)多三角形渲染,而 AMD 是在 Tahiti(7970)開始實(shí)現(xiàn)。

在 PowerVR 54x MP4 中,每個(gè)圖芯渲染計(jì)算單元被稱作 Multi-Threaded Co-Processor,對應(yīng) OpenCL 的術(shù)語就是 PE(Processing Element,處理部件)。每個(gè) PE 每個(gè)周期可以完成兩個(gè)浮點(diǎn)操作。

每四個(gè) PE 構(gòu)成一個(gè) Pipe(渲染流水線,因此 Pipe 本質(zhì)上就是一個(gè)四路 SIMD),每個(gè) PowerVR SGX54X 內(nèi)核包括四個(gè)這樣的 Pipe,即 16 個(gè) PE,故此 PowerVR SGX54X MP4 就有 64 個(gè) PE。

因此如果 PowerVR SGX 54x MP4 運(yùn)行于 300MHz 的話,浮點(diǎn)性能就是 38.4 GFLOPS。

即使是同一代的 PowerVR,不同的內(nèi)核版本具體的實(shí)現(xiàn)細(xì)節(jié)都可能有些差別,例如 Pipe 內(nèi)的 PE 數(shù)或者是每個(gè)內(nèi)核內(nèi)的 Pipe 數(shù),例如 PowerVR SGX 554 MP4(Apple A6X 采用該 GPU)的每個(gè)內(nèi)核有 8 條 Pipe 而非 PowerVR SGX 54x MP4 的四條。

PowerVR SGX 5 被設(shè)計(jì)成統(tǒng)一渲染結(jié)構(gòu),即幾何體頂點(diǎn)和屏幕像素計(jì)算都是由上面說的 PE 執(zhí)行,這樣的好處是讓 GPU 內(nèi)的計(jì)算單元可以盡量保持運(yùn)作狀態(tài),而不是像分離式架構(gòu)那樣遇到非平衡負(fù)載的處理時(shí)候,VS(頂點(diǎn)計(jì)算單元)有時(shí)候在等 PS(像素著色計(jì)算單元)或者 PS 在等 VS。

根據(jù) PowerVR 的資料,SGX 54X 的每個(gè) Pipe 內(nèi)有一個(gè)線程調(diào)度器(Thread Scheduler),每個(gè)線程調(diào)度器內(nèi)有 16 個(gè)線程可供派發(fā),每次可以派發(fā)其中的 4 個(gè)線程給下面的 PE 執(zhí)行。

PowerVR SGX 5 系列中有明確的 API 支持規(guī)格的內(nèi)核基本上都是支持 DX9.X,但是有一個(gè)特例,那就是 PowerVR SGX 545,可以實(shí)現(xiàn) DX 10.1、OpenGL 3.2 支持。

如果資料沒有錯(cuò)誤的話,PowerVR SGX 5 的 ALU:TEX 比例為 2:1,即每兩個(gè) PE 就會(huì)配上一個(gè)紋理單元,因此我們這里的 PowerVR SGX 54x 單個(gè)內(nèi)核具備 8 個(gè)紋理單元。

雖然說 PowerVR 微架構(gòu)的資料并不是很多,但是相對于除了 Intel 的其他對手而言,已經(jīng)是非常大方了。

在本文中,我們首先指出了當(dāng)前手機(jī)、平板電腦所使用的應(yīng)用處理器與平時(shí)大家接觸的電腦仍然存在巨大的性能差別,以性能來看的話,可能是 6~10 年的距離。

由于電池和散熱的限制,移動(dòng)應(yīng)用處理器不可能像臺式處理器那樣相對較少地考慮耗電問題,對移動(dòng)應(yīng)用處理器來說,所有的一切都得圍繞一個(gè)詞進(jìn)行:省電。

省電不只光靠制程上的改進(jìn),還有芯片本身的設(shè)計(jì)也是極為重要的,例如英特爾的 Atom 在實(shí)驗(yàn)室的時(shí)候采用了 6T(單位元六個(gè)晶體管)的 Cache 設(shè)計(jì),速度和面積都不錯(cuò),但是為了省電,后來上市的產(chǎn)品轉(zhuǎn)用了 8T(單位元八個(gè)晶體管),這樣的設(shè)計(jì)會(huì)增加不少面積,但是更省電了,類似這樣犧牲芯片面積換取功率控制的措施在移動(dòng)應(yīng)用處理器上比比皆是。

不過差距并非完全來自于處理器本身,像 Android 這個(gè)操作系統(tǒng),程序是跑在一個(gè) Google 自己做的虛擬機(jī)上面,絕大部分 apk 的開發(fā)語言都是 Java,這使得問題變得更加嚴(yán)重。

這個(gè)博客里,博主采用 C 和 Java 兩個(gè)版本的程序在 Android 上作對比,得出的差別是 C 版本跑了 8 秒,而 Java 是 57 秒。類似這樣的區(qū)別在 C 和 Java 的對比上其實(shí)比比皆是甚至往往會(huì)出現(xiàn)更加巨大的差別。

所以這邊架構(gòu)師和半導(dǎo)體工廠絞盡腦汁做了一個(gè)性能/耗電比非常出色的產(chǎn)品,但是如果碰上使用 Java 來編寫性能敏感型應(yīng)用的時(shí)候往往會(huì)被 Android 毫不留情地從工業(yè)時(shí)代打回石器時(shí)代,而臺式機(jī)這邊已經(jīng)是太空時(shí)代,差距就這么明顯。

這就是一個(gè)整天吹噓所謂“手機(jī)看大片”的移動(dòng)時(shí)代的悲哀,但愿可以快點(diǎn)結(jié)束。

寫了這么多東西,肯定有人不耐煩了:你說這么多屁話有啥用,直接告訴老子什么處理器最好不就得了。

就等你這句話,因?yàn)檫@個(gè)問題一點(diǎn)都不難回答。

從上面大家可以得知,軟件對性能的影響,所以從現(xiàn)實(shí)出發(fā),我推薦大家都選擇 iOS 下的產(chǎn)品,因?yàn)檫@個(gè)操作系統(tǒng)對應(yīng)的開發(fā)平臺基本上都是使用本機(jī)語言代碼編譯程序的。

這是一個(gè)技術(shù)正確的回答,但是“政治”上未必正確,因?yàn)?Android 的廠商實(shí)在太多了,相關(guān)的用戶群也是海量級,隨便一口口水就能把我給淹沒掉,所以還是需要給這個(gè)用戶群體推薦的。

如果以已經(jīng)發(fā)布的產(chǎn)品,我傾向于像 N 記 Tegra 4 這個(gè)產(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)達(dá)到 123mm^2。還有就是 N 記似乎和游戲業(yè)界比較熟絡(luò),對于希望手機(jī)玩玩游戲的人來說更有保障。

什么?對游戲不感興趣,那就挑個(gè)聯(lián)發(fā)科的四核 Cortex-A5 手機(jī)好了,最省功夫。

由于 Ti、ST-愛立信的退出,現(xiàn)在移動(dòng)應(yīng)用處理器的廠商雖然看似熱鬧,但是已經(jīng)露出了一些紅海的跡象,或者說骨頭變硬了、肉變少了,將來剩下的廠商必定是具備較強(qiáng)大技術(shù)儲備和充足資金支持的。

英特爾是最具這樣特征的公司,他們的下一代 Atom 腳步正越來越近,亂序執(zhí)行的引入和比所有對手提前一年導(dǎo)入的 22 納米制程勢必引來業(yè)界對英特爾在移動(dòng)應(yīng)用處理器上前所未有的重視,至少對我來說就很有點(diǎn)當(dāng)年 Pentium 升級 Pentium Pro 的期待?!?

2人已贊

關(guān)注我們

泡泡網(wǎng)

手機(jī)掃碼關(guān)注