版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-宏融合

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

宏融合Macro-fusionMacro-ops fusion)是一項(xiàng)旨在提高x86處理器性能的技術(shù)。支持宏融合的處理器可令多條(通常為兩條)x86指令融合為一條執(zhí)行,從而提高了處理器的吞吐率。

原理x86是典型的CISC架構(gòu)。為了便于實(shí)現(xiàn)流水線和超標(biāo)量,90年代中期以后的主流x86處理器均在前端使用解碼器將x86指令翻譯成類似RISC指令的微指令送入后端執(zhí)行。一條x86指令將被解碼成一條或多條微指令。受解碼單元和執(zhí)行單元數(shù)目限制,在同一時(shí)鐘周期內(nèi),前端能夠解碼的宏指令最大數(shù)量和后端能夠執(zhí)行的微指令最大數(shù)量都是有限的固定值。宏融合將在程序中經(jīng)常連續(xù)出現(xiàn)的若干條x86指令在解碼前融合成一條,從而提高了解碼器的效率;同時(shí),融合后的多條x86指令可以被解碼成一條微指令,從而也提高了后端執(zhí)行的效率。據(jù)估計(jì),運(yùn)行典型的x86程序時(shí),宏融合可以帶來(lái)約11%的性能提升。

目前,英特爾基于Core、Nehalem和Sandy Bridge微架構(gòu)的處理器和威盛凌瓏處理器均支持宏融合,而超微(AMD)的處理器尚不支持這項(xiàng)技術(shù)。1

可被宏融合的指令在英特爾的實(shí)現(xiàn)中,特定的兩條連續(xù)x86指令可以被一個(gè)解碼單元在一個(gè)時(shí)鐘周期內(nèi)解碼成一條微指令,因此4個(gè)解碼單元可在一個(gè)時(shí)鐘周期里解碼5條x86指令。這兩條x86指令中的第一條必須是影響標(biāo)志位的指令,如TESTCMP;第二條必須是條件跳轉(zhuǎn)。這樣的組合在編譯器生成的代碼中非常常見(jiàn),因此程序不需要重新編譯就可以獲得性能提升。

Core和Nehalem微架構(gòu)只支持將TESTCMP作為第一條指令。具體而言,當(dāng)?shù)谝粭l指令是TEST時(shí),第二條指令可以是任何的條件跳轉(zhuǎn)指令;而當(dāng)?shù)谝粭l指令是CMP時(shí),Core微架構(gòu)的處理器僅在第二條指令是JA(JNBE)、JAE(JNB、JNC)、JE(JZ)、JNA(JBE)JNAE(JC、JB)或JNE(JNZ)時(shí)支持宏融合,但Nehalem微架構(gòu)的處理器在第二條指令是JL(JNGE)、JGE(JNL)、JLE(JNG)、JG(JNLE)時(shí)也支持宏融合。

在Sandy Bridge微架構(gòu)的處理器中,英特爾進(jìn)一步拓展了宏融合的支持范圍。例如,除TESTCMP外,ADDSUB等作為第一條指令也可以參與宏融合。1

限制一個(gè)時(shí)鐘周期里最多只能完成一次宏融合。

第一條指令的兩個(gè)操作數(shù)中必須至少有一個(gè)寄存器,即不支持內(nèi)存和立即數(shù)之間的比較。

以下限制僅適于用Core微架構(gòu)的處理器

宏融合只支持32位程序,包括在64位操作系統(tǒng)下運(yùn)行的32位程序。這也是某些程序的32位版本較其64位版本運(yùn)行更快的原因之一。1

本詞條內(nèi)容貢獻(xiàn)者為:

李嘉騫 - 博士 - 同濟(jì)大學(xué)