[go: up one dir, main page]

TWI396131B - 排程一指令在一處理器中之執行方法及使用該方法之積體電路裝置 - Google Patents

排程一指令在一處理器中之執行方法及使用該方法之積體電路裝置 Download PDF

Info

Publication number
TWI396131B
TWI396131B TW096104138A TW96104138A TWI396131B TW I396131 B TWI396131 B TW I396131B TW 096104138 A TW096104138 A TW 096104138A TW 96104138 A TW96104138 A TW 96104138A TW I396131 B TWI396131 B TW I396131B
Authority
TW
Taiwan
Prior art keywords
instruction
cache memory
execution
pipeline
cache
Prior art date
Application number
TW096104138A
Other languages
English (en)
Other versions
TW200813822A (en
Inventor
David A Luick
Original Assignee
Ibm
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ibm filed Critical Ibm
Publication of TW200813822A publication Critical patent/TW200813822A/zh
Application granted granted Critical
Publication of TWI396131B publication Critical patent/TWI396131B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6024History based prefetching
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

排程一指令在一處理器中之執行方法及使用該方法之積體電路裝置
本發明大體而言係關於在處理器中執行指令。具體言之,此申請案係關於最小化處理器中歸因於快取誤失之管線停滯(pipeline stall)。
現代電腦系統通常包含若干積體電路(IC),其包括可用於在該電腦系統中處理資訊的處理器。由處理器處理之資料可包括由處理器執行之電腦指令,以及由處理器使用該等電腦指令操縱之資料。電腦指令及資料通常被儲存在電腦系統之主記憶體中。
處理器通常藉由在一系列小步驟中執行指令來處理指令。在一些狀況下,為增加由處理器處理之指令的數目(且因此增加處理器之速度),可管線操作處理器。管線操作(pipelining)係指在處理器中提供單獨的階段,其中每一階段執行為執行一指令所必需之該等小步驟中之一或多者。在一些狀況下,可將管線(除其他電路之外)放入處理器之被稱為處理器核心的一部分中。一些處理器可具有多個處理器核心,且在一些狀況下,每一處理器核心可具有多個管線。在一處理器核心具有多個管線的情況下,可將多個指令群組(被稱為發出群組)並行地發至多個管線且由該等管線之每一者並行地執行該等群組。
作為在管線中執行指令之一實例,在接收到一第一指令時,一第一管線階段可處理該指令之一小部分。當該第一管線階段已完成對該指令之該小部分的處理時,一第二管線階段可開始處理該第一指令之另一小部分,同時該第一管線階段接收並開始處理一第二指令之一小部分。因此,處理器可同時(並列地)處理兩個或兩個以上之指令。
為提供對資料及指令之更快速存取以及對處理器之更好使用,處理器可具有若干快取記憶體。快取記憶體係通常小於主記憶體且通常與處理器製造於同一晶粒(亦即,晶片)上的記憶體。現代處理器通常具有若干階層之快取記憶體。位於最靠近處理器之核心處的最快快取記憶體被稱為一階快取記憶體(L1快取記憶體)。除L1快取記憶體之外,處理器通常還具有一較大的第二快取記憶體,其被稱為二階快取記憶體(L2快取記憶體)。在一些狀況下,處理器可具有其他的額外快取記憶體階層(例如,L3快取記憶體及L4快取記憶體)。
為了給處理器提供足夠指令以填充處理器之管線的每一階段,處理器可自L2快取記憶體擷取一被稱為指令線(I線)的含有多個指令之群組中的指令。可將所擷取之I線放入L1指令快取記憶體(I快取記憶體)中,其中處理器之核心可存取I線中之指令。可類似地自L2快取記憶體擷取待由處理器處理之資料區塊(D線)且將其放入L1快取D-快取記憶體(D-快取記憶體)中。
自較高快取記憶體階層擷取資訊且將該資訊放入較低快取記憶體階層中之過程可被稱為提取,且該過程通常需要一定量的時間(潛時)。舉例而言,若處理器核心請求資訊且該資訊不在L1快取記憶體中(稱為快取誤失),則可自L2快取記憶體提取該資訊。由於搜尋下一快取記憶體/記憶體階層以獲得所請求之資訊,故每一快取誤失會導致額外潛時。舉例而言,若所請求之資訊不在L2快取記憶體中,則處理器可在L3快取記憶體中或在主記憶體中查找該資訊。
在一些狀況下,處理器處理指令及資料的速度可比自快取記憶體及/或記憶體擷取指令及資料的速度快。舉例而言,在一正在一管線中執行之指令試圖存取不在D-快取記憶體中之資料的情況下,管線階段可結束處理先前指令,同時該處理器正在自較高階層之快取記憶體或記憶體提取含有該資料的D線。當管線結束處理先前指令同時等待要提取之適當D線時,該管線將沒有指令可處理(稱為管線停滯)。當管線停滯時,處理器未被充分使用且喪失管線式處理器核心提供之益處。
因為在執行指令之前可能不知道所要資料之位址,所以在執行指令之前處理器可能不能搜尋所要資料。然而,一些處理器可藉由提取含有靠近(鄰接)一當前被存取之資料位址的資料位址之D線之一區塊來試圖防止此種快取誤失。提取附近D線依靠以下假設:當存取一D線中之一資料位址時,將亦有可能存取附近的資料位址(此概念通常被稱為參考的局部性)。然而,在一些狀況下,可能證實該假設是錯誤的,使得指令存取不位於當前D線附近的D線中之資料,從而導致快取誤失及處理器無效率。
因此,需要用於在一使用快取記憶體之處理器中執行指令並擷取資料之改良方法及設備。
本發明之實施例提供用於在一使用快取記憶體之處理器中執行指令並擷取資料之改良方法及設備。在一實施例中,排程一指令在該處理器中之執行。該處理器可具有至少一級聯之延遲執行管線單元,該至少一級聯之延遲執行管線單元具有兩個或兩個以上之執行管線,該等執行管線以相對彼此延遲之方式執行一共同發出群組中之指令。該方法包括接收指令之一發出群組,判定該發出群組中之一第一指令在該第一指令之一先前執行期間是否導致快取誤失,及若導致快取誤失則將該第一指令排程為在一管線中執行,在該管線中相對於該級聯之延遲執行管線單元中之另一管線而延遲執行。
本發明之另一實施例提供一包含一級聯之延遲執行管線單元之積體電路裝置,該級聯之延遲執行管線單元具有兩個或兩個以上之執行管線,該等執行管線以相對彼此延遲之方式執行一共同發出群組中之指令。該積體電路裝置亦包括電路,該電路經組態以:接收指令之一發出群組,判定該發出群組中之一第一指令在該第一指令之先前執行期間是否導致快取誤失,且當導致快取失誤時將該第一指令排程為在一管線中執行,在該管線中相對於該級聯之延遲執行管線單元中之另一管線而延遲執行。
本發明之又一實施例提供一包含一級聯之延遲執行管線單元之積體電路裝置,該單元具有兩個或兩個以上之執行管線,該等執行管線以相對彼此延遲之方式執行一共同發出群組中之指令。該積體電路裝置亦包括電路,該電路經組態以:接收指令之一發出群組,判定該發出群組中之一第一指令在該第一指令之先前執行期間是否導致快取誤失,且當導致快取失誤時將該第一指令排程為在一第一管線中執行,在該第一管線中相對於該級聯之延遲執行管線單元中之一第二管線而稍微延遲執行。
本發明大體而言提供一種用於D-快取記憶體誤失預測及排程之機制。在一實施例中,提供一種排程一指令在一處理器中之執行的方法。該處理器可具有至少一級聯之延遲執行管線單元,該至少一級聯之延遲執行管線單元具有兩個或兩個以上之執行管線,該等執行管線以相對彼此延遲之方式執行一共同發出群組中之指令,該方法包括:接收指令之一發出群組,判定該發出群組中之一第一指令在該第一指令之先前執行期間是否導致快取誤失,及若導致快取誤失則將該第一指令排程為在一管線中執行,在該管線中相對於該級聯之延遲執行管線單元中之另一管線而延遲執行。在一實施例中,當該第一指令被發至延遲了執行之該管線時,可對L2快取記憶體起始由該指令作為目標之資料的存取。當發出該指令時,藉由在延遲執行管線中執行該指令,且藉由起始該L2快取記憶體存取,必要時可為該指令及時自L2快取記憶體擷取由該指令作為目標之資料,以在不暫停該指令之執行的情況下使用該資料。
在下文中,參考本發明之實施例。然而,應瞭解,本發明不限於特定描述之實施例。實情為,預期下列特徵及元件之任何組合(無論是否關於不同實施例)來實施並實踐本發明。此外,在各種實施例中,本發明提供許多優於先前技術之優點。然而,雖然本發明之實施例可達成優於其他可能的解決方法及/或優於先前技術之優點,但一給定實施例是否達成一特定優點並非本發明之限制。因此,除非在請求項中明確陳述,否則下列態樣、特徵、實施例及優點僅為說明性而不應被認為是所附申請專利範圍之重要元件或限制。同樣地,除非在請求項中明確陳述,否則對"本發明"之參考不應被解釋為本文中所揭示之任何標的物(subject matter)之推廣且不應被認為是所附申請專利範圍之元件或限制。
以下是對附圖中所描繪的本發明之實施例的詳細描述。實施例為實例且如此詳細以便清楚地傳達本發明。然而,所提供之細節的量不欲限制實施例之預期變化;而與之相反,本發明意欲涵蓋屬於由所附申請專利範圍所界定的本發明之精神及範疇內的所有修改、均等物及替代物。
本發明之實施例可與一例如電腦系統之系統一起使用且下文將關於該系統描述該等實施例。如本文中所使用,系統可包括使用處理器及快取記憶體之任何系統,其包括個人電腦、網際網路設備、數位媒體設備、攜帶型數位助理(PDA)、攜帶型音樂/視訊播放器及視訊遊戲機(game console)。雖然快取記憶體可與使用快取記憶體之處理器位於同一晶粒上,但在一些狀況下,處理器及快取記憶體可位於不同晶粒(例如,單獨模組內之單獨晶片或單一模組內之單獨晶片)上。
雖然下文關於一具有多個處理器核心及多個L1快取記憶體之處理器來描述本發明之實施例,其中每一處理器核心使用多個管線來執行指令,但本發明之實施例可與使用快取記憶體之任何處理器(包括具有單一處理核心之處理器)一起使用。一般而言,本發明之實施例可與任何處理器一起使用且不限於任何特定組態。此外,雖然下文關於一具有被分為一L1指令快取記憶體(L1I快取記憶體,或I快取記憶體)及一L1D-快取記憶體(L1D-快取記憶體,或D-快取記憶體224)之L1快取記憶體來描述本發明之實施例,但可以使用一統一L1快取記憶體之組態使用本發明之實施例。
例示性系統之概述
圖1為描繪根據本發明之一實施例之系統100的方塊圖。系統100可含有一用於儲存指令及資料之系統記憶體102、一用於圖形處理之圖形處理單元104、一用於與外部裝置通信之I/O介面、一用於指令及資料之長期儲存之儲存裝置108,及一用於處理指令及資料之處理器110。
根據本發明之一實施例,處理器110可具有一L2快取記憶體112,以及多個L1快取記憶體116,並且每一L1快取記憶體116係由多個處理器核心114中之一者使用。根據一實施例,可管線操作每一處理器核心114,其中在一系列小步驟中執行每一指令,並且藉由一不同管線階段執行每一步驟。
圖2為描繪根據本發明之一實施例之處理器110的方塊圖。為簡單起見,圖2描繪處理器110之單一核心114且係關於該核心加以描述。在一實施例中,每一核心114可相同(例如,含有具相同管線階段之相同管線)。在另一實施例中,每一核心114可不同(例如,含有具不同管線階段之不同管線)。
在本發明之一實施例中,L2快取記憶體可含有由處理器110使用之指令及資料之一部分。在一些狀況下,處理器110可請求不含於L2快取記憶體112中之指令及資料。在所請求之指令及資料不含於L2快取記憶體112中的情況下,可(自較高階層快取記憶體或系統記憶體102)擷取所請求之指令及資料且將所請求之指令及資料放入L2快取記憶體中。當處理器核心114自L2快取記憶體112請求指令時,可首先由一預解碼器及排程器220處理該等指令(將於下文更詳細描述)。
在本發明之一實施例中,可成組地(in groups)自L2快取記憶體112提取指令,此被稱為I線。類似地,可成組地自L2快取記憶體112提取資料,此被稱為D線。圖1中描繪之L1快取記憶體116可被分為兩個部分:一用於儲存I線之L1指令快取記憶體222(I快取記憶體222)以及一用於儲存D線之L1D-快取記憶體224(D-快取記憶體224)。可使用L2存取電路210自L2快取記憶體112提取I線及D線。
在本發明之一實施例中,可藉由一預解碼器及排程器220來處理自L2快取記憶體112擷取之I線,且可將該等I線放入I快取記憶體222中。為進一步改良處理器效能,經常預解碼指令,例如,自L2(或較高階)快取記憶體擷取I線。該預解碼可包括多種功能,諸如位址產生、分支預測及排程(判定發出該等指令之次序),排程係作為控制指令執行之調度資訊(旗標之集合)被捕獲。在一些狀況下,可在多個核心114及L1快取記憶體之間共用預解碼器及排程器220。類似地,可將自L2快取記憶體112提取之D線放入D-快取記憶體224中。每一I線及D線中的一位元可用來追蹤L2快取記憶體112中之資訊線是I線還是D線。視需要,替代在I線及/或D線中自L2快取記憶體112提取資料,可以其他方式(例如藉由提取較小、較大或可變量之資料)自L2快取記憶體112提取資料。
在一實施例中,I快取記憶體222及D-快取記憶體224可分別具有一I快取記憶體目錄223及D-快取記憶體目錄225,以追蹤當前哪些I線及D線在I快取記憶體222及D-快取記憶體224中。當將I線或D線添加至I快取記憶體222或D-快取記憶體224中時,可將相應項目放入I快取記憶體目錄223或D-快取記憶體目錄225中。當自I快取記憶體222或D-快取記憶體224移除I線或D線時,可移除I快取記憶體目錄223或D-快取記憶體目錄225中之該相應項目。雖然以下關於使用D-快取記憶體目錄225之D-快取記憶體224來描述本發明之實施例,但本發明之實施例亦可用於不使用D-快取記憶體目錄225之情況。在該等狀況下,儲存在D-快取記憶體224中之資料本身可指示哪些D線存在於D-快取記憶體224中。
在一實施例中,可使用指令提取電路236來提取用於核心114之指令。舉例而言,指令提取電路236可含有一程式計數器,該程式計數器追蹤正在該核心中執行的當前指令。當遇到分支指令時,可使用該核心內之分支單元來改變該程式計數器。可使用I線緩衝器232來儲存自L1I快取記憶體222所提取之指令。可使用發出及調度電路234將自I線緩衝器232擷取之指令分組為指令群組,如下所述,接著可將該等指令群組並列地發至核心114。在一些狀況下,發出及調度電路可使用由預解碼器及排程器220提供之資訊來形成適當之指令群組。
除自發出及調度電路234接收指令外,核心114還可自各種位置接收資料。在核心114自資料暫存器請求資料的情況下,可使用暫存器檔案240來獲得資料。在核心114自記憶體位置請求資料的情況下,可使用快取載入及儲存電路250自D-快取記憶體224載入資料。在執行該載入的情況下,可將對所需資料之請求發至D-快取記憶體224。同時,可檢查D-快取記憶體目錄225以判定所要資料是否位於D-快取記憶體224中。在D-快取記憶體224含有所要資料的情況下,D-快取記憶體目錄225可指示D-快取記憶體224含有所要資料,且以後可在某一時刻完成D-快取記憶體存取。在D-快取記憶體224不含所要資料的情況下,D-快取記憶體目錄225可指示D-快取記憶體224不含所要資料。因為存取D-快取記憶體目錄225的速度可能比存取D-快取記憶體224的速度更快,所以在存取D-快取記憶體目錄225之後但在D-快取記憶體存取完成之前,可(例如,使用L2存取電路210)將對所要資料之請求發至L2快取記憶體112。
在一些狀況下,可在核心114中修改資料。可將經修改之資料寫至暫存器檔案或儲存在記憶體中。可使用寫回電路238將資料寫回至暫存器檔案240。在一些狀況下,寫回電路238可使用快取載入及儲存電路250將資料寫回至D-快取記憶體224。視需要,核心114可直接存取快取載入及儲存電路250以執行儲存。在一些狀況下,如下文所述,亦可使用寫回電路238將指令寫回至I快取記憶體222。
如上所述,發出及調度電路234可用來形成指令群組且將所形成之指令群組發至核心114。發出及調度電路234亦可包括用以在I線中旋轉併合併指令且藉此形成適當之指令群組的電路。發出群組之形成可能要考慮若干因素,諸如發出群組中之指令之間的相依性,以及自指令排序可達成之最佳化(如下文更詳細描述)。一旦形成一發出群組,便可將該發出群組並列地調度至處理器核心114。在一些狀況下,一指令群組可含有一個用於核心114中之每一管線的指令。視需要,該指令群組可為較小數目個指令。
根據本發明之一實施例,一或多個處理器核心114可使用級聯之延遲執行管線組態。在圖3所描述之實例中,核心114含有呈級聯組態之四個管線。視需要,在該組態中可使用較小數目(兩個或兩個以上之管線)或較大數目(四個以上之管線)。此外,圖3中描繪之管線之實體布局係例示性的,且未必暗示級聯之延遲執行管線單元之實際實體布局。
在一實施例中,級聯之延遲執行管線組態中之每一管線(P0、P1、P2、P3)可含有一執行單元310。執行單元310可含有執行一給定管線之一或多個功能的若干管線階段。舉例而言,執行單元310可執行對指令之提取及解碼之全部或一部分。由該執行單元執行的解碼可與預解碼器及排程器220共用,該預解碼器及排程器220係在多個核心114之間共用或視需要由單一核心114使用。該執行單元亦可自暫存器檔案讀取資料,計算位址,執行整數運算功能(例如,使用算術邏輯單元或ALU),執行浮點運算功能,執行指令分支,執行資料存取功能(例如,自記憶體載入並儲存),且將資料儲存回至暫存器(例如,儲存於暫存器檔案240中)。在一些狀況下,核心114可使用指令提取電路236、暫存器檔案240、快取載入及儲存電路250,及寫回電路以及任何其他電路來執行此等功能。
在一實施例中,每一執行單元310可執行相同的功能。視需要,每一執行單元310(或執行單元之不同組)可執行不同的功能集合。又,在一些狀況下,每一核心114中之執行單元310可與提供於其他核心中之執行單元310相同或不同。舉例而言,在一個核心中,執行單元3100 及3102 可執行載入/儲存及運算功能,而執行單元3101 及3102 僅可執行運算功能(arithmetic function)。
在一實施例中,如所描繪,可以相對於其他執行單元310延遲之方式執行該等執行單元310中之執行。所描繪之配置亦可被稱為級聯之延遲組態,但所描繪之布局未必指示該等執行單元之實際實體布局。在該組態中,在一指令群組中之指令(為方便起見,將其稱為I0、I1、I2、I3)係並列地發至該等管線P0、P1、P2、P3的情況下,可以相對於每一其他指令延遲之方式而執行每一指令。舉例而言,可首先在用於管線P0之執行單元3100 中執行指令I0,然後可在用於管線P1之執行單元3101 中執行指令I1,等等。
在一實施例中,一旦將該發出群組發至處理器核心114,便可立即在執行單元3100 中執行I0。稍後,在已於執行單元3100 中執行指令I0之後,執行單元3101 可開始執行指令I1,等等,使得並列地發至核心114之該等指令以相對於彼此延遲之方式被執行。
在一實施例中,一些執行單元310可相對於彼此延遲,而其他執行單元310相對於彼此不延遲。在第二指令之執行依賴於第一指令之執行的情況下,可使用轉發路徑(forwarding path)312將第一指令之結果轉發至第二指令。所描繪之轉發路徑312僅係例示性的,且核心114可含有自一執行單元310中之不同點至其他執行單元310或同一執行單元310的更多轉發路徑。
在一實施例中,可將未被執行單元310執行的指令(例如,被延遲之指令)保存在延遲佇列320或目標延遲佇列330中。延遲佇列320可用來保存指令群組中尚未被執行單元310執行的指令。舉例而言,當正在執行單元3100 中執行指令I0時,指令I1、I2及I3可保存在延遲佇列320中。一旦該等指令已移動通過延遲佇列320,便可將該等指令發至適當之執行單元310並執行該等指令。目標延遲佇列330可用來保存已被執行單元310執行之指令之結果。在一些狀況下,可將目標延遲佇列330中之結果轉發至執行單元310以供處理或在適當情況下使其無效。類似地,如下文所述,在一些狀況下,可使延遲佇列320中之指令無效。
在一實施例中,在一指令群組中之指令的每一者已通過延遲佇列320、執行單元310及目標延遲佇列330之後,可將結果(例如,資料及如下所述之指令)寫回至暫存器檔案或L1I快取記憶體222及/或D-快取記憶體224。在一些狀況下,可使用寫回電路238寫回一暫存器之最近修改值(該值係自目標延遲佇列330中之一者接收到)且丟棄無效之結果。
排程載入指令
根據本發明之一實施例,可藉由在具最少延遲之管線中(例如,在上述實例中,在管線P0 中)執行載入指令來減小歸因於快取誤失之管線停滯。在載入指令導致D-快取記憶體誤失的情況下,可使於該載入指令之後發出的指令無效且可將對資料之請求發送至L2快取記憶體112。在自L2快取記憶體112提取所要資料時,可將該載入指令重發至具有最大執行延遲之管線(例如,管線P3),且可在與該重發指令相同之發出群組中或在後續發出群組中發出該等無效之指令。
如上所述般執行該載入指令可在至少三個方面有益。第一,藉由最初在具有最少執行延遲之管線中執行該載入指令,可快速地判定該載入指令是否會導致D-快取記憶體誤失。較早判定了是否會產生D-快取記憶體誤失,便可使發至管線之較少指令(例如,後續發出群組中之指令)無效並重發該等指令。第二,藉由快速地判定所發出指令是否會導致L1快取誤失,可更快速地起始L2快取記憶體存取,藉此減少執行L2快取記憶體存取時管線中之任何所得暫停。第三,藉由將該載入指令重發至具有最大延遲之管線,可為待完成的對所要資料之L2快取記憶體存取提供更多時間(例如,在該載入指令正移動通過延遲佇列320時且在該指令被執行單元310重新執行之前),藉此防止處理器核心114之暫停。
圖4A至4B描繪根據本發明之一實施例之在延遲執行管線中執行指令的過程400。過程400可開始於步驟402且繼續至步驟404,在步驟404中接收待於一發出群組中執行的指令。
在步驟406中,可判定所接收之指令是否含有載入指令。若所接收之指令不含載入指令,則在步驟412中,可將該等指令放入一預設發出群組中、發至處理器核心114並執行該等指令。然而,若所接收之指令含有載入指令,則在步驟408中可判定是否可在一指令群組內將該載入指令發至具有最少延遲之管線。舉例而言,在具有最少延遲之管線為處理器核心114中執行一另一指令所需之功能的唯一管線(例如,若具有最少延遲之管線為可執行一分支指令的唯一管線)的情況下,可將該載入指令發至具有較多延遲之另一管線。又,在一些狀況下,該載入指令之執行可能依賴於其他已執行指令之結果。舉例而言,由該載入指令作為目標之資料的記憶體位址可能依賴於由另一指令執行之計算。在該載入指令依賴於同一發出群組中之另一指令的情況下,可在該載入指令之前,(例如)使用具有較少執行延遲之管線執行其他指令。視需要,在一些狀況下,可排程該發出群組中之指令(例如,藉由將該等指令分散在多個發出群組中),使得單一發出群組中之此等相依性得以避免。
若判定可在一發出群組內將該載入指令發至具有最少延遲之管線,則在步驟410中,可將該載入指令排程為發至具有最少延遲之管線(例如,管線P0 )。在步驟420中,可將該發出群組發至處理器核心114,且在步驟422中,可在具有最少延遲之管線中執行該載入指令。
在步驟424中,可自D-快取記憶體224請求用於該載入指令之資料,且可檢查D-快取記憶體目錄225以判定含有所請求之資料之D線是否位於D-快取記憶體224中。因為在具最少延遲之管線中執行載入指令,所以可比在具有較多延遲之管線(例如,管線P1 、P2 或P3 )中執行載入指令的情況下快地起始快取記憶體存取。
在步驟426中,可判定D-快取記憶體224是否含有所請求之資料。可基於(例如)由D-快取記憶體目錄225提供之資訊進行該判定。若D-快取記憶體224含有所請求之資料,則在步驟428中可自D-快取記憶體224接收所請求之資料,且在步驟442中過程400可繼續執行指令。
然而,若D-快取記憶體224不含所請求之資料,則在步驟430中,可使在該載入指令之後發至處理器核心114之指令(例如,後續發出群組中之指令)無效。可執行使隨後發出之指令無效的步驟(例如)以防止對可能依賴於該載入指令之結果的稍後指令之錯誤執行。在一實施例中,可藉由設定處理器核心114中之每一隨後發出之指令(例如,執行單元310或延遲佇列320中之隨後發出之指令)的一位元來執行使指令無效之步驟。該位元可指示由該等指令產生之結果係無效的。當(例如)寫回電路238偵測到該位元時,可丟棄由無效之指令產生之結果。視需要,可藉由覆寫該等指令自該處理器核心移除該等指令。在一實施例中,在使該等指令(包括該載入指令)無效之後,可記錄快取誤失以供稍後在排程中使用(將於下文加以更詳細描述),且可將無效之指令傳回至I快取記憶體222,使得可將該等指令重發至處理器核心114。
在步驟432中,可將對所請求之資料之請求發至L2快取記憶體。舉例而言,可使用L2存取電路210發出該請求。在一些狀況下,在D-快取記憶體目錄225指示所請求之資料不在D-快取記憶體224中之後,可自動發出該請求。
在步驟434中,可形成一具有發至具最多延遲之管線(例如,管線P3 )之載入指令的發出群組。在步驟436中,可將該發出群組發至處理器核心114,且在步驟438中,在一延遲佇列(例如,延遲佇列3203 )延遲該載入指令之後,可在延遲執行管線P3 中執行該載入指令。如上所述,藉由在具最多延遲之管線中執行該指令,可在執行該指令之前完成L2快取記憶體存取(例如,在該指令移動通過延遲佇列3203 時,L2快取記憶體存取可繼續),且用於該載入指令之資料可"準時"到達以執行該載入指令。
在步驟440中,可自D-快取記憶體224請求用於該載入指令之資料。假設L2快取記憶體112含有所請求之資料,則在步驟428中,將自D-快取記憶體224接收所請求之資料,在步驟442中,處理器核心114可繼續執行指令,且過程400可於步驟450結束。
在一些狀況下,在將存取請求發送至L2快取記憶體112且重發該載入指令以在具最多延遲之管線中執行該載入指令之後,L2快取記憶體112可能不含所請求之資料。在L2快取記憶體112不含所請求之資料的情況下,處理器核心114可能會暫停,同時向較高階層之快取記憶體(例如,L3或L4快取記憶體)及/或系統記憶體102進行存取請求。當自D-快取記憶體接收所請求之資料時,處理器核心114可重新開始對該載入指令及任何隨後接收之載入指令之執行。
在一些狀況下,具最少延遲之管線(或,必要時,具最多延遲之管線)可能不可用於按需要執行載入指令。在一實施例中,在具有所要延遲量之管線不可用的情況下,可將該載入指令排程為在"次佳"選擇之管線中被執行。舉例而言,在具有最少延遲量之管線P0 不可用於執行指令的情況下,可將該指令排程為在下一個具有最少延遲量之可用管線(例如,按優先次序,管線P1 、P2 或P3 )中被執行。
如上所述,藉由在具有最少延遲量之管線中執行載入指令,若載入指令導致快取誤失則可使減少數目個指令無效。此外,藉由將一會導致快取誤失之載入指令重發至具最多延遲之管線,可推遲該指令之執行,直至對一較高階之快取記憶體之快取記憶體存取已完成。如下文所描述,在使用預測及歷史資訊預測到一指令可能會導致快取誤失的情況下,亦可執行指令排程及執行中之其他最佳化。
使用D-快取記憶體誤失預測來排程載入指令
在一些狀況下,可使用快取誤失預測及歷史資訊來改變將指令排程為在(級聯的延遲執行管線核心中之)哪個管線中被執行。舉例而言,在一實施例中,可接收待發出之指令群組。若該群組中之一指令在該指令之先前執行期間導致快取誤失,則可將該指令排程為在一管線中被執行,在該管線中相對於該延遲執行管線單元中之另一管線而延遲執行。藉由將該指令排程為在延遲管線中被執行,可推遲該載入指令之執行,同時執行對較高階層之快取記憶體(例如,由於D-快取記憶體誤失,若存在)之存取。
圖5A至5B描繪根據本發明之一實施例之使用D-快取記憶體誤失預測來排程載入指令之執行的過程500。過程500可開始於步驟502且繼續至步驟504,在步驟504中,接收待在一發出群組中執行的指令。在步驟506中,可判定所接收之指令是否含有一載入指令。若不含載入指令,則在步驟514中可將所接收之指令放入預設發出群組中、發至處理器核心114並執行該等指令。
若所接收之指令含有載入指令,則在步驟508中可判定該載入指令先前是否導致快取誤失。在一實施例中,可使用D-快取記憶體失誤資訊(例如,記錄先前D-快取記憶體誤失之歷史之位元)來判定該載入指令先前是否導致快取資料誤失。如下文將描述,D-快取記憶體誤失資訊可儲存且維持於該指令自身中、具有該指令之指令線的一部分中、用於儲存該資訊之專門記憶體中及/或任何其他適合之位置。
若所接收的載入指令先前導致D-快取記憶體誤失,則在步驟510中可判定是否可將該載入指令排程為在具最多延遲之執行管線中被執行。如上所述,對是否可在一給定管線中執行一指令之判定可能依賴於該管線之處理能力、正被執行之指令之處理需求及放入一發出群組中之指令的指令間相依性。又,如上所述,在一些狀況下,為了允許將一指令發至具最多延遲之管線(或具最少延遲之管線,必要時),可藉由發出單獨發出群組中之不相容指令或藉由以其他方式修改哪些發出群組執行哪些指令來修改發出群組。
若可將該載入指令排程為在延遲執行管線中被執行,則在步驟512中可形成一具有經排程為發至延遲執行管線(例如,管線P3 )之該載入指令的發出群組。視需要,在可能的情況下,該指令可經排程以在一提供可用最大延遲量之可用管線中被執行。
在步驟520中,可將對由該載入指令作為目標之資料的請求發至L2快取記憶體112。可(例如)使用L2快取記憶體存取電路210發出該請求。如下文將描述,在一些狀況下,可在執行該載入指令之前起始L2快取記憶體存取。視需要,在一些狀況下,可執行該載入指令之一部分(例如,可計算該載入指令之載入有效位址),且接著可延遲該載入指令之執行,同時自L2快取記憶體112提取載入資料。
在步驟522中,可將該發出群組發至處理器核心114,且在步驟524中,可在具最多延遲之執行管線中執行該載入指令。當執行該載入指令時,在步驟526中,可自D-快取記憶體224請求由該載入指令作為目標之資料。若在步驟520中發至L2快取記憶體之請求成功,則在步驟528中,可接收自D-快取記憶體224所請求之資料。視需要,如上所述,若L2快取記憶體112不含所請求之資料,則處理器核心114可能暫停,同時自較高階層之快取記憶體及/或記憶體提取所請求之資料。然而,因為延遲該載入指令之執行,所以可減少該暫停之長度。在接收到所請求之資料之後,在步驟530中,可繼續執行指令,且過程500可於步驟550結束。
如上所述,當判定該載入指令先前導致快取誤失時,可將該載入指令發至可用的具最多延遲之管線,且可將對該載入資料的請求發至L2快取記憶體112。在延遲該載入指令(例如,在一延遲佇列320中)的同時,可執行L2快取,使得該載入資料及時到達D-快取記憶體224以便被該載入指令存取。
為了執行L2快取記憶體存取,可較早(例如,在(例如)藉由將該載入指令放入一延遲佇列320中而延遲該載入指令之前)判定該載入指令之有效位址。因此,在一實施例中,可在該指令被發至處理器核心114或被執行之前起始L2存取。舉例而言,當自L2快取記憶體112擷取該載入指令時,預解碼器及排程器220可判定該載入指令先前是否導致D-快取記憶體誤失,且若導致D-快取記憶體誤失,則起始L2快取記憶體存取。在L2存取係在執行該指令之前起始的情況下,L2存取可被稱為預提取(因為在執行該指令之前提取目標資料)。
在本發明之一實施例中,可在預解碼器及排程器220解碼一載入指令的同時判定該載入指令所請求之資料的目標位址。舉例而言,該目標位址可被直接提供作為該指令之部分。視需要,可(例如)使用預解碼器及排程器220或用以起始L2快取記憶體存取之其他電路可用之資訊來預先解出該目標位址。在另一實施例中,可在該指令之一第一執行期間計算該載入指令所請求之該資料的目標位址。接著可儲存計算出的位址以供隨後在起始L2快取記憶體存取時使用。
在一實施例中,在儲存目標位址的情況下,可儲存所請求之資料之整個目標位址。視需要,在一實施例中,在儲存目標位址的情況下,可僅儲存該目標位址之一部分(例如,該目標位址之足以識別一含有所請求之指令之D線的位址位元)。舉例而言,若可僅使用一有效位址之較高階32個位元來定位一含有所請求之資料之快取D線,則可僅將該32個位元保存為該目標位址以用於預提取該D線。
在本發明之一實施例中,可在該載入指令已被發至該處理器核心之後、但在該載入指令被放入一延遲佇列320中或由一執行單元310完全執行之前計算該載入目標位址。舉例而言,如圖6中所描繪,每一管線可使用一位址產生(AGEN)階段6020 、6023 。對無延遲或具較少延遲之管線而言,可作為執行單元3100 之第一階段執行AGEN階段6020 。然而,在具最多延遲之管線P3(或具有較大延遲之其他管線)中,可在該管線開始時、在該指令被延遲之前(例如,在延遲佇列3203 中)及在該指令被執行之前(例如,在執行單元3103 中)執行AGEN階段6023 。藉由在該延遲管線開始時執行位址產生,可快速地判定該載入有效位址,且可在延遲佇列320中延遲該載入指令的同時起始並執行L2快取記憶體存取。接著,來自L2快取記憶體112之資料可及時到達以在執行單元3103 中完成該載入指令之執行。
如上所述,在一實施例中,可使用D-快取記憶體誤失資訊來判定一載入指令先前是否導致D-快取記憶體誤失。在該D-快取記憶體誤失資訊指示一指令先前導致D-快取記憶體誤失的情況下,如上所述,可將該指令排程為在一延遲管線中被執行。
在一實施例中,D-快取記憶體誤失資訊可包括單一位元(MIS位元),該位元係在一載入指令導致D-快取記憶體誤失時為該載入指令所設定。最初,在執行該指令之前,可清除MIS位元,藉此指示:該指令先前尚未導致D-快取記憶體誤失。稍後,當執行該指令時,可判定該指令是否導致D-快取記憶體誤失。若該指令導致D-快取記憶體誤失,則可設定MIS位元,藉此指示:該指令先前已導致D-快取記憶體誤失。當隨後(例如,自L2快取記憶體112)擷取該載入指令以供執行時,可(例如)使用預解碼器及排程器220檢查所儲存的MIS位元。若MIS位元經設定,則預解碼器及排程器220可預測:該載入指令將導致另一D-快取記憶體誤失。因此,如以上參看圖5A-5B所描述,可使用該載入指令之目標位址來起始L2快取記憶體存取,且可排程該載入指令以供在可用的具最多延遲之管線中執行。
在一些狀況下,若該載入指令係稍後執行且不會導致D-快取記憶體誤失,則可將MIS清除為0,從而指示:該載入指令隨後可能不會導致D-快取記憶體誤失。視需要,MIS可保持設定為1(例如,作為固著位元(sticky bit)),藉此指示:該載入指令先前已導致D-快取記憶體誤失且可能會導致另一D-快取記憶體誤失。
在一些狀況下,其中設定了MIS位元且隨後自D-快取記憶體擷取所請求之資料,判定資料係如何放入該D-快取記憶體中可係有用的。舉例而言,在一些狀況下,因為使用MIS位元來提取資料,所以可避免D-快取記憶體誤失。視需要,在一些狀況下,可避免D-快取記憶體誤失而無需提取資料(例如,資料可能已在D-快取記憶體中,且L2存取可係不必要的)。在一實施例中,由於基於設定之MIS位元之預提取,可儲存一位元以指示資料(例如,D線中之資料)是否被放入D-快取記憶體224中。該位元可由處理器110用來判定預提取對防止D-快取記憶體誤失的有效性。
視需要,預解碼器及排程器220(或視需要,預提取電路)亦可判定預提取係不必要的且相應地改變I線中之MIS位元。在預提取係不必要的情況下(例如,因為被預提取之資料已在D-快取記憶體224中),可如上所述般清除MIS位元。預解碼器及排程器可(例如)藉由檢查D-快取記憶體目錄225或藉由維持已提取之資料及/或D線之一清單來判定所請求之資料是否在D-快取記憶體224中。
在本發明之一實施例中,可使用多個歷史位元(HIS)來預測載入指令是否將導致D-快取記憶體誤失且判定應如何排程載入指令以供執行。舉例而言,若HIS為兩個二進位位元,則00可對應於未預測到D-快取記憶體誤失,而01、10及11分別可對應於弱、強及極強的D-快取記憶體誤失預測。每當載入指令導致D-快取記憶體誤失時,可使HIS遞增,從而增加D-快取記憶體誤失之預測等級。當HIS為11且偵測到後續D-快取記憶體誤失時,HIS可保持為11(例如,計數器可於11飽和而不循環至00)。每當載入指令不導致D-快取記憶體誤失時,可使HIS遞減。在一些狀況下,其中使用多個歷史位元,多個歷史位元既可用於判定應儲存哪些資料位址又可用於判定應如何排程該載入指令。
如上所述,可使用D-快取記憶體誤失資訊及目標位址來判定是否起始L2快取記憶體存取。在一些狀況下,可執行L2快取記憶體存取而無需首先不檢查D-快取記憶體224及/或D-快取記憶體目錄225以判定由載入指令作為目標之資料是否實際在該D-快取記憶體中。舉例而言,在一些狀況下,可在起始對D-快取記憶體目錄225之請求之前起始L2快取記憶體存取。在起始L2快取記憶體存取之後,可(例如,使用L2快取記憶體存取電路210)將一請求發至D-快取記憶體目錄225。若D-快取記憶體目錄指示D-快取記憶體224不含所請求之資料,則L2存取可繼續。在首先起始L2快取記憶體存取且隨後將請求發至D-快取記憶體目錄225的情況下,L2存取可在減少量之時間內完成,因為已起始L2存取而無線等待對D-快取記憶體目錄225之請求之結果。若D-快取記憶體目錄225指示所請求之資料包含於D-快取記憶體224中,則可丟棄L2快取記憶體存取之結果,同時經由D-快取記憶體224存取所請求之資料。
視需要,在一些狀況下,在預解碼器及排程器220試圖自L2快取記憶體112預提取I線或D線之前,預解碼器及排程器220(或,視需要,其他預提取電路)可判定含有所請求之資料之D線是否已包含於D-快取記憶體224中,或是否已發出對所請求之I線或D線之預提取請求。舉例而言,可使用一含有最近經提取或預提取之I線或D線位址之歷史的小快取記憶體或緩衝器來判定是否已發出對I線或D線之預提取請求或所請求之I線或D線是已在I快取記憶體222中或D-快取記憶體224中。
若所請求之I線或D線已位於I快取記憶體222或D-快取記憶體224中,則L2快取記憶體預提取可能係不必要的,且因此可不執行L2快取記憶體預提取。如上所述,在藉由先前預提取請求使第二預提取請求變為不必要的情況下,可修改所儲存的D-快取記憶體誤失資訊。舉例而言,可修改該D-快取記憶體誤失資訊以指示L2快取記憶體預提取及該載入指令之修改排程係不必要的。
可以多種方式儲存D-快取記憶體誤失資訊及目標位址,該等方式可包括使用指令位元、I線位元及/或專門快取記憶體。在本發明之一實施例中,可為每一載入指令儲存D-快取記憶體誤失資訊及目標位址(必要時)。視需要,在一些狀況下,僅可儲存來自一些指令(例如,導致D-快取記憶體誤失之指令或一I線中比同一I線中之其他指令更頻繁地導致D-快取記憶體誤失的指令)的D-快取記憶體誤失資訊及/或目標位址。
在一實施例中,D-快取記憶體誤失資訊及/或目標位址可儲存在含有該載入指令之I線中。圖7A為描繪根據本發明之一實施例之用於將一載入指令之快取誤失資訊及/或目標位址儲存在I線702中之例示性I線702的方塊圖。
如所描繪,I線可含有多個指令(指令1、指令2等)、用於儲存位址(例如,有效位址EA)之位元及用於儲存控制資訊(CTL)之位元。在本發明之一實施例中,圖7A中描繪的控制位元CTL可用於儲存一載入指令之D-快取記憶體誤失資訊(例如,MIS及/或HIS位元),且EA位元可用於儲存該載入指令所請求之資料的目標位址。
作為將D-快取記憶體誤失資訊儲存在I線702中之一實例,當執行I線702中之指令時,處理器核心114可判定該I線內之一載入指令是否已導致D-快取記憶體誤失。若偵測到D-快取記憶體誤失,則可將該指令之目標位址(或該目標位址之一部分)儲存在EA中,且可將其他誤失資訊(例如,MIS或HIS位元)儲存在CTL位元中。在一些狀況下,亦可將該載入指令在I線702內之位置儲存在CTL位元中。舉例而言,若每一I線含有32個指令,則一儲存在CTL位元中之五位元二進位數(含有足以識別指令位置之位元)可用於識別對應於所儲存的D-快取記憶體誤失資訊及目標位址的載入指令。
在本發明之一實施例中,其中目標位址及/或D-快取記憶體誤失資訊係儲存在I線中,系統100中使用的每一階層之快取記憶體及/或記憶體可含有該等I線中所含之資訊的複本。在本發明之另一實施例中,僅規定階層之快取記憶體及/或記憶體可含有該等指令及/或I線中所含之資訊。可使用熟習此項技術者已知的快取連貫原則來更新每一階層之快取記憶體及/或記憶體中之I線之複本。
應注意,在使用指令快取記憶體之傳統系統中,處理器110通常不修改指令。因此,在傳統系統中,I線通常在一些時間之後在I快取記憶體222外老化,而非被寫回至L2快取記憶體112。然而,如本文中所描述,在一些實施例中,可將經修改之I線及/或指令寫回至L2快取記憶體112,藉此允許將預提取資料維持在較高的快取記憶體及/或記憶體階層。
作為一實例,當一I線中之指令已被處理器核心處理(有可能導致目標位址及/或D-快取記憶體誤失資訊被更新)時,可(例如,使用寫回電路238)將該I線寫至I快取記憶體222中,從而有可能覆寫儲存在I快取記憶體222中的該I線之一較舊版本。在一實施例中,在儲存在該I線中之資訊已改變的情況下,僅可將該I線放入I快取記憶體222中。視需要,在一實施例中,可總是將I線寫回至I快取記憶體222。
根據本發明之一實施例,當一經修改之I線被寫回至I快取記憶體222中時,可將該I線標記為已改變。在將一I線寫回至I快取記憶體222且標記為已改變的情況下,該I線可保持在該I快取記憶體中達不同量之時間。舉例而言,若該I線正由處理器核心114頻繁地使用,則可多次提取該I線且將其傳回至I快取記憶體222,其有可能每次都被更新。然而,若該I線未被頻繁地使用(被稱為老化),則可自I快取記憶體222去除該I線。當該I線被自I快取記憶體222去除時,可判定該I線是否被標記為已改變。在該I線被標記為已改變的情況下,可將該I線寫回至L2快取記憶體112中。視需要,可總是將該I線寫回至L2快取記憶體112。在一實施例中,可視需要一次性將該I線寫回至若干快取記憶體階層(例如,寫回至L2快取記憶體112及I快取記憶體222)或寫回至不同於I快取記憶體222之階層(例如,直接寫回至L2快取記憶體112)。
在一實施例中,可將該載入指令所請求之資料的目標位址直接儲存在(附加至)如圖7A中所描繪之I線中。所儲存的目標位址EA可為有效位址或有效位址之一部分(例如,有效位址之高階32個位元)。目標位址EA可識別該載入指令所請求之資料,或視需要可識別含有該目標資料之位址的D線。根據一實施例,該I線可儲存多個位址,並且每一位址對應於該I線中之一載入指令。
在一些狀況下,EA及/或CTL位元可儲存在該I線中為該目的而分配之位元中。視需要,在本發明之一實施例中,本文中描述的有效位址位元EA及控制位元CTL可儲存在該I線之其他未使用位元中。舉例而言,L2快取記憶體112中之每一資訊線可具有額外資料位元,該等資料位元可用於在不同快取記憶體階層之間傳送之資料的錯誤校正(例如,錯誤校正碼ECC,其用於確保所傳送之資料不會惡化且在出現任何惡化時修復惡化)。在一些狀況下,每一階層之快取記憶體(例如,L2快取記憶體112及I快取記憶體222)可含有每一I線之相同複本。在每一階層之快取記憶體含有給定I線之複本的情況下,可不使用ECC。實情為,例如,可使用同位位元來判定是否在快取記憶體之間正確地傳送一I線。若同位位元指示:在快取記憶體之間錯誤地傳送一I線,則可自傳送中的快取記憶體提取該I線(因為傳送中的快取記憶體包括該線),而不執行錯誤檢查。
作為將位址及控制資訊儲存在一I線之其他未使用位元中之一實例,考慮將對於每隔一個所儲存字之錯誤校正使用十一個位元的錯誤校正協定。在一I線中,該十一個位元之一者可用於儲存每隔一個指令的同位位元(在每個字儲存一個指令的情況下)。每個指令之剩餘五個位元可用於儲存每一指令之控制位元及/或位址位元。舉例而言,該五個位元中的四個可用於儲存該指令之D-快取記憶體誤失資訊(諸如,MIS及/或HIS位元)。若該I線包括32個指令,則剩餘的32個位元(每一指令一個位元)可用於儲存(例如)該載入指令之目標位址之全部或一部分。如上所述,在一些狀況下,可擷取每一載入指令之目標位址且將該目標位置儲存在I線中。視需要,可擷取被最頻繁地執行之載入指令之目標位址且將該目標位址儲存在I線中。
在本發明之一實施例中,一I線可含有多個載入指令,且可儲存該等載入指令之每一者的D-快取記憶體誤失資訊。在一實施例中,可追蹤多個D-快取記憶體誤失歷史,但僅可將該等指令中對應於被最頻繁地預測之D-快取記憶體誤失的一個目標位址儲存在EA中。視需要,可將會導致D-快取記憶體誤失之每一載入指令的目標位址儲存在單一I線中。如下文將描述,在未儲存一載入指令之一有效位址的情況下(例如,因為由該載入指令導致之D-快取記憶體誤失係不可預測的或高於一預測臨限值),可將該載入指令發至具最少延遲之管線以供執行(例如,如以上參看圖4A-4B所描述),藉此快速地解出該載入指令之目標位址且判定該載入指令是否會導致D-快取記憶體誤失。
在一些狀況下,可在解碼且/或執行(被稱為重新編碼)該載入指令之後將D-快取記憶體誤失資訊儲存在該指令中。圖7B為描繪根據本發明之一實施例之例示性經重新編碼之載入指令704的方塊圖。載入指令704可含有一用於識別指令類型的操作碼(Op碼)、一或多個暫存器運算元(Reg.1、Reg.2)及/或資料。如所描繪,載入指令704亦可含有用於儲存MIS及/或HIS位元的位元。
當執行載入指令704時,可判定該載入指令是否導致D-快取記憶體誤失。作為該判定之結果,可如上所述般修改MIS及/或HIS位元。接著可將MIS及/或HIS位元編碼至指令704中,使得在隨後解碼該指令時,可由(例如)預解碼器及排程器220檢查該等MIS及/或HIS位元。該預解碼器及排程器接著可起始L2快取記憶體存取且排程載入指令704以供適當地執行。如上所述,在一些狀況下,當重新編碼一載入指令704時,可將含有該指令之I線標記為已改變且將其寫回至I快取記憶體222。
在一實施例中,亦可使用指令704之其他位元來重新編碼該指令。舉例而言,指令704中之位元可用於記錄該載入指令是否獨立及/或是否可解出。又,指令704中之位元可用於記錄該指令是否可指派給一給定管線(例如,具最多延遲之管線)。
在一實施例中,如上所述,可在已執行該指令後重新編碼指令704中之位元。在一些狀況下,當該指令係自較高階原始碼編譯而來時,亦可將D-快取記憶體誤失資訊編碼至該指令中。舉例而言,在一實施例中,一用於編譯該原始碼之編譯器可經設計以辨識可能導致D-快取記憶體誤失之載入指令且相應地設定該載入指令中之MIS及/或HIS位元。
視需要,一旦已產生一程式之原始碼,便可將該原始碼編譯為指令,且接著可在測試執行中執行該等指令。可監視該測試執行及該測試執行之結果,以判定哪些載入指令會導致D-快取記憶體誤失。接著可重新編譯該原始碼,使得根據該測試執行將該載入指令之MIS及/或HIS位元設定為適當值。在一些狀況下,可在處理器110中執行該測試執行。在一些狀況下,可使用處理器110中之控制位元或控制插腳來將處理器110置於用於該測試執行之專門測試模式中。視需要,可使用經設計以執行該測試執行且監視該等結果之專門處理器。
在本發明之一實施例中,D-快取記憶體誤失資訊(MIS及/或HIS位元)可儲存在專門的快取記憶體(被稱為影子快取記憶體(shadow cache))中。舉例而言,當載入指令會導致D-快取記憶體誤失時,可將一項目放入該影子快取記憶體中。載入指令之位址(或,視需要,含有該載入指令之I線之位址)可用作對該影子快取記憶體之索引。用於判定載入指令之目標位址之資訊(例如,在預解碼期間或在該載入指令之先前執行期間計算出的有效位址)亦可維持在該影子快取記憶體中。當含有該載入指令之發出群組被發至處理器核心114時(或在任何其他適合之時間),可如上所述使用該目標位址資訊來起始L2快取記憶體存取。
在一實施例中,當(例如,預解碼器及排程器220)接收到一含有一載入指令之I線時,可搜尋該影子快取記憶體(例如,該影子快取記憶體可為內容可定址的)以獲得對應於所提取I線之一項目(或多個項目)(例如,一與所提取I線具有相同之有效位址的項目)。若發現一對應項目,則預解碼器及排程器220或其他電路可使用該D-快取記憶體誤失歷史資訊及/或與該項目相關聯之目標位址來排程該載入指令並起始L2快取記憶體存取(若必要)。
在本發明之一實施例中,該影子快取記憶體可儲存如上所述的控制位元(例如,D-快取記憶體誤失資訊)及目標位址兩者。視需要,控制位元可儲存在該I線及/或個別指令中,而其他資訊係儲存在影子快取記憶體中。在任一狀況下,在一實施例中,可根據以上關於判定哪些項目應儲存在I線中所列舉之原理的任一者來管理該影子快取記憶體中之項目。作為一實例,可將導致強烈地預測D-快取記憶體誤失之載入指令之目標位址儲存在影子快取記憶體中,而可覆寫儲存在影子快取記憶體中之對應於弱預測D-快取記憶體誤失的目標位址。
除使用上述技術來判定哪些項目應儲存在影子快取記憶體中外,在一實施例中,還可使用傳統的快取記憶體管理技術來管理影子快取記憶體,該等技術不包括或包括上述技術。舉例而言,該影子快取記憶體中之項目可具有指示該影子快取記憶體中之項目被存取之頻率的年齡位元(age bit)。若一給定項目被頻繁地存取,則年齡位元可保持較小(例如,初期)。然而,若該項目被不頻繁地存取,則年齡值可增加,且在一些狀況下,可自該影子快取記憶體丟棄該項目。
在本發明之一實施例中,可在執行指令的同時持續地追蹤並更新目標位址及D-快取記憶體誤失資訊,使得D-快取記憶體誤失資訊及其他儲存值可在執行一給定之指令集合時隨時間改變。因此,可(例如)在執行一程式時動態地修改目標位址及D-快取記憶體誤失資訊。
在本發明之另一實施例中,可在一指令集合之初始執行階段期間(例如,在執行一程式的初始"訓練"段期間)儲存目標位址及D-快取記憶體誤失資訊。初始執行階段亦可被稱為初始化階段或訓練階段。在訓練階段期間,可追蹤D-快取記憶體誤失資訊且可根據上述準則儲存一或多個目標位址(例如,儲存在含有該指令之I線中或儲存在影子快取記憶體中)。當訓練階段結束時,所儲存的目標位址及D-快取記憶體誤失資訊可繼續用於執行資料預提取並排程載入指令之執行。
在一實施例中,可使用一或多個位元(例如,儲存在含有該載入指令之I線或儲存在專門快取記憶體或暫存器中之位元)來指示一指令是否正在訓練階段中被執行或處理器110是否處於訓練階段模式中。舉例而言,可在訓練階段期間清除處理器110中之模式位元。當該位元被清除時,可如上所述般追蹤該D-快取記憶體誤失資訊且可更新該(該等)目標位址。當訓練階段結束時,可設定該位元。當該位元被設定時,不再可更新該(該等)目標位址且訓練階段可結束。
在一實施例中,訓練階段可持續規定的時間段(例如,直至許多時脈週期已過去,或直至一給定指令已執行多次)。在一實施例中,當該規定的時間段已過去且退出該訓練階段時,可仍然儲存該(該等)最近儲存的目標位址及/或D-快取記憶體誤失資訊。
在本發明之另一實施例中,該訓練階段可繼續,直至滿足一或多個退出準則。舉例而言,在D-快取記憶體誤失歷史被儲存的情況下,該初始執行階段可繼續,直至D-快取記憶體誤失變得可預測(或強可預測)。當一載入指令之結果變得可預測時,可在I線中設定一鎖定位元來指示該初始訓練階段已結束且該強可預測載入指令之目標位址可用於在自L2快取記憶體112提取該指令時執行的後續預提取及排程。
在本發明之另一實施例中,可在間歇的訓練階段中修改目標位址及快取誤失資訊。舉例而言,可儲存每一訓練階段之頻率及持續時間值。每當對應於該頻率之數目個時脈週期已過去時,可起始一訓練階段且該訓練階段可持續規定的持續時間值。在另一實施例中,每當對應於該頻率之數目個時脈週期已過去時,可起始該訓練階段且該訓練階段繼續,直至滿足規定的臨限條件(例如,如上所述,直至到達一指令的規定之D-快取記憶體誤失可預測性等級)。
在一些狀況下,僅可為可被發至具最多延遲之執行管線的載入設定MIS位元及/或HIS位元。視需要,一指示該指令是否為獨立及/或可解出之指令的第二位元可被重新編碼至該指令中且同MIS位元及/或HIS位元一起用於判定該指令之適當排程。
其他實施例
在本發明之一實施例中,在尚未設定MIS位元及/或HIS位元的情況下,在MIS位元及/或HIS位元預測一載入指令將不導致D-快取記憶體誤失的情況下,及/或在尚未計算且/或儲存一載入指令之目標位址的情況下,可將該載入指令排程為在具最少延遲之管線(例如,P0 )中被執行,以使得可快速地解出該指令之結果(例如,該指令是否導致D-快取記憶體誤失及/或該指令之目標位址),且可最小化處理器核心114中之任何所得暫停或指令無效(若存在)。否則,在預測到D-快取記憶體誤失且有效目標位址可用的情況下,可將該指令發至具最多延遲之管線且可如上所述般起始L2快取記憶體存取。
圖8A至8C描繪根據本發明之一實施例之使用D-快取記憶體誤失資訊來判定一載入指令之排程的過程800。如所描繪,過程800可開始於步驟802且繼續至步驟804,在步驟804中,接收待在一發出群組中執行的指令。若所接收之指令含有一載入指令,則在步驟808中,可判定該載入指令先前是否導致快取誤失。可(例如)藉由檢查MIS位元來判定該載入指令先前是否導致快取誤失。若該MIS位元被設定,則其可指示該載入指令先前導致快取誤失。
若該載入指令先前導致快取誤失,則在步驟810中可判定是否可將該載入指令排程為在具最多延遲之執行管線中執行。如上所述,在具最多延遲之管線不提供該載入指令所需之功能的情況下,在需要將另一指令發至具最多延遲之管線的情況下,在尚未計算該指令之目標位址的情況下,或由於任何其他原因,一指令可能不能在具最多延遲之管線中被執行。視需要,若該指令不可發至具最多延遲之管線,則可試圖將該指令發至下一具有最大延遲的可用管線。
若可將該載入指令排程為在具最多延遲之管線中被執行,則在步驟832中,可形成一具有被發至具最多延遲之管線之載入指令的發出群組。在步驟834中,可將對由該載入指令作為目標之資料的請求發至L2快取記憶體112,且在步驟836中,可發出該發出群組。在步驟838中,可在具最多延遲之管線(P3 )中執行該載入指令。接著,在步驟840中,可自D-快取記憶體224請求由該載入指令作為目標之資料。
在步驟842中,假設已自L2快取記憶體112擷取所請求之資料且將其放入D-快取記憶體224中,則可自D-快取記憶體224接收所請求之資料。接著,在步驟844中,處理器核心114可繼續執行指令且過程800可於步驟850結束。
參考回步驟808及步驟810,若該載入指令先前不導致D-快取記憶體誤失,或若不可將該載入指令排程為在具最多延遲之管線中被執行,則過程800可試圖將該載入指令排程至具最少延遲之管線以判定該載入指令是否將導致D-快取記憶體誤失及/或判定該載入指令之目標位址。因此,在步驟812中,判定是否可將該載入指令排程為在具最少延遲之執行管線中執行。若該載入指令不能在具最少延遲之管線中執行,則在步驟814中,可將該等接收指令放入一預設發出群組中、發出該發出群組並執行指令。
若該載入指令可排程為在具最少延遲之執行管線中執行,在步驟820中,可形成一具有該發至具最少延遲之管線(P0 )之載入指令的發出群組,且在步驟822中,可發出該發出群組。
在步驟824中,可在具最少延遲之管線中執行該載入指令。在步驟826中,可自D-快取記憶體224請求用於該載入指令之資料,且可檢查D-快取記憶體目錄225以判定所請求之資料是否在D-快取記憶體224中。接著,在步驟828中,可判定D-快取記憶體目錄225是否指示所請求之資料在D-快取記憶體224中。若所請求之資料在D-快取記憶體224中,則在步驟842中,可接收所請求之資料,且在步驟844中,過程800可繼續執行指令。
然而,若D-快取記憶體224不含所請求之資料,則在步驟830中,可使隨後發至處理器核心114之指令無效,且在步驟832中,可形成一具有被發至具最多延遲之執行管線之載入指令(若可能)的發出群組。接著,如上所述,可將對所請求之資料的請求發送至L2快取記憶體112。視需要,一旦D-快取記憶體目錄225指示所請求之資料不在D-快取記憶體224中,便可將對由該載入指令作為目標之資料的請求動態地轉發至L2快取記憶體112。藉由發出該發出群組(步驟836)、執行該載入指令(步驟838)、自D-快取記憶體224請求資料(步驟840)及自D-快取記憶體224接收資料(步驟842)、繼續執行指令(步驟844),及於步驟850結束,過程800可如所述接著繼續。
因此,如上所述,藉由將一經預測為將導致D-快取記憶體誤失之載入指令發至具最多延遲之執行管線,可藉由延遲該載入指令之執行同時自較高階層之快取記憶體及/或記憶體提取該載入指令所請求的資料來防止或減少處理器暫停。然而,在一載入指令先前未被執行的情況下,在不可預測該載入指令是否導致D-快取記憶體誤失的情況下,或在不能判定由該載入指令作為目標之資料的情況下,可將該指令發至具最少延遲之執行管線,藉此允許快速地解出該指令之結果且最小化處理器核心114之任何所得暫停。
在一些狀況下,可將一具有設定之D-快取記憶體誤失旗標之載入指令排程為在一具最少延遲或具較少延遲之管線中執行,且可將該載入指令之結果轉發另一管線(例如,延遲了執行之管線)。舉例而言,圖9為描繪根據本發明之一實施例之使用D-快取記憶體誤失資訊來判定一載入指令之排程之過程900的流程圖。如所描繪,過程900可開始於步驟902,在步驟902中,自記憶體接收一待執行之載入指令。在步驟904中,可執行該載入指令,且在步驟906中,若該載入指令導致快取誤失,則設定一指示該D-快取記憶體誤失之旗標。
在步驟908中,在後續預解碼期間,可偵測該設定之D-快取記憶體誤失旗標,且可將該載入指令排程為在可能的具最少延遲之執行管線(例如,管線P0)中被執行。舉例而言,若具最少延遲之管線不可用,則可將該載入指令排程為在一相對於處理器核心114中之其他管線(例如,管線P1、P2等)具較少延遲之管線中執行。在一些狀況下,僅當該載入指令可在不暫停執行指令的情況下發至管線(例如,為了允許將其他指令排程為在待執行之第一管線中執行)時,才可執行該排程(例如,排程至具最少延遲或具較少延遲之管線)。視需要,即使該排程導致暫停,仍可將該載入指令排程為在具最少延遲或具較少延遲之執行管線中執行。
在一些狀況下,可記錄一確認計數。如下文將更詳細描述,該確認計數可用於判定該D-快取記憶體誤失旗標是否準確地識別一可能導致D-快取記憶體誤失之載入指令。若該D-快取記憶體誤失旗標不能準確地識別一可能導致D-快取記憶體誤失之載入指令,則在一些狀況下,可為排程目的而忽略該旗標,或可修改排程該載入指令的條件。
因此,在步驟910中,在該載入指令之後續執行期間,可執行L2快取記憶體存取以獲得載入資料,但可檢查D-快取記憶體目錄225以判定該載入資料是否已在D-快取記憶體224中。在步驟912中,若該資料在D-快取記憶體224中(如D-快取記憶體目錄225所指示),則可減小該確認計數(當該計數達到零時停止),從而指示:所考慮之資料已在D-快取記憶體224中且未出現D-快取記憶體誤失。否則,若該資料不在D-快取記憶體224中,則可增加該計數(直至計數器飽和),從而指示:出現D-快取記憶體誤失。
在步驟914中,當自L2快取記憶體112接收到載入資料時,可將該載入資料轉發至一具有較大執行延遲(例如,比執行該載入指令之管線之延遲大)之管線(若該轉發係在接收轉發之載入指令之管線中執行該指令所必需)。在一些狀況下,管線之延遲的差異量可大於或等於L2快取記憶體存取潛時,藉此允許對於該載入指令之L2快取記憶體存取在執行該轉發之前結束。因此,藉由在具最少延遲之執行管線中執行該載入指令,可及時接收到載入資料以由(例如,在具有較大執行延遲之管線中被執行的)其他指令轉發或使用。
圖10為描繪根據本發明之一實施例之可轉發載入資料之處理器核心1014的方塊圖。如所描繪,該處理器核心可含有複數個延遲執行管線(P0、P1、......、P5)。在一些狀況下,可提供自一個執行單元310至其他執行單元的轉發路徑312。在一些狀況下,可提供自一具較少延遲之執行管線至一具較大延遲之管線的轉發3100-2 ,且該轉發3120-2 可用於將一載入指令之結果轉發至使用該等結果之另一指令。在一些狀況下,可執行自一執行單元至另一執行單元之轉發3120-2 。視需要,在一些狀況下,可執行自一延遲目標佇列330至一執行單元310之轉發3120-2
如上所述,在一些狀況下,可將該載入指令排程為在相對於處理器核心1014中之其他管線具較少延遲的若干管線中之一者中被執行。舉例而言,參看圖10,將載入指令排程於管線P0中可允許執行自管線P0至具有較大延遲之管線中之若干管線(例如,管線P3、P4或P5)的轉發。然而,若將另一指令排程為在管線P0中被執行(例如,因為該指令係在該載入指令可執行之前被執行),則可將該載入指令放入相對於核心1014中之其他管線具較少延遲的另一管線(例如,管線P1或P2)中。藉由將該載入指令放入具較少延遲之管線中,可提供至具有較大管線延遲之管線中之一者的轉發。舉例而言,管線P1可提供至管線P4或P5之轉發,且管線P2可提供至管線P5之轉發。藉由提供複數個具較少延遲之管線(可自該等管線轉發載入資料),可為排程可能導致D-快取記憶體誤失之載入指令之執行提供較大靈活性。
如上所述,該確認計數可用於(例如)判定如何執行載入指令。舉例而言,若該確認計數高於某一臨限值(例如,若該確認計數為2或3),則可如上所述將該載入指令發至具最少延遲或具較少延遲之管線,而不管該載入指令在發出期間是否暫停。舉例而言,在一些狀況下,一程式可執行一連串的相關載入,其中每一載入使用一先前載入指令之結果來執行一後續載入。該等相關載入鏈可在一程式使用一系列指標來存取資料的情況下出現。在接收一相關載入鏈以由處理器110執行的情況下,且在該相關載入鏈中之一指令導致快取誤失(例如,該相關載入鏈中之第一指令)的情況下,該等指令中之每一者可被暫停,直至由該第一指令載入之資料被提取。在一些狀況下,該暫停可係有益的,因為在暫停指令執行且不處理指令時,處理器110可消耗較少功率。
若該確認計數在一上臨限值與一下臨限值之間的另一範圍內(例如,該確認計數為1),則預解碼器及排程器電路220可試圖將該載入指令排程至具最少延遲或具較少延遲之執行管線,但若該載入指令不能在無暫停的情況下被排程至具最少延遲或具較少延遲之執行管線,則處理器可改為將該載入指令發至該等處理器管線中之一者(例如,管線P3、P4或更大)且在該等具較少延遲之管線中之一者中先行執行該載入指令。
又,若該確認計數低於一給定臨限值(例如,低於一下臨限值,諸如若該確認計數為零),則預解碼器及排程器220可預測該載入指令將導致快取誤失且可將該載入指令放入一預設發出群組中以供執行(例如,可正常地排程該載入指令)。又,在一些狀況下,若該確認計數達到零,則即使該誤失旗標為所謂的"固著位元",仍可清除該載入指令之D-快取記憶體誤失旗標。
在一些狀況下,處理器110可偵測到載入鏈且回應於偵測到該等相關載入鏈而修改D-快取記憶體誤失資訊之儲存。舉例而言,在試圖存取同一資料線的多個載入指令各自導致快取誤失的情況下,因為在該資料線已由第一載入指令載入之後,同一資料線可由後續載入指令用於立即執行,所以對該處理器而言,僅將載入指令群組中之第一載入指令標記為快取誤失便可足夠。該判定可包括偵測會導致快取誤失的多個載入指令、比較多個所偵測之載入指令之載入位址,及判定該等所偵測之載入指令中之哪些指令具有相同載入位址。當處理器110已判定哪些載入指令具有相同載入位址時,該處理器可判定哪個載入指令被最早執行(例如,第一載入指令)且僅為所偵測之匹配的載入指令群組中之第一載入指令設定D-快取記憶體誤失旗標。
在一實施例中,在一發出群組含有多個各自具有相關聯預測等級之載入指令的情況下,可根據每一指令之預測等級給出排程的優先權。舉例而言,在強預測一載入指令將導致D-快取記憶體誤失的情況下,該指令可優於同一發出群組中經弱預測將導致D-快取記憶體誤失之指令而排程為在具最多延遲之管線中被執行。視需要,可將該發出群組分為兩個發出群組,從而允許將每一指令發至具最多延遲之執行管線。
在一些狀況下,可選擇具最多延遲之執行管線中之延遲量,使得該延遲大於或等於完成L2快取記憶體存取所需的時間量,藉此隱藏L2快取記憶體存取潛時。舉例而言,可自判定L1快取記憶體不含所請求之資料的時刻至可自L2快取記憶體112(假設不必自較高階層之快取記憶體及/或記憶體提取該資料)獲得所請求之資料的時刻量測L2快取記憶體存取時間。換言之,若在L1 D-快取記憶體目錄225指示所請求之資料不在D-快取記憶體224中之後用7個週期來完成L2快取記憶體存取,則可將具最多延遲之管線中之延遲量設定為7個週期,從而允許將該指令重發至具最多延遲之管線、保存在延遲佇列3103 中,且在所請求之資料自L2快取記憶體112到達時執行該指令。可藉由(例如)在該等延遲佇列320中插入階段延遲來執行將該延遲插入至具最多延遲之執行管線中。
在一些狀況下,在起始L2快取記憶體存取之前(例如,對於經預測將導致D-快取記憶體誤失之載入指令),L2快取記憶體存取電路210自該L2快取記憶體預提取一D線,L2快取記憶體存取電路210可首先使用D-快取記憶體目錄225來判定含有由該載入指令作為目標之資料的該D線是否已位於該D-快取記憶體中。在L1目錄225指示該D線已位於該D-快取記憶體中的情況下,L2預提取可為非必需的且該L2預提取電路可不將預提取請求發至L2快取記憶體112。在D-快取記憶體目錄225指示該D線尚未位於D-快取記憶體224中的情況下,L2快取記憶體存取電路210可自L2快取記憶體112請求適當的D線。
在一些狀況下,在MIS位元已被設定且預測一指令可能導致D-快取記憶體誤失的情況下,該預測可變得不可靠,例如,執行該指令可能不導致D-快取記憶體誤失。在該情況下,若該指令的重複執行不導致D-快取記憶體誤失,則稍後可清除MIS位元。舉例而言,一計數器可記錄該載入指令已導致D-快取記憶體誤失之先前次數。每當該指令導致D-快取記憶體誤失時,可將該計數器重設為0。每當該指令不導致D-快取記憶體誤失時,可使該計數器遞增。當該計數器達到一給定臨限值(例如,4次連續無誤失)時,可清除預測位元MIS。視需要,替代每當該指令導致誤失時重設該計數器,可使該計數器遞減。
藉由提供用於清除MIS預測位元之機制,處理器可避免將一給定載入指令不必要地排程至具最多延遲之執行管線。此外,在預測位元被清除的情況下,可設定另一位元或另一些位元以指示:該指令是否導致D-快取記憶體誤失係不可預測的。如上所述,在一載入指令之結果不可預測的情況下,可將該載入指令發至具最少延遲之管線以較早解出該載入指令之結果且藉此最小化任何所得處理器暫停。
雖然前述內容係針對本發明之實施例,但在不脫離本發明之基本範疇的情況下,可想出本發明之其他及另外實施例,且本發明之範疇係由以下申請專利範圍所判定。
100...系統
102...系統記憶體
104...圖形處理單元
106...I/O介面
108...儲存裝置
110...處理器
112...L2快取記憶體
114...處理器核心
116...L1快取記憶體
210...L2存取電路/L2快取記憶體存取電路
220...預解碼器及排程器
222...L1指令快取記憶體/I快取記憶體
223...I快取記憶體目錄
224...L1 D-快取記憶體/D-快取記憶體
225...D-快取記憶體目錄
232...I線緩衝器
234...發出及調度電路
236...指令提取電路
238...寫回電路
240...暫存器檔案
250...快取載入及儲存電路
310...執行單元
3100 ...執行單元
3101 ...執行單元
3102 ...執行單元
3103 ...執行單元
320...延遲佇列
3203 ...延遲佇列
330...目標延遲佇列
702...I線
704...載入指令
1014...處理器核心
CTL...控制資訊
EA...有效位址
P0...管線
P1...管線
P2...管線
P3...管線
P4...管線
P5...管線
圖1為描繪根據本發明之一實施例之系統的方塊圖。
圖2為描繪根據本發明之一實施例之電腦處理器的方塊圖。
圖3為描繪根據本發明之一實施例之處理器之核心中之一者的方塊圖。
圖4A至4B描繪根據本發明之一實施例之在延遲執行管線中執行指令的過程。
圖5A至5B描繪根據本發明之一實施例之使用D-快取記憶體誤失預測來排程載入指令之執行的過程。
圖6為描繪根據本發明之一實施例之具有一較早位址產生階段之例示性延遲執行處理器管線的方塊圖。
圖7A為描繪根據本發明之一實施例之用來將一載入指令之D-快取記憶體誤失資訊及/或目標位址儲存在I線中之例示性I線的方塊圖。
圖7B為描繪根據本發明之一實施例之例示性重新編碼載入指令的方塊圖。
圖8A至8C描繪根據本發明之一實施例之使用D-快取記憶體誤失資訊來判定一載入指令之排程的過程。
圖9為描繪根據本發明之一實施例之使用D-快取記憶體誤失資訊來判定將一載入指令排程至具最少延遲之執行管線之過程的流程圖。
圖10為描繪根據本發明之一實施例之具有轉發路徑之級聯之延遲執行管線的方塊圖。
100...系統
102...系統記憶體
104...圖形處理單元
106...I/O介面
108...儲存裝置
110...處理器
112...L2快取記憶體
114...處理器核心
116...L1快取記憶體

Claims (20)

  1. 一種排程一指令在一處理器中之執行的方法,該處理器具有至少一級聯之延遲執行管線單元,該至少一級聯之延遲執行管線單元具有兩個或兩個以上之執行管線,該等執行管線以相對彼此延遲之方式開始執行一共同發出群組中之指令,該方法包含:接收指令之一發出群組;判定該發出群組中之一第一指令在該第一指令之一先前執行期間是否導致一快取誤失;及若導致快取誤失,則將該第一指令排程為待於一管線中被執行,其中在該管線中該第一指令之開始執行係相對於該級聯之延遲執行管線單元中之另一管線之一第二指令之開始執行而延遲執行。
  2. 如請求項1之方法,其中判定該發出群組中之一第一指令是否導致一快取誤失包含:判定一誤失預測位元之值,其中該誤失預測位元之該值指示該第一指令先前在該先前執行期間是否導致該快取誤失。
  3. 如請求項2之方法,其中該誤失預測位元係在該第一指令之該先前執行期間編碼至該第一指令中。
  4. 如請求項2之方法,其中該誤失預測位元之該值在一初始訓練階段期間經修改,且其中在該初始訓練階段終止之後,該誤失預測之該值係恆定的。
  5. 如請求項1之方法,其中回應於判定該發出群組中之該第 一指令導致該快取誤失,而將對由該第一指令作為目標之資料的請求,發送至一二階快取記憶體。
  6. 如請求項1之方法,其中對由該第一指令作為目標之資料的該請求含有該資料之一目標位址,其中該資料之該目標位址係在該第一指令之該先前執行期間經計算且附加至一含有該第一指令之指令線。
  7. 如請求項1之方法,其中在自一二階快取記憶體擷取該第一指令之後且在將該第一指令放入一一階快取記憶體中之前,執行對該發出群組中之該第一指令是否導致該快取誤失的該判定。
  8. 一種積體電路裝置,其包含:一級聯之延遲執行管線單元,其具有兩個或兩個以上之執行管線,該等執行管線以相對彼此延遲之方式開始執行一共同發出群組中之指令;電路,其經組態以:接收指令之一發出群組;判定該發出群組中之一第一指令在該第一指令之一先前執行期間是否導致一快取誤失;且若導致快取誤失,則將該第一指令排程為待於一管線中被執行,其中在該管線中該第一指令之開始執行係相對於該級聯之延遲執行管線單元中之另一管線之一第二指令之開始執行而延遲執行。
  9. 如請求項8之積體電路裝置,其中判定該發出群組中之一第一指令是否導致一快取誤失包含: 判定一誤失預測位元之值,其中該誤失預測位元之該值指示該第一指令先前在該先前執行期間是否導致該快取誤失。
  10. 如請求項9之積體電路裝置,其中該誤失預測位元係在該第一指令之該先前執行期間編碼至該第一指令中。
  11. 如請求項9之積體電路裝置,其中該誤失預測位元之該值在一初始訓練階段期間經修改,且其中在該初始訓練階段終止之後,該誤失預測之該值係恆定的。
  12. 如請求項8之積體電路裝置,進一步包含:一二階快取記憶體;且其中該電路進一步經組態以回應於判定該發出群組中之該第一指令導致該快取誤失,而將對由該第一指令作為目標之資料的請求發至該二階快取記憶體。
  13. 如請求項8之積體電路裝置,其中對由該第一指令作為目標之資料的該請求含有該資料之一目標位址,其中該資料之該目標位址係在該第一指令之該先前執行期間,經計算且附加至一含有該第一指令之指令線。
  14. 如請求項8之積體電路裝置,進一步包含:一二階快取記憶體;一一階快取記憶體;且其中在自該二階快取記憶體擷取該第一指令之後且在將該第一指令放入該一階快取記憶體中之前,執行對該發出群組中之該第一指令是否導致該快取誤失的該判定。
  15. 一種積體電路裝置,其包含:一級聯之延遲執行管線單元,其具有兩個或兩個以上之執行管線,該等執行管線以相對彼此延遲之方式開始執行一共同發出群組中之指令;電路,其經組態以:接收指令之一發出群組;判定該發出群組中之一第一指令在該第一指令之一先前執行期間是否導致一快取誤失;且若導致快取誤失:則將該第一指令排程為待於一第一管線中被執行,其中在該管線中該第一指令之開始執行係相對於該級聯之延遲執行管線單元中之一第二管線之一第二指令之開始執行而延遲執行。
  16. 如請求項15之積體電路裝置,其中該電路進一步經組態以將用於該第一指令之資料自該第一管線轉發至該第二管線。
  17. 如請求項16之積體電路裝置,其中該資料係自該第一管線中之一執行單元之一階段轉發至該第二管線。
  18. 如請求項17之積體電路裝置,其中該資料係自該第一管線中之一延遲目標佇列轉發至該第二管線。
  19. 如請求項15之積體電路裝置,其中該電路進一步經組態以:在發出該第一指令時,判定該第一指令所請求之資料是否在一一階D-快取記憶體中; 若該資料不在該一階D-快取記憶體中,則使一指示該第一指令導致一快取誤失之計數器遞增;且若該資料在該一階D-快取記憶體中,則使該指示該第一指令導致一快取誤失之計數器遞減。
  20. 如請求項19之積體電路裝置,其中該電路進一步經組態成:若該計數器低於一臨限值,則僅當該第一指令可在無一暫停的情況下被排程時,才將該第一指令排程為待於該第一管線中被執行。
TW096104138A 2006-02-09 2007-02-05 排程一指令在一處理器中之執行方法及使用該方法之積體電路裝置 TWI396131B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/351,239 US7594078B2 (en) 2006-02-09 2006-02-09 D-cache miss prediction and scheduling

Publications (2)

Publication Number Publication Date
TW200813822A TW200813822A (en) 2008-03-16
TWI396131B true TWI396131B (zh) 2013-05-11

Family

ID=38335352

Family Applications (1)

Application Number Title Priority Date Filing Date
TW096104138A TWI396131B (zh) 2006-02-09 2007-02-05 排程一指令在一處理器中之執行方法及使用該方法之積體電路裝置

Country Status (4)

Country Link
US (1) US7594078B2 (zh)
JP (1) JP5089186B2 (zh)
CN (1) CN100487642C (zh)
TW (1) TWI396131B (zh)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070288725A1 (en) * 2006-06-07 2007-12-13 Luick David A A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
US7730288B2 (en) * 2007-06-27 2010-06-01 International Business Machines Corporation Method and apparatus for multiple load instruction execution
US7865769B2 (en) * 2007-06-27 2011-01-04 International Business Machines Corporation In situ register state error recovery and restart mechanism
US8065505B2 (en) * 2007-08-16 2011-11-22 Texas Instruments Incorporated Stall-free pipelined cache for statically scheduled and dispatched execution
US20090210664A1 (en) * 2008-02-15 2009-08-20 Luick David A System and Method for Issue Schema for a Cascaded Pipeline
US8108654B2 (en) * 2008-02-19 2012-01-31 International Business Machines Corporation System and method for a group priority issue schema for a cascaded pipeline
US7865700B2 (en) 2008-02-19 2011-01-04 International Business Machines Corporation System and method for prioritizing store instructions
US7996654B2 (en) * 2008-02-19 2011-08-09 International Business Machines Corporation System and method for optimization within a group priority issue schema for a cascaded pipeline
US7882335B2 (en) * 2008-02-19 2011-02-01 International Business Machines Corporation System and method for the scheduling of load instructions within a group priority issue schema for a cascaded pipeline
US20090210666A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Resolving Issue Conflicts of Load Instructions
US7984270B2 (en) 2008-02-19 2011-07-19 International Business Machines Corporation System and method for prioritizing arithmetic instructions
US20090210672A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Resolving Issue Conflicts of Load Instructions
US8095779B2 (en) * 2008-02-19 2012-01-10 International Business Machines Corporation System and method for optimization within a group priority issue schema for a cascaded pipeline
US7877579B2 (en) * 2008-02-19 2011-01-25 International Business Machines Corporation System and method for prioritizing compare instructions
US7870368B2 (en) 2008-02-19 2011-01-11 International Business Machines Corporation System and method for prioritizing branch instructions
JP4759026B2 (ja) * 2008-07-15 2011-08-31 公立大学法人広島市立大学 プロセッサ
US8291169B2 (en) 2009-05-28 2012-10-16 International Business Machines Corporation Cache line use history based done bit modification to D-cache replacement scheme
US8140760B2 (en) * 2009-05-28 2012-03-20 International Business Machines Corporation I-cache line use history based done bit based on successful prefetchable counter
US8171224B2 (en) * 2009-05-28 2012-05-01 International Business Machines Corporation D-cache line use history based done bit based on successful prefetchable counter
US8332587B2 (en) * 2009-05-28 2012-12-11 International Business Machines Corporation Cache line use history based done bit modification to I-cache replacement scheme
US8667225B2 (en) * 2009-09-11 2014-03-04 Advanced Micro Devices, Inc. Store aware prefetching for a datastream
JP5609092B2 (ja) * 2009-12-09 2014-10-22 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN102780616B (zh) * 2012-07-19 2015-06-17 北京星网锐捷网络技术有限公司 基于多核处理器的报文处理方法、装置和网络设备
JP5630798B1 (ja) * 2014-04-11 2014-11-26 株式会社Murakumo プロセッサーおよび方法
US10146547B2 (en) * 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10175984B2 (en) * 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
CN106484681B (zh) 2015-08-25 2019-07-09 阿里巴巴集团控股有限公司 一种生成候选译文的方法、装置及电子设备
CN106484682B (zh) 2015-08-25 2019-06-25 阿里巴巴集团控股有限公司 基于统计的机器翻译方法、装置及电子设备
CN106649143B (zh) * 2015-10-29 2020-06-26 阿里巴巴集团控股有限公司 一种访问缓存的方法、装置及电子设备
US10379940B2 (en) * 2016-12-08 2019-08-13 Sandisk Technologies Llc Pipeline delay detection during decoding by a data storage device
US10417127B2 (en) 2017-07-13 2019-09-17 International Business Machines Corporation Selective downstream cache processing for data access
US20190065384A1 (en) * 2017-08-22 2019-02-28 Qualcomm Incorporated Expediting cache misses through cache hit prediction
JP7131156B2 (ja) * 2018-07-19 2022-09-06 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11243883B2 (en) * 2019-05-24 2022-02-08 Texas Instruments Incorporated Cache coherence shared state suppression
CN117270972B (zh) * 2023-11-21 2024-03-15 芯来智融半导体科技(上海)有限公司 指令处理方法、装置、设备和介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW434479B (en) * 1998-03-10 2001-05-16 Nexabit Networks Llc Method of and apparatus for validating data read out of a multi port internally cached dynamic random access memory (ampic dram)
TW470881B (en) * 1998-11-30 2002-01-01 Ibm Method and system for efficiently handling memory operations in a data processing system
US6769057B2 (en) * 2001-01-22 2004-07-27 Hewlett-Packard Development Company, L.P. System and method for determining operand access to data
US6912648B2 (en) * 2001-12-31 2005-06-28 Intel Corporation Stick and spoke replay with selectable delays

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6081872A (en) * 1997-07-07 2000-06-27 International Business Machines Corporation Cache reloading performance improvement through the use of early select techniques with and without pipelining
JPH1185513A (ja) * 1997-09-03 1999-03-30 Hitachi Ltd プロセッサ
JP3099290B2 (ja) * 1997-10-03 2000-10-16 啓介 進藤 マルチスレッドプログラムを使用する情報処理装置
US6389529B1 (en) * 1999-06-25 2002-05-14 International Business Machines Corporation Method for alternate preferred time delivery of load data
US6622235B1 (en) * 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
JP2002333978A (ja) * 2001-05-08 2002-11-22 Nec Corp Vliw型プロセッサ
US7136992B2 (en) * 2003-12-17 2006-11-14 Intel Corporation Method and apparatus for a stew-based loop predictor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW434479B (en) * 1998-03-10 2001-05-16 Nexabit Networks Llc Method of and apparatus for validating data read out of a multi port internally cached dynamic random access memory (ampic dram)
TW470881B (en) * 1998-11-30 2002-01-01 Ibm Method and system for efficiently handling memory operations in a data processing system
US6769057B2 (en) * 2001-01-22 2004-07-27 Hewlett-Packard Development Company, L.P. System and method for determining operand access to data
US6912648B2 (en) * 2001-12-31 2005-06-28 Intel Corporation Stick and spoke replay with selectable delays

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Adi Yoaz,et al.,Speculation techniques for improving load related instruction scheduling,ISCA '99 Proceedings of the 26th annual international symposium on Computer architecture,P.42~53,Volume 27 Issue 2, May 1999 *

Also Published As

Publication number Publication date
US20070186073A1 (en) 2007-08-09
JP5089186B2 (ja) 2012-12-05
US7594078B2 (en) 2009-09-22
CN101017430A (zh) 2007-08-15
JP2007213578A (ja) 2007-08-23
CN100487642C (zh) 2009-05-13
TW200813822A (en) 2008-03-16

Similar Documents

Publication Publication Date Title
TWI396131B (zh) 排程一指令在一處理器中之執行方法及使用該方法之積體電路裝置
CN100478872C (zh) 最小化未调度d缓存缺失流水线停顿的方法和装置
US8812822B2 (en) Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss
JP5357017B2 (ja) 高速で安価なストア−ロード競合スケジューリング及び転送機構
JP5137948B2 (ja) ローカル及びグローバル分岐予測情報の格納
US7730283B2 (en) Simple load and store disambiguation and scheduling at predecode
JP5722396B2 (ja) 明示的サブルーチンコールの分岐予測動作をエミュレートするための方法および装置
US20070186050A1 (en) Self prefetching L2 cache mechanism for data lines
US20120210107A1 (en) Predicated issue for conditional branch instructions
US20070288733A1 (en) Early Conditional Branch Resolution
US20080162908A1 (en) structure for early conditional branch resolution
US20080162905A1 (en) Design structure for double-width instruction queue for instruction execution
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US20080162907A1 (en) Structure for self prefetching l2 cache mechanism for instruction lines
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US20080162819A1 (en) Design structure for self prefetching l2 cache mechanism for data lines
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees