我們?cè)谘b機(jī),挑選硬件尤其是CPU時(shí),總會(huì)聽(tīng)到“采用xxx架構(gòu)的xxx處理器”,而通常我們?cè)谶x擇CPU時(shí),很多玩家也會(huì)考慮購(gòu)購(gòu)買什么架構(gòu)的處理器。而到現(xiàn)在智能手機(jī)成為主流的時(shí)代,我們也知道了什么叫“蘋果A12”“高通驍龍855”。雖然我們都在說(shuō)架構(gòu),但是還有一個(gè)與處理器息息相關(guān)的名詞,叫做指令集。雖然很多朋友也知道“x86”“Arm”,但是“微架構(gòu)”與“指令集”有什么關(guān)系呢?
Skylake處理器架構(gòu)細(xì)節(jié)之一
首先要看這兩個(gè)名詞是面向什么的。指令集是一款CPU處理指令及數(shù)據(jù)的規(guī)范,我們只能通過(guò)輸入指定格式的指令才能操作計(jì)算機(jī)。而這個(gè)是面向程序員和用戶層面的。而微架構(gòu)是面向CPU設(shè)計(jì)人員的,通過(guò)設(shè)計(jì)處理器的指令執(zhí)行單元,當(dāng)完成整個(gè)設(shè)計(jì)時(shí),組成的一整套執(zhí)行規(guī)定指令的微處理器的架構(gòu)就叫“微架構(gòu)”。
AVX指令中的3操作數(shù)和4操作數(shù)格式
前面提到了指令集就是“規(guī)范”,這也就意味著他能指導(dǎo)CPU設(shè)計(jì)人員通過(guò)閱讀“指令集規(guī)范”這本“指南”來(lái)設(shè)計(jì)CPU。而CPU設(shè)計(jì)人員通過(guò)閱讀這本規(guī)范后設(shè)計(jì)出來(lái)的CPU結(jié)構(gòu)就叫“微架構(gòu)”。舉個(gè)簡(jiǎn)單的例子,就是小學(xué)老師教會(huì)我們?nèi)绾谓鉀Q一元二次方程,但題目是很多的,我們就需要通過(guò)解題方法來(lái)解決這些實(shí)際的問(wèn)題。這里“解題方法”就是指令集,而“具體的題目”就是微架構(gòu)了。
AMD推出的x86-64規(guī)范,圖片來(lái)自Wikipedia
講到這里更正式的表述就是“微架構(gòu)”就是“指令集”的具體“實(shí)現(xiàn)”。所以從我們?nèi)粘J褂弥芯涂梢耘e例,AMD和英特爾同樣都是采用x86指令集的處理器,但是他們處理器具體微架構(gòu)是不同的,這就是典型的“實(shí)現(xiàn)”問(wèn)題。而近期發(fā)布的ArmCortex-A77處理器微架構(gòu),其采用的是Armv8.2指令集,其前代微架構(gòu)Cortex-A76也是采用的Armv8.2指令集。所以從軟件開(kāi)發(fā)層面上講,其匯編語(yǔ)言也是相同的,所以兩者就可以使用相同的操作系統(tǒng),基本相同的軟件,而基本不需要重新開(kāi)發(fā)編譯。
Cortex-A77處理器微架構(gòu)解析
不過(guò)在具體設(shè)計(jì)處理器微架構(gòu)時(shí),不同的處理器在緩存、分支預(yù)測(cè)等結(jié)構(gòu)會(huì)有不同,所以雖然可以執(zhí)行相同的指令,但為了讓軟件在該處理器上運(yùn)行更快,所以會(huì)針對(duì)緩存命中等進(jìn)行優(yōu)化。這種優(yōu)化主要是軟件層面的,所以既可以通過(guò)匯編語(yǔ)言,也可以通過(guò)編譯器進(jìn)行,最終提升軟件執(zhí)行效率。
最后總結(jié)一下,指令集需要通過(guò)微架構(gòu)去實(shí)現(xiàn),而采用相同指令集的處理器即使微架構(gòu)不同,其也可以運(yùn)行相同的程序(一定條件下)。處理器雖然采用相同指令集,但微架構(gòu)不同的處理器,在緩存設(shè)計(jì)等方面存在差異,所以也會(huì)有通常處理器廠商也會(huì)為開(kāi)發(fā)調(diào)試工具甚至是編譯器等方式優(yōu)化軟件在自家處理器上的運(yùn)行效率