【知乎】如何判斷CPU發(fā)射寬度?
如何判斷CPU發(fā)射寬度?

比如skylake架構(gòu)有人說它是五發(fā)射,理由是其有五個(gè)解碼器。又有人說還要看取指令,指令調(diào)度的寬度,取寬度最小值。我想知道能不能從這張圖中大概判斷出CPU的發(fā)射寬度,依據(jù)什么來判斷?
另一個(gè)問題是4發(fā)射已經(jīng)出現(xiàn)了好幾年了,為什么不提升到5或者6發(fā)射增強(qiáng)性能?又有觀點(diǎn)說發(fā)射數(shù)的增加,不能提升性能,反而導(dǎo)致后端執(zhí)行管線的閑置。這究竟是怎么一回事?
關(guān)注者
46
被瀏覽
24,923
一只橘貓也關(guān)注了該問題

關(guān)注問題寫回答
邀請回答
好問題 7
添加評論
分享
修改問題
收起?
4?個(gè)回答
默認(rèn)排序

Edison Chen
?關(guān)注
9 人贊同了該回答
只看紙面規(guī)格意義有限,最好是使用 microbenchmark 進(jìn)行實(shí)際測試,例如 x86 的話,nop 指令是最短的,可以以此為基礎(chǔ)探測處理器的取指、解碼、發(fā)射能力,然后進(jìn)一步拓展到 add/sub 以及其他更復(fù)雜的指令。
發(fā)布于 2021-01-06 19:08
已贊同 9添加評論
分享
收藏喜歡

XZiar

中央處理器 (CPU)話題下的優(yōu)秀答主
?關(guān)注
81 人贊同了該回答
你這里放出來的只是前端部分的圖,實(shí)際上“發(fā)射”,也就是issue/dispatch是形容后端執(zhí)行部分的寬度的,所以從這張圖只能看出5解碼,看不出幾發(fā)射。
底下的6uOPs表示的只是IDQ到Allocation的寬度,也就是前后端銜接部分的寬度。
當(dāng)然有些人翻譯時(shí)喜歡看到xx-wide就翻譯成xx發(fā)射,會(huì)帶來一些混亂。
根據(jù)完整的圖[1],應(yīng)該被描述成8發(fā)射。
前面提到的寬度為5的解碼被Intel稱作“Legacy Decode Pipeline[2]”(或者是MITE pipe),而相對應(yīng)的“modern pipeline”的是左邊那一“小”塊uOP Cache(DSB)。
傳統(tǒng)的解碼要耗費(fèi)不算少精力,還有各種限制(比如16B的fetch,x86變長的判斷,complex/simple組合),而解碼完的指令會(huì)存入DSB,日后再使用的話不但省去解碼開銷(MITE會(huì)直接休眠省電),還能減少流水線深度。
單純MITE部分寬度小于發(fā)射說明不了太多,uOP來源可能是DSB(帶寬更高),也可能是LSB(對循環(huán)做優(yōu)化,直接IDQ自給自足)。
更重要的是MicroFusion,即解碼出來的可能是fused uop(可以分解成多條unfused uop),而發(fā)射、執(zhí)行的全都是unfused uop。既然非1:1關(guān)系,解碼小于發(fā)射倒也可以理解。
MicroFusion in Intel CPUs.easyperf.net/blog/2018/02/15/MicroFusion-in-Intel-CPUs

至于為什么解碼不做更寬,有的說法是變長指令、復(fù)雜結(jié)構(gòu)導(dǎo)致更寬的解碼技術(shù)上很難做,有的說法是功耗、帶寬、面積制約。
當(dāng)然也有種說法是分支指令很常見(每五六條指令就有一分支),解碼更寬容易導(dǎo)致浪費(fèi)。但是現(xiàn)在分支預(yù)測準(zhǔn)確率通常都是9x%,浪費(fèi)的概率也很低啊……
如果開著超線程的話,雖然MITE是時(shí)分交錯(cuò)解碼,DSB等也會(huì)容量減半,但每個(gè)線程有各自的IDQ,這部分其實(shí)是翻倍的,也可能可以增加實(shí)際uOP量。
至于后端寬度比解碼寬會(huì)不會(huì)喂不滿——其實(shí)不滿才是常態(tài),哪怕是RISC也是一樣。
一方面亂序執(zhí)行、投機(jī)執(zhí)行并不能解決真正的數(shù)據(jù)依賴,能同時(shí)解碼10條指令不意味著就能同時(shí)發(fā)射10條指令。
另一方面后端端口各有分工,10個(gè)端口10發(fā)射如果面對全是ALU計(jì)算指令,照樣會(huì)有浪費(fèi)。
這也就是為什么ROB的容量很大,有上百個(gè)條目——盡可能地去發(fā)掘并行操作。
而且整條流水線上到處都可能成為瓶頸,比如allocate/rename/retire。
最后,這些都是紙面數(shù)字,具體性能還是得具體分析。
參考
^Skylake?https://en.wikichip.org/wiki/intel/microarchitectures/skylake_(client)
^Legacy Pipeline?https://en.wikichip.org/wiki/intel/microarchitectures/sandy_bridge_(client)#New_.C2.B5OP_cache_.26_x86_tax
編輯于 2021-01-31 19:03
贊同 8114 條評論
分享
收藏喜歡
收起

章魚哥
深度學(xué)習(xí)加速器工具鏈與LLVM編譯器
?關(guān)注
2 人贊同了該回答
取整個(gè)前后端的最小寬度,因?yàn)闊o論你的fu的issueport有多少個(gè),整個(gè)cpu流水線能夠給到的ipc就是取決于這個(gè)最小寬度,一般是解碼寬度
發(fā)布于 2022-02-16 16:09
贊同 22 條評論
分享
收藏喜歡
風(fēng)風(fēng)
南卡羅萊納大學(xué)
?關(guān)注
5 人贊同了該回答
取最小寬度值,所以haswell 4-issue skylake 5-issue。
需要考慮設(shè)計(jì)制造成本,為了使利益最大化skylake也只是在細(xì)節(jié)上進(jìn)行改進(jìn),總體布局與haswell保持一致。
蘋果a9 6-issue。
發(fā)布于 2016-06-21 01:21