最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【知乎】 如何看待蘋(píng)果拿 M2 處理器同 4 年前的 8 代酷睿做對(duì)比?

2023-10-21 23:37 作者:ACFUN-AK  | 我要投稿

?如何看待蘋(píng)果拿 M2 處理器同 4 年前的 8 代酷睿做對(duì)比?

JamesAslan

喜歡畫(huà)畫(huà)和攝影的硅工碼農(nóng)(滑稽)

牙膏?Maybe

2020年,M1攜firestorm如烈火燎原般席卷了消費(fèi)級(jí)市場(chǎng),技驚四座,不免令人期待續(xù)作M2能夠到達(dá)何種高度。然而現(xiàn)實(shí)十分骨感,從SPEC06和17來(lái)看,M2的提升幅度不盡如人意:

那么Apple真的沒(méi)有做什么改動(dòng)嗎?科技以換名為本?那倒也不是,在不為人知的角落,Apple silicon還是在默默地進(jìn)化著,以滿(mǎn)足更多corner case負(fù)載的需求。

什么?你只關(guān)心SPEC06/17,Geekbench,Cinebench?那以上都當(dāng)我沒(méi)說(shuō)過(guò)。

非分離式前端最后的守護(hù)者

在我淺薄的認(rèn)知中,這個(gè)世界上的主流廠商中似乎只有三家沒(méi)有使用decoupled frontend(分離式前端):Apple、Sifive、Tenstorrent。在這里我不想去揣測(cè)和分析原因,這不是本文的重點(diǎn),而是想說(shuō)明Apple M2做了什么。

什么是分離式前端?

在傳統(tǒng)的非分離式前端中,取指PC被同時(shí)送往IFU(Instruction Fetch Unit,ICache等)和BPU(Branch Prediction Unit)。BPU負(fù)責(zé)進(jìn)行分支預(yù)測(cè),IFU負(fù)責(zé)獲取指令內(nèi)容,它們同時(shí)產(chǎn)生結(jié)果并被送往后續(xù)的流水級(jí)。這一設(shè)計(jì)咋看很美好,但是隨著負(fù)載指令footprint的擴(kuò)大,ICache的miss越發(fā)頻繁,它的問(wèn)題越發(fā)凸顯:一旦ICache發(fā)生miss,流水線就會(huì)發(fā)生阻塞;由于IFU無(wú)法及時(shí)產(chǎn)生結(jié)果,BPU也要隨之停止工作并等待IFU。我們回看BPU要解決的三大問(wèn)題(我的一家之言,見(jiàn)笑):

  1. Is there a branch?

  2. Whether to take?

  3. Where to jump?

在BTB的幫助下,其實(shí)這三個(gè)問(wèn)題都不需要指令的具體內(nèi)容。也就是說(shuō),在BTB的幫助下,IFU能否取得指令內(nèi)容并不影響B(tài)PU的正常工作。那么ICache miss時(shí)停止BPU的工作就十分虧了。分離式前端的核心思想正是將分支預(yù)測(cè)與取指解耦合。

BPU將預(yù)測(cè)的取指PC送入FTQ(Fetch Target Queue)中,F(xiàn)TQ再將預(yù)測(cè)信息送往IFU進(jìn)行取指。由于FTQ的隊(duì)列屬性,BPU從此能夠獨(dú)立地工作。這還引入額外的好處,即FDIP(Fetch directed instruction prefetch)的潛力。當(dāng)BPU填入FTQ的速度大于IFU消耗FTQ的速度時(shí),F(xiàn)TQ內(nèi)就會(huì)產(chǎn)生堆積的信息,我們就可以利用這部分信息進(jìn)行指令預(yù)取,這能夠大幅提升大指令footprint的負(fù)載的性能表現(xiàn)。但是蘋(píng)果似乎并沒(méi)有跟隨這股潮流,至少不完全。

什么是BTB?

在之前的內(nèi)容里我們多次提到了BTB,它是前端的核心組件之一。

它主要負(fù)責(zé)解決三大問(wèn)題中的兩個(gè):Is there a branch?Where to jump?。它存儲(chǔ)了所有曾經(jīng)taken過(guò)的分支指令的信息。其表項(xiàng)如上圖所示,為譯碼后可得的分支類(lèi)型、跳轉(zhuǎn)目標(biāo)地址等。通過(guò)pc查詢(xún)時(shí),如果匹配,我們就將該指令視為跳轉(zhuǎn)指令,并對(duì)其進(jìn)行分支預(yù)測(cè)。跳轉(zhuǎn)目標(biāo)地址主要由BTB提供,如果讀取出的分支類(lèi)型為間接跳轉(zhuǎn)、call、return時(shí)則由其他預(yù)測(cè)器接管。由此我們可見(jiàn),只有BTB的容量足夠大,才能較好得識(shí)別指令流中的所有分支指令。但是大容量往往意味著高延遲,如何兼顧等效延遲和容量呢?沒(méi)錯(cuò),多級(jí)結(jié)構(gòu),現(xiàn)如今的處理器往往都配備了2-3級(jí)的BTB,但是新的問(wèn)題又出現(xiàn)了。

前端空泡

多級(jí)BTB中的低層級(jí)BTB往往容量較小,高層級(jí)BTB容量較大。較小的BTB由于容量限制時(shí)常會(huì)發(fā)生miss,一旦沒(méi)有在BTB中命中,指令就不會(huì)被視為分支指令,指令流就會(huì)順序向下流淌。倘若這條指令后續(xù)被證實(shí)為taken的分支指令,整個(gè)前端就會(huì)發(fā)生回滾到該分支的跳轉(zhuǎn)目標(biāo)地址處重新開(kāi)始取指。如下圖所示:

