使用釋放一致性存儲器排序模型的多核心計算高速緩存相干性的制作方法
【專利說明】使用釋放一致性存儲器排序模型的多核心計算高速緩存相 干性
[0001] 本申請案主張2012年8月6日申請的第61/680, 201號美國臨時專利申請案以及 2013年3月15日申請的第61/800, 441號美國臨時專利申請案的權(quán)益,這些申請案的全部 內(nèi)容通過引用的方式并入本文中。
技術(shù)領(lǐng)域
[0002] 本發(fā)明涉及異構(gòu)計算中所涉及的技術(shù),且更確切地說,涉及異構(gòu)計算中的高速緩 存相干性所涉及的技術(shù)。
【背景技術(shù)】
[0003] 最近已有趨勢朝向所謂的異構(gòu)計算,在所述異構(gòu)計算中將多個處理器互連為一個 系統(tǒng)。在一些情況下,可在若干處理器之中共享任務(wù)。一些作業(yè)可較佳適合特定類型的處 理器,例如中央處理單元(CPU)、圖形處理單元(GPU)或數(shù)字信號處理器(DSP)。執(zhí)行異構(gòu) 任務(wù)所涉及的每一處理器可具有一或多個高速緩沖存儲器。每一高速緩沖存儲器可含有在 多個處理器中共享的可變數(shù)據(jù)的副本。高速緩沖存儲器可允許處理器通過使高速緩存的數(shù) 據(jù)對于處理器的一或多個執(zhí)行單元較快速地可存取而加速程序執(zhí)行。當一個處理器存取在 系統(tǒng)的處理器的兩個或兩個以上高速緩沖存儲器中共享的共享可變數(shù)據(jù)時,被稱作"高速 緩存相干性系統(tǒng)"的機制確保存儲在處理器高速緩沖存儲器中的共享可變數(shù)據(jù)的副本在所 述系統(tǒng)的所有處理器中一致,且以及時及一致的方式使對所述共享可變數(shù)據(jù)的改變對于共 享這些變量的所有處理器為可觀測的。
【發(fā)明內(nèi)容】
[0004] 大體來說,本發(fā)明中描述的技術(shù)涉及用于在包含可能不同類型的多個處理器核心 的多核心(例如,異構(gòu))計算系統(tǒng)中維持多個高速緩沖存儲器及系統(tǒng)存儲器當中的高速緩 存相干性(即,數(shù)據(jù)一致性)的技術(shù)。根據(jù)本發(fā)明的技術(shù)中的一者,中央處理單元(CPU)、圖 形處理單元(GPU)、數(shù)字信號處理器(DSP)或另一類型的處理核心可在獲取或?qū)懭攵嗪诵?計算系統(tǒng)的所有處理器中共享的變量時執(zhí)行指令。當處理器核心(被稱為"處理器")嘗試 存取共享可變數(shù)據(jù)時,處理器核心可執(zhí)行同步操作,例如具有獲取的加載及/或具有釋放 的存儲操作,以便確保應(yīng)用于共享可變數(shù)據(jù)的任何操作以有序及相干方式發(fā)生。
[0005] 多核心系統(tǒng)中的處理器中的一些或全部可包含高速緩沖存儲器。高速緩沖存儲器 可包括頻繁使用數(shù)據(jù)的本地工作集合。在一些情況下,高速緩沖存儲器可包含在多核心系 統(tǒng)的一或多個其它處理器中共享的共享可變數(shù)據(jù)的本地副本。根據(jù)本發(fā)明的技術(shù),其它處 理器中的每一者可同樣包含高速緩沖存儲器,其包含共享可變數(shù)據(jù)的本地副本。
[0006] 在具有多個處理器(例如,第一處理器及第二處理器)的多核心系統(tǒng)中,第一處理 器可改變一些共享可變數(shù)據(jù)的值。第一處理器接著可清空共享可變數(shù)據(jù)的值。清空共享可 變數(shù)據(jù)可致使第一處理器將更新的共享可變數(shù)據(jù)值例如寫入到系統(tǒng)存儲器。為確保其它處 理器看見共享可變數(shù)據(jù)的更新值,響應(yīng)于所述高速緩存清空,第一或第二處理器可使對應(yīng) 于第二處理器的高速緩沖存儲器中的共享可變數(shù)據(jù)的高速緩存條目無效。當?shù)诙幚砥髯x 取先前含有共享可變數(shù)據(jù)的值的高速緩存行時,將高速緩存行標記為無效。因為第二處理 器的高速緩存行標記為無效,所以第二處理器從系統(tǒng)存儲器檢索共享可變數(shù)據(jù)的最新值, 及更新對應(yīng)于共享可變數(shù)據(jù)的第二處理器的高速緩沖存儲器,而非從第二處理器的高速緩 沖存儲器讀取共享可變數(shù)據(jù)的過時值。以此方式,本發(fā)明的技術(shù)確保共享可變數(shù)據(jù)經(jīng)由使 用高速緩存無效及清空而相干。
[0007] 在一個實例中,一種方法包含:使用第一可編程處理器將共享可變數(shù)據(jù)存儲到第 一處理器的第一高速緩沖存儲器的高速緩存行;使用第一可編程處理器執(zhí)行具有釋放的存 儲操作;使用第二可編程處理器執(zhí)行具有獲取的加載操作;及使用第二可編程處理器加載 來自第二可編程處理器的高速緩沖存儲器的共享可變數(shù)據(jù)的值。
[0008] 在另一實例中,本發(fā)明描述一種裝置,其包含:具有第一高速緩沖存儲器的第一可 編程處理器;具有第二高速緩沖存儲器的第二可編程處理器,其中所述裝置經(jīng)配置以使用 第一可編程處理器將共享可變數(shù)據(jù)存儲到第一處理器的第一高速緩沖存儲器的高速緩存 行,使用第一可編程處理器執(zhí)行具有釋放的存儲操作,使用第二可編程處理器執(zhí)行具有獲 取的加載操作,及使用第二可編程處理器加載來自第二可編程處理器的高速緩沖存儲器的 共享可變數(shù)據(jù)的值。
[0009] 在另一實例中,本發(fā)明描述一種裝置,其包含:用于使用第一可編程處理器將共享 可變數(shù)據(jù)存儲到第一處理器的第一高速緩沖存儲器的高速緩存行的裝置;用于使用第一可 編程處理器執(zhí)行具有釋放的存儲操作的裝置;用于使用第二可編程處理器執(zhí)行具有獲取的 加載操作的裝置;及用于使用第二可編程處理器加載來自第二可編程處理器的高速緩沖存 儲器的共享可變數(shù)據(jù)的值的裝置。
[0010] 在另一實例中,本發(fā)明描述一種其上存儲有指令的非暫時性計算機可讀存儲媒 體,所述指令在執(zhí)行時致使可編程處理器:使用第一可編程處理器將共享可變數(shù)據(jù)存儲到 第一處理器的第一高速緩沖存儲器的高速緩存行;使用第一可編程處理器執(zhí)行具有釋放的 存儲操作;使用第二可編程處理器執(zhí)行具有獲取的加載操作;及使用第二可編程處理器加 載來自第二可編程處理器的高速緩沖存儲器的共享可變數(shù)據(jù)的值。
[0011] 隨附圖式及以下描述中陳述一或多個實例的細節(jié)。其它特征、目標及優(yōu)勢將從所 述描述及所述圖式以及從權(quán)利要求書顯而易見。
【附圖說明】
[0012] 圖1是說明根據(jù)本發(fā)明中描述的一或多個實例的多核心計算系統(tǒng)的實例的框圖。
[0013] 圖2是說明可實施能夠執(zhí)行指令的圖形處理管線的圖形處理單元(GPU)的另一實 例的框圖,所述指令允許GPU支持按需高速緩存相干性。
[0014] 圖3A是說明經(jīng)配置以執(zhí)行GPU內(nèi)核中的同步操作的GPU的概念圖,所述內(nèi)核可包 含高速緩存無效及清空指令。
[0015] 圖3B是說明用于將操作同步到GPU內(nèi)核的編譯器/驅(qū)動器插入指令的概念圖。
[0016] 圖4A是說明含有失效共享變量的高速緩沖存儲器的概念圖。
[0017] 圖4B是說明由于從標記為無效的高速緩存行讀取而更新來自主存儲器的高速緩 沖存儲器的概念圖。
[0018] 圖5A是說明含有失效共享變量的主存儲器的概念圖。
[0019] 圖5B是說明在執(zhí)行高速緩存清空之后的系統(tǒng)存儲器的狀態(tài)的概念圖。
[0020] 圖6是說明根據(jù)本發(fā)明的技術(shù)的GPU及CPU的高速緩沖存儲器及存儲器管理單元 的概念圖。
[0021] 圖7是根據(jù)本發(fā)明的技術(shù)的說明實施屬性位的高速緩存行的概念圖。
[0022] 圖8是根據(jù)本發(fā)明的技術(shù)的說明GPU高速緩沖存儲器的概念圖。
[0023] 圖9是根據(jù)本發(fā)明中描述的一或多個實例的說明用于維持多核心系統(tǒng)中的高速 緩存相干性的過程的流程圖。
【具體實施方式】
[0024] 最近已有趨勢朝向所謂的異構(gòu)計算,在所述異構(gòu)計算中將多個處理器或處理器核 心("核心")互連為一個系統(tǒng)。然而,存在與異構(gòu)計算系統(tǒng)相關(guān)聯(lián)的許多挑戰(zhàn)。某些核心 可適合于特定任務(wù)。作為實例,CPU可較適合于執(zhí)行具有大量條件性邏輯(例如,分支及跳 躍)的程序。其它處理器,例如圖形處理單元(GPU)可較適合于執(zhí)行大規(guī)模平行操作,例如 向量處理及浮點運算。其它處理器,例如數(shù)字信號處理器(DSP)可適合于特定應(yīng)用程序,例 如數(shù)字信號處理,其可包含執(zhí)行特定數(shù)學運算。此類運算可包含快速傅立葉變換(FFT)及 離散余弦變換(DCT)。
[0025] 逐漸地,例如GPU等I/O處理核心的能力已擴增,以包含類似于較通用CPU的 功能性的功能性。許多GPU包含執(zhí)行包含條件性邏輯(例如分支及跳躍)的較通用應(yīng) 用程序的能力。另外,通用計算語言(例如科納斯(Khronos)組織的OpenCL或微軟的 DirectCompute)提供應(yīng)用程序編程接口(API),所述接口可允許程序員用一種語言撰寫單 個程序,而使得所述程序能夠在與此類通用計算語言兼容的任何處理核心上執(zhí)行。
[0026] 不管編程語言的進展及例如GPU及DSP等處理器的處理能力的增加,異構(gòu)多核心 計算仍引起許多挑戰(zhàn)。一個此類挑戰(zhàn)是確保在異構(gòu)計算系統(tǒng)的多個核心中共享的例如共享 可變數(shù)據(jù)等數(shù)據(jù)在若干處理器中保持相干。本發(fā)明的技術(shù)涉及一種高速緩存相干性系統(tǒng), 所述系統(tǒng)確保對共享變量的改變以及時及有序方式在所述系統(tǒng)的所有處理器中傳播。
[0027] 圖1是說明根據(jù)本發(fā)明中描述的一或多個實例的多核心計算系統(tǒng)的實例的框圖。 圖1說明包含CPU 16、GPU 20及DSP 24的異構(gòu)多核心系統(tǒng)2。盡管CPU 16、GPU 20及DSP 經(jīng)說明為不可分單元,但CPU 16、GPU 20及DSP 24中的每一者可表示多個處理器及/或 多個處理器核心。作為實例,多核心系統(tǒng)2可具有多個CPU、GPU、DSP及/或其它類型的處 理器。CPU 16包含高速緩沖存儲器18, GPU 20包含高速緩沖存儲器22,及DSP 24包含高 速緩沖存儲器26 (統(tǒng)稱為"高速緩沖存儲器18、22及26")。高速緩沖存儲器18、22及26 可各自存儲頻繁使用的指令及/或數(shù)據(jù)以用于相對于從系統(tǒng)存儲器14檢索指令及/或數(shù) 據(jù)而快速檢索指令數(shù)據(jù)。盡管高速緩沖存儲器18、22及26可包含指令及/或數(shù)據(jù),但本發(fā) 明的技術(shù)涉及共享數(shù)據(jù)及非共享指令的高速緩存相干性。因此,本發(fā)明僅是指從高速緩沖 存儲器18、22及26檢索及存儲數(shù)據(jù),例如共享變量。高速緩沖存儲器18、22及26中的每 一者可包含高速緩沖存儲器的一或多個"等級",例如1級("L1")高速緩沖存儲器及2級 ("L2")高速緩沖存儲器。Ll高速緩沖存儲器可不能夠保持與L2高速緩沖存儲器一樣多 的數(shù)據(jù),但處理器可相比L2高速緩沖存儲器而更快地寫入到及讀取自所述LI (即,具有較 低存取時延)。
[0028] CPU 16、GPU 20及DSP 24 (例如)經(jīng)由系統(tǒng)總線連接到系統(tǒng)存儲器14。系統(tǒng)存 儲器14可包括動態(tài)隨機存取存儲器(DRAM),其可包含一些共享可變數(shù)據(jù)28。共享可變數(shù) 據(jù)28可例如包括共享指令字、變量、緩沖器、數(shù)據(jù)結(jié)構(gòu)、作業(yè)等。盡管CPU 16、GPU 20及 DSP 24經(jīng)說明為不可分單元,但系統(tǒng)存儲器14可包括一或多個物理積體電路(還稱為"芯 片")。系統(tǒng)存儲器14還可包含高速緩沖存儲器的另一等級,例如與系統(tǒng)存儲器14分開的 3級("L3")高速緩沖存儲器,且其共享在CPU 16、GPU 20及DSP 24中的每一者中(即, 可通過所述每一者存取)。
[0029] 本發(fā)明的技術(shù)啟用多核心系統(tǒng)2,所述系統(tǒng)可由異構(gòu)核心及/或處理器(例如, CPU16、GPU 20及DSP 24)組成,從而響應(yīng)于同步操作而執(zhí)行高速緩存管理以便維持跨越多 核心系統(tǒng)2的核心的高速緩存相干性。同步操作可包括所謂的顯式全部及部分阻擋、圍欄 以及加載及存儲與全部及部分阻擋的組合形式。在一些實例中,同步操作可包含具有釋放 的存儲及具有獲取操作的加載。
[0030] 本發(fā)明的技術(shù)實現(xiàn)對共享可變數(shù)據(jù)28的改變,所述數(shù)據(jù)的各種副本可存儲在高 速緩沖存儲器18、高速緩沖存儲器22及高速緩沖存儲器26中的一或多者中,以傳播到多核 心系統(tǒng)2的其它處理器的高速緩沖存儲器(即,CPU 16、GPU 20及DSP 24)。為使CPU16、 GPU 20及DSP 24能夠?qū)嵤┍环Q作"按需高速緩存相干性模型"的高速緩存相干性模式。在 按需高速緩存相干性模型中,讀取或?qū)懭牍蚕砜勺償?shù)據(jù)28的處理器(例如,GPU20)可執(zhí)行 同步操作,例如執(zhí)行與共享可變數(shù)據(jù)28相關(guān)聯(lián)的具有釋放的存儲操作及/或具有獲取的加 載操作。多核心系統(tǒng)2的其它處理器(CPU 16及DSP 24)在與讀取或?qū)懭牍蚕砜勺償?shù)據(jù)28 相關(guān)聯(lián)時還可執(zhí)行具有釋放的存儲操作及/或具有獲取的加載操作。
[0031] 具有釋放的存儲操作及具有獲取的加載操作為可用以界定存儲器排序模型的原 子操作(還稱為"同步操作")。原子操作為對于計算系統(tǒng)的其余部分(例如,核心、處理器、 存儲器等)看起來好像立即出現(xiàn)的操作。當執(zhí)行具有獲取的加載及具有釋放的存儲同步操 作時,處理器組合加載及存儲與部分阻擋以表達獲取/釋放存儲器模型語義。C++11標準為 界定獲取/釋放存儲器模型的一個實施方案的編程語言的一個實例。
[0032] 與具有獲取的加載及具有釋放的存儲操作相關(guān)聯(lián)的語義及約束可用以確保:第一 線程中的從共享變量(例如共享可變數(shù)據(jù)28)的讀取在第二線程中的寫入到相同共享變量 完成之后發(fā)生,即強制讀取與寫入共享變量之間的依賴性或排序。具體來說,獲取/釋放模 式強迫讀取/寫入依賴性而使得第一線程中使用具有獲取的加載操作進行的讀取共享變 量在第二線程中的對同一共享變量執(zhí)行具有釋放的存儲操作之后發(fā)生。
[0033] 本發(fā)明的按需高速緩存相干性技術(shù)描述可在(例如)異構(gòu)多核心系統(tǒng)2中利用的 高速緩存相干性技術(shù),以允許多個處理器執(zhí)行同步操作(例如,具有獲取的加載與具有釋 放的存儲操作)以實施獲取/釋放存儲器排序模型。本發(fā)明的按需相干性模型運作而使得 每當?shù)谝惶幚砥骱诵模ɡ?,GPU 20)讀取共享可變數(shù)據(jù)28及執(zhí)行同步操作時,GPU 20或 另一處理器可使第二核心的高速緩沖存儲器的至少部分(被稱作"高速緩存行")無效,例 如,CPU 16的高速緩沖存儲器18的含有共享可變數(shù)據(jù)28的值的一或多個行。GPU 20可自 動地調(diào)用高速緩沖存儲器18的高速緩存行的無效作為執(zhí)行同步操作的部分。
[0034] 或者,當程序代碼包含具有獲取的加載及具有釋放的存儲操作時,編譯器(例如 編譯器30)可自動地調(diào)用高速緩沖存儲器22的無效。編譯器30可包括驅(qū)動器及/或編譯 器,及可產(chǎn)生、編譯及/或修改用于CPU 16、GPU 20及DSP 24中的一或多者的代碼。在一 些實例中,編譯器30可為執(zhí)行CPU 16、GPU 20及DSP 24中的一或多者的操作系統(tǒng)的應(yīng)用 程序或處理程序。編譯器30可通過在代碼中包含同步操作的位置處在編譯時間或在運行 時間插入低級高速緩存無效指令到程序代碼中而自動地調(diào)用所述高速緩存無效。第二核心 接著執(zhí)行包含高速緩存無效指令的修改代碼。一旦第一核心已使高速緩沖存儲器18的含 有共享可變數(shù)據(jù)28的高速緩存行無效,CPU 16隨后獲得來自系統(tǒng)的共享數(shù)據(jù)的新副本(例 如,來自系統(tǒng)存儲器14、高級高速緩沖存儲