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