輕松讀懂移動(dòng)處理器 CPU微架構(gòu)全解析
無(wú)論是馮·諾依曼還是哈佛結(jié)構(gòu)的處理器,最理想的情況下當(dāng)然是有無(wú)限大的存儲(chǔ)空間和 0 時(shí)延的存儲(chǔ)系統(tǒng)了,不過(guò)這顯然是無(wú)法做到的,因此人們就提出了分層式的存儲(chǔ)系統(tǒng)結(jié)構(gòu),從寄存器開(kāi)始每往下一層容量就更大,但是速度也更慢:
例如對(duì)于 ARM Cortex-A9(四核 Tegra 3 的批發(fā)報(bào)價(jià)一般為 15~21 美元)來(lái)說(shuō):
物理寄存器堆大小是 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 周期
不同型號(hào)的產(chǎn)品,搭配的內(nèi)存容量不盡相同,以 華為 Ascend P1 XL 為例,搭配的內(nèi)存大小為 1GiB,時(shí)延大概是 L2 + 110ns,帶寬一般都有 1000MiB/s 以上。
基本上所有的手機(jī)都是采用 NAND 型閃存或者閃存卡作為 DASD(直接存取存儲(chǔ)設(shè)備)來(lái)存放程序和數(shù)據(jù),大小一般在 4 GiB 以上,如果搭配 Class 4 的 8 GiB microSD 卡的話(huà)讀寫(xiě)帶寬一般只有 1.x MiB/ss~3.x MiB/s(傳輸數(shù)據(jù)塊大小為 4KiB 時(shí))和 0.005 MiB/s~1.x MiB/s,價(jià)格一般為 20 元人民幣左右 。
這里說(shuō)的時(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 或者說(shuō)系統(tǒng)中的物理地址空間只有 34-bit,又或者是虛擬內(nèi)存空間是 32-bit,而物理定址空間是 40-bit)。
對(duì)于用戶(hù)程序在虛擬內(nèi)存空間里操作的處理器,是需要把虛擬內(nèi)存空間地址轉(zhuǎn)換為物理內(nèi)存空間地址,這就需要進(jìn)行地址轉(zhuǎn)換了。負(fù)責(zé)這個(gè)功能的單元一般被稱(chēng)作內(nèi)存管理單元(MMU),有時(shí)候它又被稱(chēng)作分頁(yè)內(nèi)存管理單元,當(dāng)然 MMU 的功能不僅僅是地址轉(zhuǎn)換(否則就不會(huì)被蓋這么大的名頭了)。
內(nèi)存的基本管理單位被稱(chēng)作 page(頁(yè)面,或者說(shuō)頁(yè)塊),不同處理器支持的頁(yè)面大小不一樣,一般都是 4KiB(在 ARMv7a 里還有 64 KiB、1MiB、16 MiB 等),性能導(dǎo)向型的處理器頁(yè)面正變得越來(lái)越大,而嵌入式處理器似乎有 1KiB 大小的。
記錄物理內(nèi)存和虛擬內(nèi)存關(guān)系里的數(shù)據(jù)列表被稱(chēng)作分頁(yè)表,這些分頁(yè)表也都是放在主內(nèi)存(物理內(nèi)存)中的,但是如果每次讀寫(xiě)內(nèi)存都要訪(fǎng)問(wèn)兩次主內(nèi)存的話(huà)效率太低了,所以人們引入了名為 TLB(Translate Look-aside Buffer,轉(zhuǎn)換后緩存)的 cache 來(lái)改善這個(gè)問(wèn)題。
不同的處理器 TLB 大小都不一樣,以我們這里舉例的 Cortex-A9 為例,本身就存在多種 TLB 配置形式,它的 L1 D-TLB 是 32 個(gè)條目(或者說(shuō)分頁(yè)地址映射),而 L1 I-TLB 可以配置為 32 或者 64 條目。
總之,早期的單周期式架構(gòu)效率很差,因此人們引入了流水線(xiàn)設(shè)計(jì),可以充分使用各級(jí)工位,各工位執(zhí)行時(shí)間越短自然 CPU 的頻率可以更快;然后人們又引入了超標(biāo)量設(shè)計(jì),讓 CPU 上可以同時(shí)跑幾條指令,隨之而來(lái)的相依性等問(wèn)題讓架構(gòu)師們想出了分支預(yù)測(cè)、亂序執(zhí)行、寄存器重命名等等技術(shù)來(lái)保證處理器的指令執(zhí)行效率。
除了提高指令并行度來(lái)改善處理器性能外,還有數(shù)據(jù)并行、線(xiàn)程化并行等方法,但是后兩者都需要程序員和編譯器協(xié)助,并非免費(fèi)。
影響處理器性能還有內(nèi)存的帶寬和時(shí)延問(wèn)題,因?yàn)槿≈负蛿?shù)據(jù)讀寫(xiě)都必須透過(guò)內(nèi)存訪(fǎng)問(wèn)來(lái)完成,層階式設(shè)計(jì)是目前成本最為合理的方式。
關(guān)注我們
