本技術涉及用于執(zhí)行原子更新操作的裝置和方法。
背景技術:
當處理電路發(fā)布指定存儲器地址的原子更新操作時,通常將要求獲取該存儲器地址處的數(shù)據(jù)、使用該獲取的數(shù)據(jù)執(zhí)行某些計算、然后根據(jù)該計算的結果將數(shù)據(jù)值寫回所指定的存儲器地址。該步驟序列需要被原子地執(zhí)行以便當執(zhí)行更新操作時,數(shù)據(jù)不被另一操作訪問。
許多現(xiàn)代數(shù)據(jù)處理系統(tǒng)在處理電路和存儲器之間包括一個或多個級別的緩存器,其中,某些存儲器地址處緩存的數(shù)據(jù)副本可以被保持以提升相關聯(lián)的處理電路訪問該數(shù)據(jù)的速度。一個或多個級別的緩存器可被提供用于相關聯(lián)處理電路的互斥使用,這類緩存器通常被稱為本地緩存器,而其他級別的緩存器可在多個處理電路之間共享,通常被稱為共享緩存器。
考慮前面提到的原子更新操作,當確定指定地址與已被緩存在本地緩存器中的數(shù)據(jù)有關時,可能使用本地緩存內容來執(zhí)行該原子更新操作,在這種情況下,原子更新操作被稱為近原子操作。然而,在近原子操作可以被執(zhí)行之前,可能需要完成某些未決緩存訪問操作,而且這在原子更新操作的處理中會產(chǎn)生性能影響。期望提供用于減輕該性能影響的機制。
技術實現(xiàn)要素:
在第一示例配置中,提供了一種裝置,包括:緩存存儲裝置,用于存儲由處理電路訪問的數(shù)據(jù),該緩存存儲裝置具有多個緩存線;原子更新處理電路,用于處理關于指定地址處的數(shù)據(jù)的原子更新操作的執(zhí)行,原子更新處理電路被布置為當指定地址處的數(shù)據(jù)被存儲在緩存存儲裝置的緩存線中時,對來自該緩存線的數(shù)據(jù)執(zhí)行原子更新操作;冒險檢測電路,用于在檢測到緩存存儲裝置的線填充(linefill)操作是未決的將使得所選緩存線將被包括指定地址處數(shù)據(jù)的數(shù)據(jù)填充時,觸發(fā)原子更新操作的執(zhí)行的延遲,線填充操作使得裝置接收數(shù)據(jù)部分的序列,該數(shù)據(jù)部分的序列共同形成用于存儲在所選緩存線中的數(shù)據(jù);部分線填充通知電路,用于在線填充操作期間向原子更新處理電路提供部分線填充信息;并且原子更新處理電路被布置為響應于從部分線填充信息檢測到指定地址處的數(shù)據(jù)對于所選緩存線是可用的而發(fā)起原子更新操作。
在第二示例配置中,提供了一種在裝置中處理原子更新操作的方法,該裝置具有用于存儲由處理電路訪問的數(shù)據(jù)的緩存存儲裝置,緩存存儲裝置具有多個緩存線,該方法包括:采用原子更新處理電路來處理關于指定位置處的數(shù)據(jù)的原子更新操作的執(zhí)行,原子更新處理電路被布置為當指定位置處的數(shù)據(jù)被存儲在緩存存儲裝置的緩存線中時,對來自該緩存線的數(shù)據(jù)執(zhí)行原子更新操作;當檢測到緩存存儲裝置的線填充操作是未決的將使得所選緩存線將被包括指定地址處數(shù)據(jù)的數(shù)據(jù)填充時,觸發(fā)原子更新操作的執(zhí)行的延遲;執(zhí)行線填充操作以使得裝置接收數(shù)據(jù)部分的序列,該數(shù)據(jù)部分的序列共同形成用于存儲在所選緩存線中的數(shù)據(jù);在線填充操作期間向原子更新處理電路提供部分線填充信息;以及響應于原子更新處理電路從部分線填充信息檢測到指定地址處的數(shù)據(jù)對于所選緩存線是可用的而發(fā)起原子更新操作。
在進一步的示例配置中,提供了一種裝置,包括:緩存存儲裝置,用于存儲由處理電路訪問的數(shù)據(jù),該緩存存儲裝置具有多個緩存線;原子更新處理裝置,用于處理關于指定地址處的數(shù)據(jù)的原子更新操作的執(zhí)行,當指定地址處的數(shù)據(jù)被存儲在緩存存儲裝置的緩存線中時,原子更新處理裝置對來自該緩存線的數(shù)據(jù)執(zhí)行原子更新操作;冒險檢測裝置,用于當檢測到緩存存儲裝置的線填充操作是未決的將使得所選緩存線將被包括指定地址處數(shù)據(jù)的數(shù)據(jù)填充時,觸發(fā)原子更新操作的執(zhí)行的延遲,線填充操作使得裝置接收數(shù)據(jù)部分的序列,該數(shù)據(jù)部分的序列共同形成用于存儲在所選緩存線中的數(shù)據(jù);部分線填充通知裝置,用于在線填充操作期間向原子更新處理裝置提供部分線填充信息;并且原子更新處理裝置響應于從部分線填充信息檢測到指定地址處的數(shù)據(jù)對于所選緩存線是可用的而發(fā)起原子更新操作。
附圖說明
本技術將參考附圖中示出的其實施例僅通過示例被進一步描述,其中:
圖1是所描述的實施例的技術在其中可被采用的系統(tǒng)的框圖;
圖2是根據(jù)一個實施例更詳細地示出了與級別1數(shù)據(jù)緩存器相關聯(lián)被提供的組件的框圖;
圖3根據(jù)一個實施例示意性地示出了線填充操作可如何使用多個緩存訪問被執(zhí)行;
圖4是根據(jù)一個實施例示出了圖2的原子更新操作處理機的操作的流程圖;
圖5A是根據(jù)一個實施例示出了原子更新操作處理機中提供的組件的框圖;
圖5B根據(jù)一個實施例示意性地示出了圖5A的原子更新操作處理機的緩沖器的每個槽中提供的字段;
圖6根據(jù)替代實施例示出了到原子更新操作處理機的轉發(fā)路徑可如何被使用;
圖7是根據(jù)圖6的實施例示出了原子更新操作處理機的操作的流程圖;
圖8根據(jù)圖6的實施例示意性地示出了部分線填充數(shù)據(jù)可如何被提供給原子更新操作處理機;以及
圖9是根據(jù)一個實施例示出了可被用作級別1數(shù)據(jù)緩存器的虛擬索引、物理標記的緩存器的操作的示圖。
示例實施例
在參考附圖討論實施例之前,提供下列實施例的描述。
在一個實施例中,提供了一種裝置,該裝置具有緩存存儲裝置,用于存儲由相關聯(lián)的處理電路訪問的數(shù)據(jù),緩存存儲裝置具有多個緩存線。原子更新處理電路然后用于處理關于指定地址處的數(shù)據(jù)的原子更新操作的執(zhí)行。原子更新處理電路被布置為當確定該指定地址處的數(shù)據(jù)被存儲在緩存存儲裝置的緩存線中時,對來自該緩存線的數(shù)據(jù)執(zhí)行原子更新操作。
冒險檢測電路用于檢測某些冒險條件,并且關于原子更新操作被布置為當檢測到緩存存儲裝置的線填充操作是未決的時(在這種情況下線填充操作將使得所選緩存線將被包括指定地址處數(shù)據(jù)的數(shù)據(jù)填充),觸發(fā)該原子更新操作的執(zhí)行的延遲。在這種情況下,將理解的是,一旦線填充操作已完成,緩存器然后將包含指定地址處的數(shù)據(jù),允許直接對來自緩存線的數(shù)據(jù)執(zhí)行原子更新操作。
然而,由于在線填充操作期間整個緩存線的數(shù)據(jù)被寫入緩存器中,可能需要相當長的一段時間來完成線填充操作。特別地,在線填充操作期間裝置將從存儲器系統(tǒng)(從緩存層級中的較低級別或從主存儲器)接收數(shù)據(jù)部分的序列,該數(shù)據(jù)部分的序列共同形成用于存儲在所選緩存線中的數(shù)據(jù),而且可能需要大量時間來接收所有要求的數(shù)據(jù)部分并將那些部分存儲到緩存線以便完成線填充操作。
根據(jù)所描述的實施例,不同于必須等待線填充操作完成并且冒險條件因此被移除,在執(zhí)行原子更新處理電路之前,提供部分線填充通知電路,其在線填充操作期間向原子更新處理電路提供部分線填充信息。原子更新處理電路然后被布置為響應于從部分線填充信息檢測到指定地址處的數(shù)據(jù)對于所選緩存線是可用的而發(fā)起原子更新操作。
在許多情況下,這將使得原子更新操作在線填充操作已被完成之前被發(fā)起,因此減輕了否則必須等待從冒險檢測電路確認線填充操作已完成并且冒險因此不再存在將導致的潛在性能影響。
指定地址處的數(shù)據(jù)被確定對于所選緩存線是可用的時刻根據(jù)實施例可能發(fā)生變化。在一個實施例中,一旦指定地址處的數(shù)據(jù)已被存儲在所選緩存線中,該指定地址處的數(shù)據(jù)對于所選緩存線是可用的。在這類實施例的一個具體示例中,獨立的數(shù)據(jù)部分在從存儲器系統(tǒng)被接收時被寫到緩存線,且因此部分線填充信息可以基于每個數(shù)據(jù)部分到緩存線中的存儲。
然而,在替代實施例中,一旦指定地址處的數(shù)據(jù)已被本地緩沖在裝置中用于存儲在所選緩存線中,該指定地址處的數(shù)據(jù)即被認為對于所選緩存線是可用的。在一個這類實施例中,數(shù)據(jù)部分仍然從存儲器系統(tǒng)按順序被接收,但它們被本地緩沖以便多個數(shù)據(jù)部分然后在可同一時刻被寫入所選緩存線(在一個具體實施例中,整個緩存線的數(shù)據(jù)使用緩沖的數(shù)據(jù)部分在同一時刻被更新)。當采取這類方法時,部分線填充信息可能是基于本地緩沖器中數(shù)據(jù)部分的可用性,而不需要等待緩存線在線填充操作期間被實際地寫入。
部分線填充信息可采取各種形式。在一個實施例中,部分線填充通知電路被布置為向原子更新處理電路提供部分線填充信息以標識每個數(shù)據(jù)部分在線填充操作期間何時對于所選緩存線是可用的,并且原子更新處理電路被布置為從部分線填充信息確定線填充操作何時已前進到指定位置處的數(shù)據(jù)對于所選緩存線是可用的時刻。
因此,在該實施例中,每次數(shù)據(jù)部分在線填充操作期間對于所選緩存線變?yōu)榭捎玫?,原子更新處理電路被通知?;诖诵畔ⅲ痈绿幚黼娐啡缓罂梢源_定與原子更新操作有關的指定地址處的數(shù)據(jù)何時對于所選緩存線是可用的,并且即使線填充操作可能尚未完成,在該時刻可發(fā)起原子更新操作。
作為以上方法的替代,部分線填充通知電路可被布置為確定線填充操作何時已前進到對于所選緩存線可用的數(shù)據(jù)部分包括指定地址處的數(shù)據(jù)的時刻,然后作為部分線填充信息,發(fā)布指定地址處的數(shù)據(jù)對于所選緩存線是可用的指示。因此,在此實施例中,不同于當每個數(shù)據(jù)部分對于所選緩存線變?yōu)榭捎脮r通知原子更新處理電路,部分線填充通知電路跟蹤線填充操作的進度,并確定何時已到達原子更新操作所要求的指定地址處的數(shù)據(jù)對于所選緩存是可用的時刻,并且在該時刻向原子更新處理電路提供部分線填充通知。原子更新處理電路然后可通過發(fā)起原子更新操作的執(zhí)行來響應該部分線填充信息的接收。
部分線填充信息根據(jù)實施例可包括各種各樣的信息。在一個實施例中,部分線填充信息包括地址部分,在線填充操作期間指示對于所選緩存線可用的相應數(shù)據(jù)部分。因此,基于地址部分信息,原子更新處理電路然后可確定對于所選緩存線可用的相應數(shù)據(jù)部分是否包括與原子更新操作有關的指定地址處的數(shù)據(jù)。
在一個實施例中,原子更新處理電路可包括具有多個緩沖條目的緩沖器,其中每個緩沖條目可用于存儲與未決操作有關的信息。部分線填充通知電路可被提供關于任意具體的未決原子更新操作與哪個緩沖條目相關的信息,并且在一個實施例中,部分線填充信息然后包括對正向其提供部分線填充信息的緩沖條目的指示。這使得原子更新處理電路容易地確定部分線填充信息正針對哪個原子更新操作被提供。
在一個實施例中,一旦原子更新處理電路響應于部分線填充信息檢測到可以發(fā)起原子更新操作,將發(fā)布請求以訪問所要求的數(shù)據(jù),隨后對所要求的數(shù)據(jù)的更新操作將被執(zhí)行,通常使得更新的數(shù)據(jù)被寫回緩存線。
然而,在替代實施例中,數(shù)據(jù)轉發(fā)路徑可被耦合到原子更新處理電路,可用于向原子更新處理電路提供對于所選緩存線可用的相應數(shù)據(jù)部分作為部分線填充信息的至少一部分。因此,在這類實施例中,可以避免需要(從緩存器或本地緩沖器)讀取數(shù)據(jù),并且可以使用通過數(shù)據(jù)轉發(fā)路徑被直接提供的數(shù)據(jù)。
在一個實施例中,專用數(shù)據(jù)轉發(fā)路徑可針對原子更新處理電路被提供。然而,在替代實施例中,原子更新處理電路可被合并在已經(jīng)具有到它的這類數(shù)據(jù)轉發(fā)路徑的組件中。例如,在一個實施例中,原子更新處理電路可被合并在處理電路的加載/存儲管道中,并且通常加載/存儲管道將被提供轉發(fā)路徑以使得經(jīng)由線填充操作取回的數(shù)據(jù)被直接提供到處理器。該轉發(fā)路徑然后可被原子更新處理電路重新使用。
原子更新操作可采取各種形式,但在一個實施例中,包括讀取-修改-寫入操作,其中,指定地址處的數(shù)據(jù)在對于所選緩存線可用時被獲取,執(zhí)行計算以產(chǎn)生修改的數(shù)據(jù)值,并且修改的數(shù)據(jù)值被寫回所選緩存線。
這類原子更新操作可采取各種形式,例如,允許由不同形式的原子更新操作指定若干不同的計算。此外,原子更新操作可被標識為是存儲操作或加載操作。
在一個實施例中,當原子更新操作是原子加載操作時,則除了執(zhí)行上述讀取-修改-寫入操作,所獲取的指定地址處的數(shù)據(jù)被輸出到處理電路。因此,處理電路在原始數(shù)據(jù)被讀取-修改-寫入操作修改之前接收原始數(shù)據(jù)。
通過使用部分線填充信息以使得原子更新操作在若其等待相關線填充操作的完成而能被執(zhí)行之前被執(zhí)行可實現(xiàn)的上面的性能改善,與原子加載操作相結合可以是特別有用的,這是由于通常情況下處理電路將要執(zhí)行的后續(xù)操作將等待該數(shù)據(jù)從原子加載操作的接收。通過減少原子加載操作的延遲,減少了對取決于所加載數(shù)據(jù)的后續(xù)操作的性能影響。
盡管原子更新操作可以是讀取-修改-寫入操作,可替代地采取其他形式。例如,在一個實施例中,原子更新操作包括當指定地址處的數(shù)據(jù)對于所選緩存線可用時獲取該指定地址處的數(shù)據(jù),執(zhí)行計算以生成結果值,并根據(jù)結果值可選擇地將修改的數(shù)據(jù)值寫回所選緩存線。這類原子更新操作的一個示例將是比較和交換操作,其中,從指定地址獲取的數(shù)據(jù)值與原子更新操作指定的另一值(例如,指定寄存器的內容)相比較,然后根據(jù)比較的結果,存儲在指定地址處的數(shù)據(jù)值可被交換為不同的數(shù)據(jù)值。此外,通過采用上述技術來減少原子更新操作的延遲,可產(chǎn)生顯著的性能益處。
在一個實施例中,緩存訪問電路用于在線填充操作期間將數(shù)據(jù)存儲到所選緩存線中。當每個數(shù)據(jù)部分變?yōu)榭捎脮r,緩存訪問電路可每次更新緩存線一個數(shù)據(jù)部分,或替代地,數(shù)據(jù)部分可被本地緩沖,然后緩存訪問電路可一次將多個數(shù)據(jù)部分(在一個實施例中,構成緩存線的數(shù)據(jù)的所有數(shù)據(jù)部分)寫入緩存線。
在一個實施例中,緩存訪問電路可被布置為當原子更新操作正被執(zhí)行時,至少針對可危害(compromise)原子更新操作的原子性的任意操作來鎖定所選緩存線不被訪問。
在一個實施例中,線填充操作的任意剩余部分被允許繼續(xù),這是因為它們將不涉及作為原子更新操作的主題的數(shù)據(jù),并因此不包含原子性。此外,針對由相關聯(lián)的處理電路發(fā)布的訪問請求的冒險檢查機制可足夠確保任何可能包含原子性的訪問請求被暫停,等待原子更新操作完成,因此不要求緩存線被特別地鎖定。然而,某些類型的操作可潛在地危害原子更新操作的原子性。一個示例是監(jiān)聽操作,該監(jiān)聽操作從包含該裝置的系統(tǒng)中的監(jiān)聽電路被發(fā)布到該裝置。監(jiān)聽電路實際上是緩存結構的訪問請求(以監(jiān)聽請求的形式)的外部來源。根據(jù)上述實施例,緩存訪問電路被布置為當原子更新操作關于該緩存線正被執(zhí)行時,防止這類監(jiān)聽請求訪問所選緩存線。一旦原子更新操作完成,則緩存訪問電路將允許監(jiān)聽操作繼續(xù)。
原子更新處理電路可以是單純用于處理原子更新操作的專用電路。然而,在替代實施例中,原子更新處理電路可被提供作為現(xiàn)有結構的一部分以便利用該現(xiàn)有結構的某些組件。在一個具體實施例中,原子更新處理電路被提供在用于處理由處理電路請求的存儲操作的存儲緩沖電路中。作為處理標準存儲操作所要求的處理的一部分,存儲緩沖電路將能夠訪問緩存器以便將數(shù)據(jù)寫入所選緩存線。當處理原子更新操作時該功能可被原子更新處理電路利用,如從上面的討論將是顯而易見的,這是由于這些通常將不僅涉及從緩存器讀取數(shù)據(jù),還涉及(在數(shù)據(jù)已被修改之后)將數(shù)據(jù)寫回緩存器。
在一個實施例中,原子更新處理電路被布置為當確定指定地址處的數(shù)據(jù)未被存儲在緩存存儲裝置的緩存線中,并且不存在將導致所選緩存將被包括指定地址處數(shù)據(jù)的數(shù)據(jù)填充的緩存存儲裝置的未決線填充操作時,輸出原子更新操作用于由裝置外部的組件處理。相比于使用緩存存儲裝置的內容可直接執(zhí)行原子更新操作(在本文將被稱為近原子操作),被輸出用于由裝置外部的組件處理的原子更新操作將被稱為遠原子操作。
現(xiàn)在將參考附圖描述具體實施例。
圖1示出了所描述的實施例的裝置在其中可被采用的系統(tǒng)的示例。為了便于說明,系統(tǒng)包括僅包括兩個處理器核心100、120,但額外的處理器核心可被提供,實際上可以包括可包括或可不包括它們自己的本地緩存器的其他主設備。核心100具有各種處理器管道105,其中的一個是用于處理加載和存儲操作的加載/存儲管道110。加載/存儲管道110可通過發(fā)布指定存儲器地址的訪問請求來訪問核心100中本地提供的一個或多個緩存級別115。核心120被類似地構建,具有包括加載/存儲管道130的管道125,該加載/存儲管道130可向核心120中本地提供的一個或多個緩存級別135發(fā)布指定存儲器地址的訪問請求。在本文描述的實施例中,將假設一個或多個緩存級別115、135包括級別1數(shù)據(jù)緩存器。更低級別的緩存器可被提供在方框115、135中,例如,本地級別2緩存器。不管是存在額外級別的緩存器或是僅級別1緩存器,在每個方框115、135中,在本地緩存級別中未命中的情況下,線填充請求將與存儲器地址一起被向外傳播到一致性互聯(lián)140。一致性互聯(lián)140包括監(jiān)聽電路155,其用于實現(xiàn)緩存一致性協(xié)議以便確??捎煞蛛x的處理器核心的本地存儲器保持的各種數(shù)據(jù)備份之間存在數(shù)據(jù)一致性。特別地,通過示例,處理器核心120在其本地緩存135中具有比任意共享的較低層級緩存級別145和/或存儲器150中保持的數(shù)據(jù)更新的數(shù)據(jù)值是重要的,則若處理器核心100請求訪問該數(shù)據(jù)并在其本地緩存115中檢測到未命中,可確保處理器核心100將訪問最新的數(shù)據(jù)。
監(jiān)聽電路155試圖維護指示它理解的具有緩存的數(shù)據(jù)備份的那些核心的記錄,該記錄跟蹤數(shù)據(jù)的存儲器地址及其相信已本地緩存該數(shù)據(jù)的核心。因此,在線填充請求與存儲器地址一起從一個處理器核心被傳播的情況下,監(jiān)聽電路155可檢查其本地記錄以查看該存儲器地址是否在其記錄中被標識,以及如果被標識,哪些處理器核心被指示為具有該數(shù)據(jù)的備份。監(jiān)聽電路155然后可向(一個或多個)相關處理器核心發(fā)布監(jiān)聽請求以便使得每個這類處理器核心訪問其本地緩存器,并執(zhí)行所要求的關于其數(shù)據(jù)備份的一致性動作。這可涉及使本地備份無效,和/或可涉及處理器核心將其數(shù)據(jù)備份輸出回監(jiān)聽電路,以便數(shù)據(jù)備份然后可被返回到請求處理器核心。通過示例,因此將理解的是,若針對處理器核心100做出的訪問請求在一個或多個緩存級別115中發(fā)生未命中,并且該地址處的最新版本的數(shù)據(jù)駐留在處理器核心120的本地緩存層級135中,這將由監(jiān)聽電路155檢測,并且經(jīng)由監(jiān)聽請求該數(shù)據(jù)可被取回并然后被提供回處理器核心100。
除了向相關聯(lián)的緩存級別發(fā)布標準加載或存儲操作,加載/存儲管道110、130還可發(fā)布要求執(zhí)行存儲器訪問的其他類型的操作。一個具體示例是之前討論的原子更新操作。這類原子更新操作通常將要求訪問指定存儲器地址處的數(shù)據(jù)、使用該數(shù)據(jù)執(zhí)行某些操作、以及然后將更新的數(shù)據(jù)值寫回存儲器地址。在原子更新操作的某些替代示例中,在操作之后將數(shù)據(jù)值寫回存儲器地址可取決于該操作的結果。
當這類原子更新操作由加載/存儲管道發(fā)布時,與相關聯(lián)的本地緩存級別115、135中第一級別的緩存器相關聯(lián)的電路將確定原子更新操作的指定地址處的數(shù)據(jù)值是否被互斥地緩存在本地緩存器中。若指定地址處的數(shù)據(jù)值當前未被互斥地緩存在本地緩存器中,可使用監(jiān)聽功能來將本地緩存器的備份呈現(xiàn)(render)為互斥備份。若正在討論的數(shù)據(jù)值被互斥地緩存在本地緩存器中,則原子更新操作可關于緩存器的內容被本地執(zhí)行,這類原子更新操作被稱為近原子操作。此外,若檢測到感興趣的數(shù)據(jù)值當前不在緩存器中,但該感興趣的數(shù)據(jù)值是緩存器的未決線填充操作的主題并因此在適當?shù)臅r候將出現(xiàn)在緩存器中,則原子更新操作可被延遲并等待線填充操作的執(zhí)行。這再次使得原子更新操作作為近原子操作被處理。如參考下面的實施例將被更詳細地討論的,不同于必須等待整個線填充操作完成,使用此后描述的實施例的技術,在許多情況下原子更新操作可能在全部線填充操作已完成之前開始,因此提供性能改善。
若確定原子更新操作的指定地址未將其相關聯(lián)的數(shù)據(jù)緩存在本地緩存結構中,并且不是未決線填充操作的主題,則該原子更新操作從相關處理器核心100、120被傳播用于在較低緩存級別145或存儲器150處執(zhí)行。需要以這種方式處理的原子更新操作可被稱為遠原子操作。
圖2是根據(jù)一個示例實施例示出了與級別1數(shù)據(jù)緩存器相關聯(lián)被提供的組件的框圖,并且具體地,示出了原子更新操作如何被處理。級別1數(shù)據(jù)緩存陣列220在可從各種來源接收緩存訪問請求的緩存訪問仲裁器210的控制下被訪問。例如,對于加載訪問請求,加載/存儲管道200可向緩存訪問仲裁器發(fā)布訪問請求以使得在級別1緩存陣列220中執(zhí)行查找。在緩存器命中的情況下,所請求的數(shù)據(jù)可從級別1緩存陣列220被返回到加載/存儲管道200。一旦存儲操作到達管道的提交階段,通常僅由加載/存儲管道輸出,并且在該時刻被轉發(fā)到存儲緩沖器。盡管存儲緩沖器在圖2中未被分離地示出,在一個實施例中,原子更新操作處理機230實際上被提供作為存儲緩沖電路的一部分。對于存儲操作,存儲緩沖器然后可使得緩沖訪問仲裁器210執(zhí)行緩存查找以便確定作為存儲操作主題的數(shù)據(jù)是否在緩存器中,并且若在緩存器中,則針對存儲操作提供的寫入數(shù)據(jù)可被直接寫入緩存器中(假設存儲操作與可緩存存儲請求有關)。
如路徑212所示,總線接口單元(BIU)240能夠監(jiān)測緩存訪問仲裁器210做出的各種緩存訪問及響應。若針對緩存訪問檢測到未命中,則BIU240可通過路徑242向較低級別的緩存層級發(fā)布線填充請求,以便使得所請求的數(shù)據(jù)作為線填充數(shù)據(jù)通過路徑244被返回。當線填充數(shù)據(jù)被返回時,可通過路徑246被轉發(fā)到緩存訪問仲裁器210以便使得所請求的數(shù)據(jù)被存儲在緩存陣列的所選緩存線中。若被要求,數(shù)據(jù)還可經(jīng)由數(shù)據(jù)轉發(fā)路徑248被直接傳送回加載/存儲管道200。
通常,緩存線寬度超過路徑244上的數(shù)據(jù)總線寬度。因此,當從較低級別的緩存層級取回緩存線的數(shù)據(jù)以便執(zhí)行線填充操作時,該數(shù)據(jù)通常將作為數(shù)據(jù)部分的序列被返回。在一個實施例中,當每個數(shù)據(jù)部分被返回時,可通過路徑246被傳送以使得緩存訪問仲裁器210執(zhí)行到相關的緩存陣列的緩存線的訪問,以便將該數(shù)據(jù)部分寫入緩存線。根據(jù)這類方法,對于緩存陣列的多個緩存訪問將由緩存訪問仲裁器210執(zhí)行,以便在線填充操作期間填充全部的緩存線的數(shù)據(jù)。
在替代實施例中,本地緩沖器211可由緩存訪問仲裁器維護,以便當線填充的每個數(shù)據(jù)部分被返回時,被存儲在緩沖器211中,然后當全部的緩存線的數(shù)據(jù)是可用的時,執(zhí)行到緩存陣列的訪問以便將緩存線的數(shù)據(jù)存儲在所選緩存線中。
由于BIU 240意識到關于緩存陣列220的各種訪問經(jīng)由通過路徑212傳送的緩存訪問信息正被執(zhí)行,BIU可以跟蹤可能出現(xiàn)的潛在冒險,并且具體地,可被提供冒險監(jiān)測電路250以跟蹤那些冒險并在檢測到冒險的情況下發(fā)布適當?shù)目刂菩盘枴W鳛槊半U的一個示例,當線填充操作是未決的時,可能是下列情況:緩存訪問仲裁器發(fā)布關于存儲器地址的訪問請求,該存儲器地址被包含在作為線填充操作的主題的地址的范圍內。若數(shù)據(jù)尚未被寫入緩存器中,這將導致在緩存器中檢測到未命中,但若BIU檢測到一旦線填充操作完成數(shù)據(jù)將是可用的,則BIU可通知相關組件以便使得該組件忽略緩存訪問結果,并且該組件稍后重試緩存訪問。
考慮原子更新操作,通常將經(jīng)由加載/存儲管道200通過路徑202被路由到原子更新操作處理機230。當原子更新操作處理機230可能是與緩存器相關聯(lián)的分離的功能塊時,在一個實施例中,其可被合并為存儲緩沖電路的一部分,并利用已被提供在存儲緩沖電路中的某些組件。例如,存儲緩沖電路通常將包括若干緩沖槽用于存儲未決存儲操作,并且那些緩沖槽還可用于存儲未決原子更新操作。假設原子更新操作可以作為近原子操作被處理,原子更新操作具有與存儲操作相類似的某些屬性,這是由于作為其功能的一部分,原子更新操作通常將要求執(zhí)行對緩存陣列中的緩存線的寫入。由于在原子更新操作的執(zhí)行期間執(zhí)行寫入,則一旦已到達加載/存儲管道的提交階段,這類原子更新操作通常還將僅通過路徑202從加載/存儲管道被路由。
當原子更新操作處理機確定其要執(zhí)行原子更新操作時,可向緩存訪問仲裁器210發(fā)布請求以使得緩存訪問仲裁器在級別1緩存陣列220中執(zhí)行查找。在命中的情況下,所請求的數(shù)據(jù)可被返回到原子更新操作處理機,其中,然后可對該數(shù)據(jù)執(zhí)行原子更新操作。這通常將涉及使用所取回的數(shù)據(jù)來執(zhí)行更新操作,導致結果數(shù)據(jù)的生成。在一個實施例中,結果數(shù)據(jù)然后經(jīng)由向緩存訪問仲裁器210發(fā)布寫入請求的原子更新操作處理機230被寫回級別1緩存陣列,以訪問相關的緩存線并寫入數(shù)據(jù)。根據(jù)原子更新操作的類型,在某些實例中,可能的情況是更新操作的結果首先被分析,并根據(jù)該結果的值,然后可指定緩存線的當前內容是否作為原子更新操作的最后步驟被更新。
由于之前討論的BIU 240的功能,若當緩存訪問仲裁器210響應于原子更新操作處理機的請求執(zhí)行初始查找操作時,在級別1緩存陣列中檢測到未命中,則BIU可參考冒險監(jiān)測功能來檢測是否存在覆蓋原子更新操作的指定地址的未決線填充請求。在該情況下,冒險監(jiān)測電路250被布置為通過路徑252向原子更新操作處理機230發(fā)送控制信號以觸發(fā)原子更新操作的執(zhí)行的延遲。實際上,原子更新操作處理機然后忽略從緩存訪問仲裁器210返回的未命中結果,并在重啟原子更新操作的執(zhí)行之前等待來自BIU 240的進一步的控制信號。
由于線填充數(shù)據(jù)通常在多個周期中通過路徑244被接收(每次一個數(shù)據(jù)部分)的事實,將理解的是,線填充操作潛在地花費大量時間來執(zhí)行。若原子更新操作處理機230將等待線填充操作完成(在該時刻冒險然后將被移除),并且該結果的通知可從冒險監(jiān)測器250被傳送到原子更新操作處理機230,這可潛在地使得原子更新操作被暫停相當長的一段時間。在參考圖2描述的實施例中,通過使用部分線填充通知方框260來減輕此問題。特別地,在一個實施例中,當線填充操作的每個數(shù)據(jù)部分通過路徑244被返回并通過路徑246被路由到緩存訪問仲裁器210時,然后該事實的通知可通過路徑262被發(fā)布到原子更新操作處理機230。
通過路徑262被路由到原子更新操作處理機230的部分線填充信息可采取各種形式,但在一個實施例中,提供了足夠標識與數(shù)據(jù)部分相關聯(lián)的地址的范圍的某些地址信息。在一個實施例中,部分線填充信息還被布置為標識由于未決線填充操作而已被暫停的相關原子更新操作所在的緩沖槽。特別地,槽信息可在檢測到原始冒險的時刻被傳送到BIU 240,以便BIU可將槽標識符與未決線填充相關聯(lián),因此部分線填充通知器260可通過路徑262發(fā)布特定于槽的部分線填充通知。
當每條部分線填充信息通過路徑262被返回到原子更新操作處理機230時,可評估已被提供到緩存訪問仲裁器210的相關聯(lián)的數(shù)據(jù)部分是否包括作為暫停的原子更新操作的主題的數(shù)據(jù)(即,與該數(shù)據(jù)部分相關聯(lián)的地址范圍是否包括正在討論的原子更新操作的指定地址)。
因此,將理解的是,即使在線填充操作完成之前,可能檢測到作為線填充操作的一部分已被返回的數(shù)據(jù)部分已包括原子更新操作需要的數(shù)據(jù)的情況。在該時刻,原子更新操作處理機230可向緩存訪問仲裁器210重新發(fā)布其訪問請求。在每個數(shù)據(jù)部分在被緩存訪問仲裁器接收時被直接寫入所選緩存線的實施例中,將理解的是,在該時刻將在緩存陣列的相關緩存線中檢測到命中。類似地,若緩沖器211用于當數(shù)據(jù)部分被返回時將其暫時地緩沖直到完整的緩存線的數(shù)據(jù)已被接收,則在將數(shù)據(jù)寫入緩存線之前仍可檢測到命中,這是由于在一個實施例中,作為緩存訪問查找操作的一部分,緩存訪問仲裁器210還將在緩沖器211中查找。因此,在該時刻,所要求的數(shù)據(jù)可被返回到原子更新操作處理機以使得原子更新操作然后可被執(zhí)行。
在適當?shù)臅r候,一旦原子更新操作的修改步驟已被執(zhí)行,通常將存在數(shù)據(jù)來寫回所選緩存線中,并且在該時刻,原子更新操作處理機將與待寫入的數(shù)據(jù)一起向緩存訪問仲裁器210發(fā)布適當?shù)恼埱?。若在該階段原始數(shù)據(jù)已被存儲在級別1緩存陣列中,則緩存訪問仲裁器210可以僅訪問相關的緩存線并更新有關數(shù)據(jù)。若相關的數(shù)據(jù)仍在緩沖器211中,則在緩沖器中其可被來自原子更新操作處理機230的新提供的數(shù)據(jù)覆蓋,以便在適當?shù)臅r候一旦數(shù)據(jù)被寫入緩存陣列,將包括由原子更新操作處理機生成的經(jīng)更新的數(shù)據(jù)。
在當初始請求針對具體的原子更新操作從原子更新操作處理器230被發(fā)送到緩存訪問仲裁器210時,級別1緩存陣列220中檢測到未命中并且BIU 240未檢測到任何未決線填充操作的情況下,在一個實施例中,原子更新操作然后將作為遠原子操作被處理。因此,原子更新操作的細節(jié)將通過路徑232從原子更新操作處理器230被輸出到BIU 240,該遠原子請求然后將通過路徑242從BIU 240被發(fā)布到較低級別的緩存層級。
對于在級別1緩存器中未命中的標準存儲操作,還可作為存儲請求經(jīng)由BIU 240通過路徑242被傳播到較低級別的緩存層級上。
圖3示意性地示出了構成緩存線的獨立的數(shù)據(jù)部分如何被接收和處理。如方框300所示,獨立的數(shù)據(jù)部分將通過路徑244由BIU 240接收。在緩存器針對每個數(shù)據(jù)部分被獨立地訪問的實施例中,當每個數(shù)據(jù)部分被接收時緩存線305將被多次寫入以便填充各個緩存線部分310、315、320、325。在該具體示例中,假設緩存線具有512位的長度,并且通過路徑244接收的數(shù)據(jù)部分的長度是128位,因此要求四次不同的緩存線訪問以便完全填充緩存線數(shù)據(jù)。當使用緩存訪問仲裁器中的緩沖器布置211時,將理解的是,將類似地需要四次不同的操作來用緩存線的數(shù)據(jù)填充緩沖器211,在該時刻然后可經(jīng)由單個緩存訪問被直接寫入所選緩存線,假設緩存訪問仲裁器210和級別1緩存陣列220之間的路徑的帶寬支持整個緩存線的數(shù)據(jù)在一個周期內寫入。
圖4是根據(jù)一個實施例示出了原子更新操作處理機230的操作的流程圖。在步驟350處,確定是否存在原子更新操作要處理。當存在時,處理然后前進到步驟355,其中,通過向緩存訪問仲裁器210發(fā)布適當?shù)男盘杹碚埱缶彺娌檎?。這將使得緩存訪問仲裁器在級別1緩存陣列220中執(zhí)行查找,并在適當?shù)臅r候將響應提供回原子更新操作處理器。
在步驟360處,等待該響應,并在接收時確定響應是否指示在緩存陣列中已檢測到命中。若響應指示在緩存陣列中已檢測到命中,數(shù)據(jù)通常還將作為響應的一部分被返回到原子更新操作處理機,使得所要求的數(shù)據(jù)在步驟370處從緩存器被取回。在步驟375處,更新操作可被執(zhí)行,更新操作的具體形式取決于原子更新操作的類型。例如,這可涉及使用從緩存器取回的數(shù)據(jù)以及指定為原子更新操作的一部分的一個或多個其他值來執(zhí)行的某些算術邏輯計算。這導致結果數(shù)據(jù)的生成,然后可在步驟380處作為更新的數(shù)據(jù)被寫回相關的緩存線。在一個實施例中,這涉及原子更新操作處理機向緩存訪問仲裁器210發(fā)布寫入訪問請求,以使得相關的緩存線被寫入更新的數(shù)據(jù)。
如圖4所指示的,在步驟370、375、380的執(zhí)行期間,相關的緩存線可被緩存訪問仲裁器210鎖定以防止發(fā)生到可包括原子更新操作的原子性的該線的任何沖突訪問。對于由加載/存儲管道200直接請求的訪問,緩存訪問仲裁器通常將不要求具體的動作,這是由于通常情況下將檢查存儲緩沖條目(包括由原子更新操作處理器維護的條目)的內容以便檢測是否存在覆蓋將由加載/存儲管道請求的訪問的地址的任何未決請求,并且在該情況下訪問將被暫停(或參考存儲緩沖器內容被訪問)。然而,存在由相關處理器核心外部的組件請求的某些訪問,并且確實需要經(jīng)由緩存訪問仲裁器210來防止這些訪問發(fā)生。一個示例是圖1的監(jiān)聽電路155發(fā)布的監(jiān)聽請求,通常將被轉發(fā)到緩存訪問仲裁器210以便在緩存器中執(zhí)行查找。通過在執(zhí)行步驟370、375、380的期間鎖定相關的緩存線,將防止在執(zhí)行原子更新操作時處理試圖訪問該相關緩存線的監(jiān)聽請求。當緩存線跟隨步驟380的完成隨后被解鎖時,監(jiān)聽請求可被處理。
若在步驟365處未在緩存中檢測到命中,則在步驟385處確定是否BIU 240通過路徑252已引起冒險。如前面討論的,情況將是冒險監(jiān)測器是否檢測到存在對包括原子更新操作的指定地址的一系列地址的未決線填充操作。若BIU已引起冒險,則處理前進到步驟387,其中通過路徑262等待部分線填充信息。當在步驟387處檢測到部分線填充通知,則在步驟390處確定部分線填充通知是否與針對原子更新操作被要求的數(shù)據(jù)的部分有關。如前面討論的,原子更新操作處理機可使用作為線填充通知的一部分被提供的地址信息來檢測該情況。特別地,該地址信息將指定與通過路徑244取回的數(shù)據(jù)部分相關聯(lián)的地址的范圍,然后可確定是否包括原子更新操作的指定地址。若不包括,則處理返回步驟387以等待下一部分線填充通知。
然而,一旦在步驟390處確定與部分線填充通知相關聯(lián)的數(shù)據(jù)部分包括與原子更新操作有關的數(shù)據(jù),則處理前進到步驟355,其中原子更新操作處理機向緩存訪問仲裁器210重新發(fā)布其請求。此時將檢測到命中(直接在級別1緩存陣列中,或在緩沖器211中),并因此處理將經(jīng)由步驟370、375、380前進以便使得原子更新操作被執(zhí)行。處理然后返回步驟350。
若在步驟385處未檢測到冒險,這表示原子操作應通過路徑232被輸出用于經(jīng)由BIU 240通過路徑242轉發(fā),用于在較低級別的緩存層級處處理。因此,處理前進到步驟395,其中,原子更新操作處理機230向BIU 240發(fā)布信號以使得原子更新操作由較低級別的緩存層級處理。通常,這可使得操作作為遠原子操作由較低級別的緩存器145中的一個處理。
在上面的示例布置中,部分線填充通知器260被布置為當每個數(shù)據(jù)部分通過路徑244被接收并通過路徑246被路由到緩存訪問仲裁器210中時發(fā)布部分線填充通知,在替代實施例中,關于數(shù)據(jù)部分是否與原子更新操作的感興趣的地址有關的分析可在BIU中被執(zhí)行。在該情況下,一旦確定已被取回的數(shù)據(jù)部分包括原子更新操作的感興趣的數(shù)據(jù),部分線填充通知器260將僅需要通過路徑262向原子更新操作處理機發(fā)布部分線填充通知。當考慮圖4的處理時,將移除決策步驟390作為原子更新操作處理機的操作的一部分。替代地,基于與路徑262上的部分線填充通知相關聯(lián)的槽信息,相關的原子更新操作可被標識,然后處理返回步驟355。
圖5A是根據(jù)一個實施例示出了可在原子更新操作處理機230中被提供的組件的框圖。控制電路400用于控制獨立的原子更新操作的整體操作和處理。當每個原子更新操作通過路徑202從加載/存儲管道被接收時,被分配到緩沖器405的一個槽中。任意數(shù)目的已知技術可用于決定執(zhí)行包含在緩沖器的各個槽中的操作的順序。例如,在一個實施例中,系統(tǒng)可被約束為確保原子操作必須以其原始程序順序來完成。然而,在替代實施例中,在不存在潛在的排序約束的情況下,系統(tǒng)可允許操作被重新排序(例如,若兩個原子操作正在訪問同一地址,或在兩個原子操作之間存在被插入的障礙,將迫使它們按順序被執(zhí)行)。一旦控制電路已決定處理具體的原子更新操作,則向緩存訪問仲裁器210發(fā)送緩存訪問請求并等待指示緩存器中是否已檢測到命中或未命中的響應。當所要求的數(shù)據(jù)經(jīng)由緩存訪問仲裁器被取回時,所要求的更新操作將由原子更新操作處理器中的適當組件執(zhí)行。在一個實施例中,算術邏輯單元(ALU)410被提供用于執(zhí)行可能被原子更新操作要求的各種算術邏輯運算。通常這些運算將涉及對從緩存線取回的數(shù)據(jù)結合被提供作為原子更新操作的一部分的一個或多個其他值執(zhí)行某些操作。例如,加法運算可被標識,其中原子更新操作指定的值被與從緩存器取回的值相加以便生成結果數(shù)據(jù)值用于存儲回緩存器。當結果數(shù)據(jù)是可用的時,可經(jīng)由向緩存訪問仲裁器210發(fā)布適當?shù)目刂菩盘杹肀粚懟叵嚓P的緩存線中。
如圖5A所示,通過路徑252的冒險控制信號以及通知通過路徑262的部分線填充通知也被路由到控制電路400。因此,在冒險控制信號252使得具體原子更新操作被延遲的情況下,當指定該被延遲的原子更新操作的槽數(shù)目的每個部分線填充通知通過路徑262被接收時,可使用部分線填充通知中的剩余信息來執(zhí)行分析,以確定與部分線填充通知有關的相關聯(lián)數(shù)據(jù)部分是否包括作為原子更新操作的主題的數(shù)據(jù)。如前面討論的,為了使能此分析,部分線填充通知可包括地址部分標識符(在圖5A中被標注為“部分Y”),并且基于該地址信息,然后可確定相應的數(shù)據(jù)部分是否包括原子更新操作的指定地址處的數(shù)據(jù)。若包括,原子更新操作可被重新開始。
圖5B示意性地示出了可被維護在緩沖器405的槽中的信息。在每個槽415中,地址部分420將被提供以提供與原子更新操作有關的地址的指示。在一個實施例中,該地址字段將包括物理地址,但在緩沖器被虛擬索引并被物理標記的一個具體實施例中,地址部分可額外地包括所要求的若干虛擬地址位,以便確定到緩存器的適當?shù)乃饕?shù)據(jù)字段425被提供還用于存儲與原子更新操作有關的任意相關數(shù)據(jù),例如,將結合從緩存線取回的數(shù)據(jù)被使用以便執(zhí)行更新操作的數(shù)據(jù)。此外,每個槽可包括指示相關聯(lián)的原子更新操作的狀態(tài)的各種狀態(tài)位430。
在一個實施例中,原子更新操作處理機230可實際上被合并在存儲緩沖電路中,在該情況下緩沖器405還可用于存儲標準存儲操作。對于存儲操作,槽415將仍本質上提供相同的字段420、425、430,但在存儲操作的情況下數(shù)據(jù)字段425用于保持將被存儲在緩存線中的數(shù)據(jù)。
圖6示出了之前參考圖2討論的實施例的替代實施例,其中,轉發(fā)路徑440還被提供以使得獨立的線填充操作的數(shù)據(jù)部分將被直接轉發(fā)到原子更新操作處理機230。該數(shù)據(jù)路徑通常還將伴隨由部分線填充通知器260生成的并指定與該數(shù)據(jù)部分相關聯(lián)的地址的邊帶信息,以及原子更新操作處理機中包含由于相關未決線填充操作而已被暫停的原子更新操作的槽。
該實施例由于需要提供轉發(fā)路徑440而添加了某些成本和復雜度,它確實使得原子更新操作處理機能被直接提供數(shù)據(jù),因此避免了需要向緩存訪問仲裁器重新發(fā)布訪問請求。
這參考圖7被示意性地示出,圖7是圖4的流程圖的替代版本。在圖6和7中,與之前參考圖2和4討論的組件/步驟相同的組件/步驟使用相同的參考標號被標記,并且此處不再討論。
從圖7和圖4的比較可以看出,圖4的步驟387被替換為圖7的步驟450,其中確定部分線填充數(shù)據(jù)是否已被接收。使用相關聯(lián)的邊帶信息,然后可在步驟390處確定通過轉發(fā)路徑接收的數(shù)據(jù)部分是否包括原子更新操作所要求的數(shù)據(jù)。若包括,則處理可高效地直接前進到步驟375以執(zhí)行更新操作,然后在步驟380處使用相關的緩存數(shù)據(jù)向緩存線執(zhí)行寫回操作。然而,盡管單獨的訪問請求在執(zhí)行步驟375和380之前不需要被發(fā)布到緩存訪問仲裁器210,在一個實施例中,控制信號仍被發(fā)布到緩存訪問仲裁器以通知緩存訪問仲裁器相關的原子更新操作已被重新開始,以便緩存訪問仲裁器在原子更新操作正在進行時可以鎖定相關的緩存線。
在圖6的部分線填充數(shù)據(jù)通過路徑440被直接轉發(fā)的實施例中,該方法還可用于下列情況:不同于將數(shù)據(jù)本地緩沖在緩存訪問仲裁器的緩沖器211中,BIU 240將線填充的各個數(shù)據(jù)部分緩沖在緩沖器241中,并且僅當所有數(shù)據(jù)是可用的時,然后請求緩存訪問仲裁器210來將緩存線的數(shù)據(jù)存儲在緩存器中。原子更新操作處理機230仍可經(jīng)由轉發(fā)路徑440被通知BIU 240中數(shù)據(jù)的存在,盡管該數(shù)據(jù)尚未被轉發(fā)到緩存訪問仲裁器。當?shù)竭_步驟380并且數(shù)據(jù)正在被寫回受影響的緩存線時,若該受影響的緩存線的數(shù)據(jù)尚未從緩沖器241被轉發(fā)到緩存訪問仲裁器210,則BIU 240被通知原子更新操作處理機關于具體的數(shù)據(jù)塊已執(zhí)行寫入,并且該數(shù)據(jù)塊在BIU緩沖器241中被清除。這確保當BIU緩沖器內容被隨后發(fā)布到緩存訪問仲裁器210以使得寫入緩存線時,該寫入將不會覆蓋原子更新操作處理器已寫入緩存器中的寫入數(shù)據(jù)。
圖8是示出了圖6的原子更新操作處理器230中提供的組件的框圖。從與之前討論的圖5A的比較將看出的是,原子更新操作處理機本質上未改變。然而,控制電路400現(xiàn)在通過路徑440接收部分線填充數(shù)據(jù),以及通過路徑442接收其他邊帶信息。在一個實施例中,該邊帶信息可標識緩沖器405中的槽,以及與通過路徑440提供的部分線填充數(shù)據(jù)相關聯(lián)的地址部分。
上述實施例中使用的緩存結構可采取各種形式。在一個實施例中,服從近原子操作的緩存結構可采取如圖9所示的虛擬索引、物理標記的數(shù)據(jù)緩存器的形式。緩存器中的每個緩存條目由標簽陣列550的一個中的標簽條目570以及相應數(shù)據(jù)陣列560中的數(shù)據(jù)值的相應緩存線575形成。標簽陣列550使用指定虛擬地址510的索引部分520被訪問,以便從每個標簽陣列標識一個標簽條目,標簽陣列被提供用于每種方式的緩存器。被訪問的標簽條目的組被稱為集合,如圖9中的參考標號555所示。
將理解的是,到標簽陣列550的初始訪問可在虛擬地址向物理地址的轉換之前被執(zhí)行,這是由于僅來自虛擬地址510的索引部分520被要求。然而,在虛擬索引、物理標記的緩存器中,保持在每個標簽條目570中的標簽位實際上是物理地址位,并因此物理地址將被要求以便檢測緩存器中是否已發(fā)生命中或未命中。因此,并行于標簽陣列550中的初始查找,轉換后備緩沖器(TLB)530可被訪問以便生成物理地址535,并因此需要與標簽位進行比較的物理地址的相關標簽部分540可從標簽陣列被訪問。如圖9中示意性地示出的,每個標簽條目可額外地包括某些狀態(tài)位,例如,指示數(shù)據(jù)的相關聯(lián)的緩存線是否存儲有效數(shù)據(jù)的有效位、以及指示數(shù)據(jù)是否重寫(即,比存儲在存儲器中的數(shù)據(jù)更新)的重寫標志位(dirty bit)。當使用虛擬地址索引520訪問標簽陣列時,各個標簽位將被輸出用于任意有效條目,如參考標號585示意性地示出的。這些標簽位然后可通過比較方框580與物理地址標簽部分540進行比較。在檢測到匹配的情況下,命中情況被指示,標識著作為訪問請求的主題的數(shù)據(jù)被存儲在數(shù)據(jù)陣列560中。
對于加載操作,數(shù)據(jù)陣列560可并行于標簽陣列查找被訪問,以便訪問集合中的各個緩存線,由參考標號565指示。緩存線中的數(shù)據(jù)然后可被輸出,如參考標號590指示,以便在命中的情況下選擇電路595然后可選擇與引起命中的標簽條目相對應的緩存線,來自虛擬地址的偏移位522用于將具體數(shù)據(jù)值標識為訪問的主題。該數(shù)據(jù)值然后可與虛擬地址從緩存器被輸出回發(fā)布訪問請求的處理電路。將理解的是,存在訪問命中緩存線中具體所請求數(shù)據(jù)值的若干方式,例如,一系列復用器可用于標識將要訪問的所請求數(shù)據(jù)值。
在存儲訪問請求是可緩存的情況下,數(shù)據(jù)陣列不并行于標簽陣列訪問被訪問,而是物理地址首先被計算,然后一旦處理電路中的加載/存儲管道已確定存儲操作可被提交(即,將被寫入存儲器的寫入數(shù)據(jù)現(xiàn)在可安全地寫出到存儲器),存儲訪問請求的條目在存儲緩沖器中被替換。一旦寫入訪問請求與物理地址一起已被存儲在存儲緩沖器中,則可在標簽陣列中執(zhí)行查找,并且在命中的情況下,指定的寫入數(shù)據(jù)可用于更新緩存器中的相關緩存線。這在互斥寫入的情況下可直接發(fā)生,其中可確保數(shù)據(jù)不被另一核心共享。在非互斥寫入的情況下,即使在緩存器中存在命中,訪問被看作未命中,以便引起外部監(jiān)聽電路使可被保持在其他緩存器中的任意其他數(shù)據(jù)備份無效,隨后數(shù)據(jù)可被寫入緩存器。
如之前提到的,所描述的實施例中使用的原子更新操作還以與存儲操作類似的方式被處理,這是由于,當確定是近原子時,它們將涉及關于緩存線將存儲操作作為其操作的一部分。
從上述實施例,將理解的是,這類實施例使得近原子更新操作被更有效地處理。特別地,當近原子更新操作由于未決線填充操作而被暫停時,由于上述機制,早于否則等待線填充操作的完成而可能出現(xiàn)的情況來重新開始該原子更新操作的執(zhí)行是可能的。這在緩存線長度超過緩存線的各個數(shù)據(jù)部分借以從較低級別的緩存層級被返回的數(shù)據(jù)寬度的情況下是特別有益的,因為在那些情況下,線填充操作的執(zhí)行可要求大量時間來完成。
所描述實施例的技術可被應用的原子更新操作可采取各種各樣的不同形式。例如,可涉及讀取-修改-寫入類型操作,其中,數(shù)據(jù)值從緩存線被讀取,算術邏輯運算被應用于從緩存線讀取的數(shù)據(jù)(通常通過將其與原子更新操作指定的其他數(shù)據(jù)合并),以及然后結果數(shù)據(jù)被寫回相關的緩存線。算術邏輯運算可采取各種形式,例如,添、減等。在其他實施例中,原子更新操作可再次從緩存線讀取數(shù)據(jù)值,并然后執(zhí)行某些操作以便產(chǎn)生結果。然而,該結果的某些分析然后可被執(zhí)行以便確定是否需要更新緩存線內容,并因此根據(jù)結果的分析來有選擇地執(zhí)行寫回緩存線。這類原子更新操作的示例將是比較和交換操作,其中,值從緩存器被讀取并與原子更新操作指定的另一值進行比較,然后根據(jù)該比較的結果是否指示兩個值是相等或不相等的,做出關于是否將值寫回緩存器的決定。
在本申請中,詞“被配置為...”用于表示裝置的元件具有能夠執(zhí)行所定義操作的配置。在該上下文中,“配置”表示硬件或軟件的互聯(lián)的布置或方式。例如,裝置可具有提供所定義操作的專用硬件,或可被編程以執(zhí)行功能的處理器或其他處理設備?!氨慌渲脼椤辈灰馕吨b置元件需要以任意方式被改變以便提供所定義的操作。
盡管本發(fā)明的說明性的實施例參考附圖在本文已被詳細描述,將理解的是,本發(fā)明不被限制于那些精確的實施例,并且在不脫離如所附權利要求定義的本發(fā)明的范圍和精神的情況下,本領域技術人員可在其中做出各種改變、添加以及修改。例如,在不脫離本發(fā)明的范圍的情況下,可以對獨立權利要求的特征與從屬權利要求的特征進行各種組合。