一旦一條taken分支指令不能在最快的L1BTB(低層級(jí)BTB)中命中,就會(huì)產(chǎn)生前端空泡(bubble),這是前端浪費(fèi)的取指機(jī)會(huì)(周期數(shù))。不過(guò),盡管在L2BTB中命中會(huì)產(chǎn)生前端空泡,其帶來(lái)的代價(jià)還是遠(yuǎn)遠(yuǎn)少于分支預(yù)測(cè)錯(cuò)誤,因此多級(jí)BTB是有效的。我們不妨將產(chǎn)生0個(gè)空泡的BTB成為L(zhǎng)0BTB,依次類(lèi)推:

Apple M1Sifive P870Tenstorrent AscalonAMD Zen4Intel RaptorcoveL0BTB102410241024?2048?1536128L1BTB----6144L2BTB---768012288

該表從中間位置分為了兩個(gè)陣營(yíng),左側(cè)的非分離式前端陣營(yíng),和右側(cè)的分離式前端陣營(yíng)。一個(gè)顯而易見(jiàn)的趨勢(shì)便是右側(cè)陣營(yíng)的BTB都十分巨大,這就不得不提非分離式前端的一個(gè)好處了。之前我們提過(guò)

其表項(xiàng)如上圖所示,為譯碼后可得的分支類(lèi)型、跳轉(zhuǎn)目標(biāo)地址等

BTB內(nèi)存儲(chǔ)的信息本質(zhì)是經(jīng)過(guò)譯碼處理后得到的,那么倘若非分離式前端取得指令后進(jìn)行預(yù)譯碼,是不是也可以獲得BTB信息呢?答案是可以的。非分離式前端就是通過(guò)預(yù)譯碼將ICache當(dāng)作了它的末級(jí)BTB。我們觀察Apple M1的BTB測(cè)試圖像:

從中我們可以得到兩組信息:

  1. M1擁有一個(gè)1024項(xiàng)的L0BTB,它是一種Region BTB且十分質(zhì)樸,每個(gè)Region居然留足了16個(gè)slot。

  2. M1的ICache充當(dāng)ICache時(shí)會(huì)導(dǎo)致2個(gè)前端空泡,即其取指延遲是3 cycle。事實(shí)上,基本所有采用非分離式前端的設(shè)計(jì),都會(huì)將它們的ICache延遲控制在3 cycle,以確保預(yù)譯碼后充當(dāng)BTB的ICache不會(huì)造成太多的前端空泡。

對(duì)于指令footprint較小的程序,這樣的設(shè)計(jì)有幾個(gè)優(yōu)點(diǎn):

  1. 避免對(duì)獨(dú)立的大BTB的需求。

  2. 減少了前端的流水級(jí)數(shù)。

但是這樣的機(jī)制顯然不是萬(wàn)能的,缺點(diǎn)也十分明顯:

1.BTB的性能和ICache容量強(qiáng)綁定,一旦ICache容量不足以容納指令footprint,BTB也會(huì)隨之躺平。我們不妨進(jìn)行一個(gè)不嚴(yán)謹(jǐn)?shù)暮?jiǎn)單計(jì)算,以末級(jí)BTB為例:即便M1擁有192KB的獨(dú)一檔的ICache,其作為BTB能夠覆蓋的指令footprint也為192KB。以平均每10條指令有一條跳轉(zhuǎn)指令計(jì)算,7680項(xiàng)的獨(dú)立L2BTB能夠覆蓋300KB+的指令footprint。

2.進(jìn)行FDIP需要額外的冗余設(shè)計(jì)。

因此我們發(fā)現(xiàn),當(dāng)一款微架構(gòu)要同時(shí)顧及服務(wù)器市場(chǎng)時(shí),主流廠商似乎都倒向了分離式前端+大BTB的設(shè)計(jì)。

M2做了什么?

M1在1024項(xiàng)的L0BTB和192KB的ICache(準(zhǔn)L2BTB)間空缺了L1BTB,而M2做的正是填補(bǔ)了這一空白。

可見(jiàn),M2增加了一組3072項(xiàng)的L1BTB,那么反映到實(shí)際應(yīng)用上又會(huì)如何呢?我們考察指令footprint極大的Verilator:

可見(jiàn)M2取得了遠(yuǎn)超頻率提升的進(jìn)步,即便是面對(duì)Raptorcove也不落下風(fēng)(當(dāng)然超過(guò)4-thread就是另一個(gè)故事里)。這里不禁暢想,如果Avalanche這樣的一顆核心被用于服務(wù)器,該是怎樣的一幅畫(huà)面呢?確實(shí)也有不少人想要這么做,可惜要么被收購(gòu),重回了手機(jī)的老本行;要么陷于官司的泥潭,還沒(méi)什么公開(kāi)信息,嘖嘖。

就這樣吧,期待即將到來(lái)的一大波新架構(gòu)能夠帶來(lái)更多的有趣的設(shè)計(jì)。

發(fā)布于 2023-10-21 14:05


【知乎】 如何看待蘋(píng)果拿 M2 處理器同 4 年前的 8 代酷睿做對(duì)比?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
甘德县| 桂平市| 纳雍县| 万源市| 宁国市| 黑山县| 花莲市| 定西市| 宝丰县| 随州市| 灵山县| 甘孜| 南漳县| 绵阳市| 禹州市| 荥经县| 广丰县| 深州市| 建湖县| 札达县| 雅江县| 德令哈市| 安丘市| 大厂| 利川市| 崇文区| 庆安县| 广水市| 浦北县| 罗甸县| 金湖县| 四子王旗| 乐平市| 濮阳县| 集贤县| 德化县| 定远县| 樟树市| 英山县| 临江市| 怀远县|