Microarchitecture:Macro Fusion

Macro-Operation Fusion (Macro-Op Fusion, MOP Fusion or Macrofusion) 在現代的微架構中被廣泛的使用。該技術即爲相鄰的marco-operations 可以被合併爲單條macro-operaton,在譯碼期間或者更早。這些指令在後面被譯碼爲fused-uops。

影響處理器的性能的三個因素之一是指令個數。通過減少指令個數,可以使用更少的資源完成更多的工作。macro-fusion 背後的思想就是將鄰近的指令進合併爲一條指令。一條被融合的指令在其生命週期內都是融合的。因此融合的指令可以使用更少的bit完成更多的工作,釋放了執行單元和追蹤信息(重命名單元),節省了從譯碼到退休的帶寬,最終可以節省功耗。
marco-op fusion的一個特殊的影響是它也有助於那些非編譯的workload,比如很多的運行時解釋語言PHP。

X86
Intel
Intel 自從酷睿,就在所有的現代微架構中採用macro-op fusion技術。
歷史
Intel在2000年10月申請了融合指令的專利。2006年,在酷睿微架構中首次引入,此後的微架構中一直有采用。
原理
在macro-ops的邊界被確定和標記後,它們被髮送到instruction queues,然後進入譯碼器。這個階段是可以確定並利用macro-opration的時機。注意這是自譯碼之前,因此譯碼的帶寬也可以被節省。

未融合的指令
融合的指令

條件分支在基本上所有的workload中,都是很常用的操作。Intel預計它佔據了所有指令的15%。一對相互依賴的指令首先會與一套準則進行比對。比如,第一個源操作數或者目標操作數一定要是寄存器,並且第二個源操作數一定要是立即數或者是non-RIP 相關的內存地址。融合會將使用一條指令的行爲來代表兩條指令。


通過比對修改標誌位的指令(如CMP或者ADD)和後續的一條jump 指令,可以實現融合。產生的輸出是單條的 操作-分支指令。最終的融合的指令的聲明週期會在pipeline內一直維持,直到可能在執行單元需要在單端口或者雙端口上執行時纔會拆分。

  • 兩條指令一定相連,中間沒有其他指令
  • 第一條指令一定是以下的指令: CMP, TEST, ADD, SUB, INC, DEC, or AND.
  • 第二條指令一定是條件跳轉,比如JA, JAE, JE, JNE
  • 如果第一條指令是cacheline的63byte末尾,而第二條指令是下一條cacheline的開頭,那麼也無法融合。

    此外,每週期只能融合一條指令。如果有機會執行兩條macrofusion,那麼只有第一對會被融合,第二對會被忽略。

    macro-fusion的條件

在這裏插入圖片描述
歡迎關注我的公衆號《處理器與AI芯片》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章