用于使用多個(gè)子鎖來(lái)控制對(duì)具有讀取器-寫(xiě)入器鎖的共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的系統(tǒng)和方法
【專利摘要】一種用于控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的計(jì)算機(jī)系統(tǒng),包括被耦合到第一和第二處理單元的共享存儲(chǔ)器,其存儲(chǔ)多鎖以控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)。該多鎖包括與第一處理單元相關(guān)聯(lián)的第一子鎖和與第二處理單元相關(guān)聯(lián)的第二子鎖。該系統(tǒng)還包括數(shù)據(jù)訪問(wèn)控制引擎,其用以從第一處理單元接收用以從數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的請(qǐng)求,并且作為結(jié)果,確定在專用于第一處理單元的第一高速緩存器中是否存在第一子鎖的私人可修改拷貝,如果在第一高速緩存器中存在第一子鎖的私人可修改拷貝,則獲取第一子鎖的讀部分且不跨相干性總線傳送該獲取,并且如果在第一高速緩存器不存在第一子鎖的私人可修改拷貝,則將第一子鎖從共享存儲(chǔ)器加載到第一高速緩存器中,選中第一子鎖的其他拷貝,并獲取第一子鎖的讀部分。
【專利說(shuō)明】用于使用多個(gè)子鎖來(lái)控制對(duì)具有讀取器-寫(xiě)入器鎖的共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的系統(tǒng)和方法
【背景技術(shù)】
[0001]現(xiàn)代計(jì)算機(jī)通過(guò)使用多處理器管芯和(在某些情況下)單個(gè)管芯上的多個(gè)處理器核來(lái)實(shí)現(xiàn)增加的性能。為了利用這些改善的硬件布置,創(chuàng)建軟件以在單個(gè)處理器核上同時(shí)地運(yùn)行多個(gè)線程。
【專利附圖】
【附圖說(shuō)明】
[0002]針對(duì)本發(fā)明的示例性實(shí)施方式的詳細(xì)描述,現(xiàn)在將對(duì)附圖進(jìn)行參考,在所述附圖中:
圖1a和Ib示出了根據(jù)本公開(kāi)的各種示例的用于控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的系統(tǒng)的替換框圖;
圖2a_2i示出了根據(jù)本公開(kāi)的各種示例的示例性存儲(chǔ)器圖;
圖3示出了根據(jù)本公開(kāi)的各種示例的數(shù)據(jù)訪問(wèn)控制系統(tǒng);
圖4示出了根據(jù)本公開(kāi)的各種示例的用于控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的方法的流程圖;以及
圖5示出了根據(jù)本公開(kāi)的某些示例的示例性子鎖打包方案。
[0003]表不法和命名法
遍及以下描述和權(quán)利要求使用某些術(shù)語(yǔ)來(lái)指示特定系統(tǒng)部件。本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到計(jì)算機(jī)公司可用不同的名稱來(lái)指示部件。本文并不意圖區(qū)別在名稱而非功能方面不同的部件。在以下討論中和權(quán)利要求中,以開(kāi)放末端方式使用術(shù)語(yǔ)“包括”和“包含”,并且因此應(yīng)解釋成意指“包括但不限于...”。并且,術(shù)語(yǔ)“耦合”意圖指間接、直接、光學(xué)或無(wú)線電連接。因此,如果第一器件耦合到第二器件,則該連接可通過(guò)直接電連接、通過(guò)經(jīng)由其他設(shè)備和連接的間接電連接、通過(guò)光學(xué)電連接或者通過(guò)無(wú)線電連接。
[0004]本文所使用的術(shù)語(yǔ)“處理單元”指的是執(zhí)行計(jì)算任務(wù)的物理或邏輯資源。邏輯資源的示例包括線程和進(jìn)程。物理資源的示例包括虛擬CPU核、物理CPU核、共享一個(gè)或多個(gè)高速緩存器層級(jí)的分組CPU核、公共管芯上的CPU核、公共多芯片模塊上的CPU核、公共插座上的CPU核、鏈接CPU核以及公共底架中的CPU核。
[0005]本文所使用的術(shù)語(yǔ)“鎖”在被用作名詞時(shí)指的是用以提供對(duì)數(shù)據(jù)、特別是數(shù)據(jù)結(jié)構(gòu)的同時(shí)訪問(wèn)的控制的機(jī)制。
[0006]本文所使用的術(shù)語(yǔ)“鎖”在被用作動(dòng)詞時(shí)指的是其中處理單元告知其他處理單元其對(duì)與鎖相關(guān)聯(lián)的數(shù)據(jù)具有獨(dú)有訪問(wèn)的動(dòng)作。這也可稱為“獲取”鎖。
[0007]本文所使用的術(shù)語(yǔ)“MESI”或“MESI協(xié)議”指的是其中高速緩存線被標(biāo)記為已修改、獨(dú)有、共享或無(wú)效的高速緩存相干性協(xié)議的一般使用系列。
[0008]本文所使用的術(shù)語(yǔ)“選中”指的是通知其他高速緩存器單元其保持的高速緩存線的拷貝可能不再被認(rèn)為是最新的,并且如果其希望滿足對(duì)所述線路的訪問(wèn),則其必須首先更新其本身。例如,在MESI協(xié)議中,選中包括“廣播無(wú)效”和“讀取意圖修改”消息。
【具體實(shí)施方式】
[0009]以下討論針對(duì)本發(fā)明的各種示例。雖然這些示例中的一個(gè)或多個(gè)可以是優(yōu)選的,但不應(yīng)將公開(kāi)的示例解釋為或以其他方式被使用作為限制本公開(kāi)的范圍,包括權(quán)利要求。另外,本領(lǐng)域的技術(shù)人員將理解的是以下描述具有廣泛的應(yīng)用,并且任何實(shí)施例的討論僅僅意圖是該實(shí)施例的示例,并且并不意圖宣布公開(kāi)(包括權(quán)利要求)的范圍局限于該實(shí)施例。
[0010]多個(gè)線程可對(duì)共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作(例如,從其讀取或向其寫(xiě)入)。在這種情況下,線程應(yīng)相互協(xié)調(diào),使得不會(huì)有超過(guò)一個(gè)線程同時(shí)地嘗試向數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入。鎖是用于限制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的同步機(jī)制,其使得處理單元(例如,線程、進(jìn)程、硬件SMT上下文、CMP核、CPU)能夠相互協(xié)調(diào)以避免其中超過(guò)一個(gè)處理單元同時(shí)地嘗試向數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入的情況。以簡(jiǎn)單形式,鎖可具有讀部分和寫(xiě)部分兩者。寫(xiě)部分表示另一處理單元是否正在向與鎖相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入,并且可以是二進(jìn)制的(例如,鎖的低位表示處理單元正在向數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入或者沒(méi)有處理單元正在向數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入)。讀部分可采取計(jì)數(shù)器的形式,其在處理單元請(qǐng)求讀取數(shù)據(jù)結(jié)構(gòu)時(shí)遞增并在處理單元停止讀取數(shù)據(jù)結(jié)構(gòu)時(shí)遞減。在本示例中,一次可有多個(gè)處理單元讀取數(shù)據(jù)結(jié)構(gòu)。
[0011]在許多情況下,處理單元主要從該數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取;然而,處理單元執(zhí)行寫(xiě)(即,增加鎖的讀部分的值)以獲取鎖的讀部分。例如,當(dāng)處理單元獲取(例如,增加)鎖的讀部分時(shí),這通常被傳送至其他處理單元,因?yàn)槠渌幚韱卧械囊粋€(gè)可能期望執(zhí)行寫(xiě),其直到鎖的讀部分被釋放(例如,計(jì)數(shù)器值是零)之前不能發(fā)生。換言之,獲取鎖的讀部分迫使寫(xiě)到其他處理單元以保持相干性??梢允菑囊粋€(gè)處理核到另一個(gè)的此通信稱為“相干性業(yè)務(wù)”。相干性業(yè)務(wù)可導(dǎo)致性能瓶頸,即使在其中處理單元大部分正在從共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的情況下。結(jié)果,性能的差異在確保數(shù)據(jù)結(jié)構(gòu)為只讀時(shí)可以是大的,其與在即使小部分的時(shí)間中向數(shù)據(jù)結(jié)構(gòu)寫(xiě)入相比并不要求鎖,該寫(xiě)入要求其中從數(shù)據(jù)結(jié)構(gòu)的讀取和向其寫(xiě)入兩者都產(chǎn)生相干性業(yè)務(wù)的鎖定機(jī)制。
[0012]如上文所解釋的,在許多情況下,讀操作在數(shù)量上超過(guò)寫(xiě)操作一個(gè)數(shù)量級(jí)或以上。因此,在讀操作期間獲得性能(例如,在處理單元從共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的情況下減少相干性業(yè)務(wù))是有益的。根據(jù)本公開(kāi)的各種示例,針對(duì)數(shù)據(jù)結(jié)構(gòu)定義“多鎖”。多鎖包括用于每個(gè)處理單元的子鎖。類似于上文所解釋的鎖,子鎖每個(gè)具有讀部分和寫(xiě)部分。在一個(gè)實(shí)施方式中,子鎖可以是“Pthread rwlock t”(例如,根據(jù)可移植操作系統(tǒng)接口(POSIX)規(guī)范)或其他類似機(jī)制(例如,Windows中的SRW鎖)。然而,當(dāng)處理單元獲取子鎖的讀部分時(shí),其僅對(duì)其自己的子鎖這樣做,并且這不一定被傳送至其他處理單元。另外,當(dāng)處理單元期望向共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入時(shí),處理單元獲取包括在用于該數(shù)據(jù)結(jié)構(gòu)的多鎖中的所有子鎖的寫(xiě)部分。因此,處理單元檢查每個(gè)子鎖以確保不存在讀取器(例如,處理單元檢查每個(gè)子鎖的讀部分是零,指示不存在讀取器)。
[0013]如下面將更詳細(xì)地解釋的,獲取多鎖中的每個(gè)子鎖的寫(xiě)部分導(dǎo)致相干性業(yè)務(wù),因?yàn)橐螳@取寫(xiě)部分的處理單元將其獲取傳送至其他處理單元,使得其可使其子鎖的其拷貝無(wú)效。在某些情況下,例如,當(dāng)處理單元在任何其他處理單元嘗試獲取該鎖(讀或?qū)?之前獲取寫(xiě)鎖、將其釋放和再次獲取寫(xiě)鎖時(shí),寫(xiě)鎖的重新獲取可能未被傳送至其他處理單元。然而,在任一種情況下,都不產(chǎn)生其中處理單元獲取其子鎖的讀部分的相干性業(yè)務(wù)。在許多情況下,讀操作大大地在數(shù)量上超過(guò)寫(xiě)操作,并且因此通過(guò)減少讀操作期間的相干性業(yè)務(wù)來(lái)實(shí)現(xiàn)性能益處。
[0014]現(xiàn)在轉(zhuǎn)到圖la,根據(jù)本公開(kāi)的各種示例示出了系統(tǒng)100。系統(tǒng)100包括第一處理單元102和第二處理單元104。每個(gè)處理單元102、104包括各數(shù)據(jù)訪問(wèn)控制引擎106、108和各專用高速緩存器110、112。高速緩存器110、112經(jīng)由相干性總線114被耦合,其可以是點(diǎn)到點(diǎn)相干性鏈路,諸如,例如HyperTransport (HT)或QuickPath互連(QPI)。相干性總線114使得能夠?qū)崿F(xiàn)高速緩存器110、112之間的相干性業(yè)務(wù),例如以實(shí)現(xiàn)高速緩存器相干性方案,諸如MESI協(xié)議。在相干性總線114上發(fā)射的相干性信息或業(yè)務(wù)可包括例如MESI狀態(tài)信息或與實(shí)現(xiàn)另一高速緩存相干性協(xié)議有關(guān)的信息。每個(gè)處理單元102、104還被耦合到共享存儲(chǔ)器116,其包括與被處理單元102、104共享的數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的存儲(chǔ)多鎖118。多鎖118包括與第一處理單元102相關(guān)聯(lián)的第一子鎖120和與第二處理單元104相關(guān)聯(lián)的第二子鎖122。
[0015]應(yīng)認(rèn)識(shí)到的是系統(tǒng)100是一個(gè)示例,并且處理單元和硬件的其他布置在本公開(kāi)的范圍內(nèi)。例如,圖1b示出了替換系統(tǒng)150。系統(tǒng)150是雙插座系統(tǒng),插座152包含兩個(gè)處理單元(例如,處理核)156、158且插座154同樣地包含兩個(gè)處理單元160、162。每個(gè)處理單元156、158、160、162與專用LI高速緩存器164、166、168、170相關(guān)聯(lián),并且每對(duì)處理單元(SP,156、158和160、162)與L2高速緩存器172、174相關(guān)聯(lián)。每個(gè)插座152、154還包括與共享存儲(chǔ)器(未示出)對(duì)接的存儲(chǔ)器控制器176、178。在本示例中,經(jīng)由相干性總線180在LI高速緩存器164、166、168、170之間實(shí)現(xiàn)諸如MESI協(xié)議之類的高速緩存相干性協(xié)議。
[0016]現(xiàn)在轉(zhuǎn)到圖2a_2i,并且參考圖1a和Ib的元件,更詳細(xì)地解釋使用包括用于訪問(wèn)數(shù)據(jù)結(jié)構(gòu)的每個(gè)處理單元的子鎖的多鎖來(lái)控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)。圖2a_2i參考四個(gè)處理單元,如圖1b中所示,然而,這是示例性的,并且本公開(kāi)的范圍意圖解決其中數(shù)據(jù)結(jié)構(gòu)被僅僅兩個(gè)處理單元或者遠(yuǎn)遠(yuǎn)超過(guò)四個(gè)處理單元共享的情況。
[0017]圖2a_2i示出了圖1b的LI高速緩存器164、166、168、170的內(nèi)容以及如圖1a中所示的示例性多鎖118的邏輯內(nèi)容。圖2a-2i的示例中的特定多鎖118包括四個(gè)子鎖,圖1b中所示的每個(gè)處理單元156、158、160、162 —個(gè)。每個(gè)子鎖包括示為Y或N的數(shù)目和布爾值。在一個(gè)示例中可以是計(jì)數(shù)器的數(shù)目對(duì)應(yīng)于目前獲取子鎖的讀部分的讀取器的數(shù)目,并且布爾值指示任何處理單元156、158、160、162是否已獲取子鎖的寫(xiě)部分。
[0018]高速緩存器164、166、168、170每個(gè)線路具有三個(gè)字段:標(biāo)簽、高速緩存器內(nèi)容以及高速緩存器協(xié)議狀態(tài)(例如,MESI協(xié)議狀態(tài))。雖然僅被示為具有五個(gè)線路,但將顯而易見(jiàn)的是實(shí)際高速緩存器可具有更多線路。在本示例中,多鎖118被存儲(chǔ)在存儲(chǔ)器位置10、20、30和40中,其存在于不同的高速緩存器線路上。在圖2a中,這些線路中的某些存在于高速緩存器164、166、168、170中的某些中,具有各種MESI狀態(tài)。例如,存儲(chǔ)器位置10在高速緩存器164和166兩者中都處于共享(或‘S’)狀態(tài),存儲(chǔ)器位置20在高速緩存器166中處于無(wú)效(或‘I’)狀態(tài),存儲(chǔ)器位置30在高速緩存器168中處于獨(dú)有(或‘E’)狀態(tài),并且存儲(chǔ)器位置40在高速緩存器170中處于已修改(或‘M’ )狀態(tài)。雖然本示例中的標(biāo)記字段可意指全關(guān)聯(lián)高速緩存器,但在這里這是為了描述的簡(jiǎn)化起見(jiàn)而提出的;其他類型的高速緩存器(例如,組關(guān)聯(lián))在本公開(kāi)的范圍內(nèi)。
[0019]示出了高速緩存器位置的示例性內(nèi)容,諸如“小狗(puppy)”或數(shù)字pi,各種存儲(chǔ)器位置處于不同的MESI狀態(tài)。這些內(nèi)容是示例性的,并且在圖2b-2i中,將為了簡(jiǎn)單起見(jiàn)而省略與本討論無(wú)關(guān)的高速緩存線的細(xì)節(jié)。無(wú)效狀態(tài)下的高速緩存線被示為哈希值,因?yàn)殡m然那些高速緩存線確實(shí)包含數(shù)據(jù),但數(shù)據(jù)并不是根據(jù)MESI協(xié)議而相關(guān)的。在圖2a中,多鎖118表示處理單元156、158、160、162中沒(méi)有一個(gè)正在從與多鎖118相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取或向其寫(xiě)入(即,所有子鎖的寫(xiě)部分包含‘N’且讀部分計(jì)數(shù)器為零)。下面將更詳細(xì)地解釋附加附圖標(biāo)記。
[0020]在圖2b中所示的示例中,處理單元156期望獲取多鎖118的寫(xiě)部分以向與多鎖118相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入。處理單元156首先測(cè)試其子鎖的讀部分以確保計(jì)數(shù)器處于零(即,不存在讀取器)并將寫(xiě)部分設(shè)置成‘Y’以獲取子鎖的寫(xiě)部分。存儲(chǔ)子鎖的高速緩存線202被設(shè)置成已修改狀態(tài),因?yàn)樽渔i已被修改且未被寫(xiě)回到共享存儲(chǔ)器(例如,存儲(chǔ)器116)。另外,處理單元156向高速緩存器166產(chǎn)生相干性業(yè)務(wù)以使存儲(chǔ)器位置10的其先前共享拷貝無(wú)效。然而,處理單元156可另外獲取所有其他處理單元子鎖的寫(xiě)部分,使得那些處理單元158、160、162不能向與多鎖118相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入。
[0021]在圖2c之前,處理單元156不包含在其高速緩存器164中存儲(chǔ)在存儲(chǔ)器位置20處的子鎖。因此,在圖2c中,處理單元156用存儲(chǔ)在存儲(chǔ)器位置20處的子鎖來(lái)填充高速緩存線204,并且由于未獲取讀部分而將寫(xiě)部分設(shè)置成‘V以獲取該子鎖的寫(xiě)部分。類似于上文,高速緩存線204被設(shè)置成已修改狀態(tài)。另外,處理單元156在其高速緩存器164中不包含存儲(chǔ)在存儲(chǔ)器位置30處的子鎖。
[0022]在圖2d中,處理單元156用存儲(chǔ)在存儲(chǔ)器位置30處的子鎖來(lái)填充高速緩存線206,并且由于未獲取讀部分而將寫(xiě)部分設(shè)置成‘V以獲取該子鎖的寫(xiě)部分。另外,處理單元156向高速緩存器168產(chǎn)生相干性業(yè)務(wù)以使存儲(chǔ)器位置30的其拷貝無(wú)效。圖2e同樣地進(jìn)行,除關(guān)于存儲(chǔ)在存儲(chǔ)器位置40處的子鎖被加載到高速緩存線208之外。處理單元156向高速緩存器170產(chǎn)生相干性業(yè)務(wù)以使存儲(chǔ)器位置40的其拷貝無(wú)效。因此,在這里,處理單元156已發(fā)布四個(gè)相干性業(yè)務(wù)動(dòng)作:其已選中存儲(chǔ)器位置10、30和40的拷貝,并且其必須執(zhí)行用于存儲(chǔ)器位置20的填充(即,從共享存儲(chǔ)器116帶來(lái)存儲(chǔ)器位置20)。結(jié)果,處理單元156已獲取多鎖118的寫(xiě)部分,并可向關(guān)聯(lián)數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入,而其他處理單元158、160、162不能向關(guān)聯(lián)數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入,因?yàn)槊總€(gè)子鎖的寫(xiě)部分被處理單元156保持。
[0023]在圖2f中,處理單元156通過(guò)將高速緩存器164中的子鎖的所有寫(xiě)部分設(shè)置成‘N’來(lái)釋放多鎖118的寫(xiě)部分。在某些情況下,其他處理單元可能正在“等待”獲取讀取或?qū)懭腈i,在這種情況下將在處理單元156釋放多鎖118的寫(xiě)部分之后獲取那些鎖。然而,在圖2f的示例性情況下,不存在其他處理單元的競(jìng)爭(zhēng)或等待。
[0024]現(xiàn)在轉(zhuǎn)到圖2g,假設(shè)處理單元156期望獲取存儲(chǔ)在存儲(chǔ)器位置10處的子鎖的讀部分。這可例如由于線程在需要從與多鎖118相關(guān)聯(lián)的共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的處理單元156上執(zhí)行而發(fā)生。處理單元156確定其子鎖被存儲(chǔ)在存儲(chǔ)器位置10處。此線路在高速緩存器164中已處于已修改狀態(tài),并且因此處理單元156將高速緩存線202加上2 (B卩,將計(jì)數(shù)器增加1,因?yàn)樵诒臼纠?,使用低位作為子鎖的寫(xiě)部分)。不產(chǎn)生選中(例如,通知其他高速緩存器單元不能再認(rèn)為其所保持的高速緩存線的拷貝是最新的)或其他相干性業(yè)務(wù),因?yàn)楦咚倬彺婢€202處于已修改狀態(tài)。
[0025]在圖2h中,處理單元158期望獲取存儲(chǔ)在存儲(chǔ)器位置20處的子鎖的讀部分。如上所述,這可由于線程在需要從與多鎖118相關(guān)聯(lián)的共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的處理單元158上執(zhí)行而發(fā)生。處理單元158確定其子鎖被存儲(chǔ)在存儲(chǔ)器位置20處。如圖2f中所示,高速緩存器166包含存儲(chǔ)器位置20的拷貝,但是該特定高速緩存線210先前處于無(wú)效狀態(tài),其促使處理單元158從共享存儲(chǔ)器116填充高速緩存線。因此,處理單元158產(chǎn)生相干性業(yè)務(wù)以選中高速緩存器164中的存儲(chǔ)器位置20的拷貝。在某些情況下,此高速緩存線的拷貝可處于共享狀態(tài)達(dá)到瞬態(tài)時(shí)間段,因?yàn)楦咚倬彺嫫?64、166兩者在高速緩存器164中的拷貝被選中之前包含拷貝。如果高速緩存器164、166、168、170采用MERSI協(xié)議而不是所述的MESI協(xié)議,則高速緩存線可瞬態(tài)地處于最新?tīng)顟B(tài)。在高速緩存器164中的存儲(chǔ)器位置20的拷貝被選中之后,高速緩存器166中的拷貝處于已修改狀態(tài),如圖2h中所示。處理單元158已成功地獲取讀鎖,因?yàn)槠渥渔i的讀部分被增加且其子鎖的寫(xiě)部分為‘N’。
[0026]最后,圖2i示出了處理單元156釋放其讀鎖的結(jié)果。在這里,作為將高速緩存線202上的存儲(chǔ)器位置10的拷貝增加2的替代,處理單元156減去2。處理單元156不執(zhí)行選中或其他相干性操作,因?yàn)楦咚倬彺婢€202處于已修改狀態(tài)。
[0027]因此,根據(jù)本公開(kāi)的各種示例,在不存在中間寫(xiě)鎖的情況下,獲取讀鎖不要求附加相干性業(yè)務(wù)。在不要求寫(xiě)鎖的情況下,例如,處理單元156將不會(huì)產(chǎn)生相干性業(yè)務(wù),因?yàn)楦咚倬彺嫫?64在已修改狀態(tài)下包含對(duì)應(yīng)于處理單元156的子鎖的存儲(chǔ)器位置10,并且讀鎖定程序不影響任何其他處理單元158、160、162的關(guān)聯(lián)子鎖。雖然寫(xiě)鎖通常使其他高速緩存器無(wú)效,但讀鎖僅使先前寫(xiě)入器的高速緩存器無(wú)效,并且僅需要這樣做一次,減少了與相干性業(yè)務(wù)相關(guān)聯(lián)的帶寬成本。
[0028]在其中將MESI協(xié)議用于高速緩存相干性的情況下,如果存儲(chǔ)子鎖的高速緩存線處于已修改或獨(dú)有狀態(tài)(即,高速緩存器中的拷貝是可私人修改的),則子鎖的讀部分的獲取未被傳送到其他處理單元。如果與高速緩存器相關(guān)聯(lián)的處理單元可以在不需要將修改傳送至其他處理單元(例如,以選中的方式)的情況下修改拷貝,則該高速緩存器中的拷貝是私人可修改的。然而,如上文所解釋的,如果高速緩存線處于共享狀態(tài)(即,在這種情況下,高速緩存器中的拷貝不是私人可修改的,因?yàn)槌伺c在所述高速緩存線存儲(chǔ)的子鎖相關(guān)聯(lián)之外的處理單元可修改所述子鎖),則向其他高速緩存器發(fā)布包含存儲(chǔ)器位置的拷貝的選中,并將高速緩存線更新成已修改狀態(tài)。在選中發(fā)生之后,讀鎖的附加獲取不引起相干性業(yè)務(wù),因?yàn)楦咚倬彺婢€現(xiàn)在處于已修改狀態(tài)。
[0029]如果高速緩存線處于無(wú)效狀態(tài),則從存儲(chǔ)器116加載子鎖并置于已修改狀態(tài),并向任何其他單元的高速緩存器發(fā)布存儲(chǔ)該子鎖的拷貝的選中,引起相干性業(yè)務(wù)。與上述類似,附加讀操作不引起相干性業(yè)務(wù),因?yàn)榘渔i的高速緩存線處于已修改狀態(tài)。處理單元嘗試獲取其中包含其子鎖的高速緩存線處于已修改或獨(dú)有狀態(tài)(其中,不產(chǎn)生相干性業(yè)務(wù))的讀鎖的次數(shù)通常在數(shù)量上大大地超過(guò)了其中包含其子鎖的高速緩存線處于共享或無(wú)效狀態(tài)的實(shí)例。情況常常如此,因?yàn)樘幚韱卧蓮耐粩?shù)據(jù)結(jié)構(gòu)讀取許多次而沒(méi)有由它或另一處理單元進(jìn)行的中間寫(xiě)入。此外,由獲取寫(xiě)鎖引起的相干性業(yè)務(wù)的適度增加(例如,因?yàn)楸仨毇@取所有子鎖的寫(xiě)部分)也被獲取讀鎖時(shí)的相干性業(yè)務(wù)的缺乏超過(guò),其中,包含子鎖的高速緩存線處于已修改或獨(dú)有狀態(tài)。
[0030]返回參考圖la,數(shù)據(jù)訪問(wèn)控制引擎106、108是編程和用以執(zhí)行編程的硬件的組合。雖然被示為單件的軟件編程,但數(shù)據(jù)訪問(wèn)控制引擎106、108可包括以合作方式執(zhí)行的多件軟件編程。例如,參考數(shù)據(jù)訪問(wèn)控制引擎106,數(shù)據(jù)訪問(wèn)控制引擎106確定其處理單元102的關(guān)聯(lián)子鎖的私人可修改拷貝是否存在于關(guān)聯(lián)高速緩存器110中。例如,在已修改或獨(dú)有狀態(tài)下可將子鎖的私人可修改拷貝存儲(chǔ)在高速緩存線上。如果存在子鎖的私人可修改拷貝,數(shù)據(jù)訪問(wèn)控制引擎106獲取子鎖的讀部分且不跨相干性總線114傳送該獲取,因?yàn)樽x鎖的獲取不影響任何其他處理單元的關(guān)聯(lián)子鎖。因此,不產(chǎn)生相干性業(yè)務(wù)。然而,如果子鎖的私人可修改拷貝不存在,則數(shù)據(jù)訪問(wèn)控制引擎將適當(dāng)?shù)淖渔i從共享存儲(chǔ)器116加載到高速緩存器110中并獲取該子鎖的讀部分。
[0031]現(xiàn)在參考圖3,根據(jù)本公開(kāi)的各種示例示出了數(shù)據(jù)訪問(wèn)控制系統(tǒng)300。數(shù)據(jù)訪問(wèn)控制系統(tǒng)300包括被耦合到處理資源304的存儲(chǔ)器資源302。處理資源304是一個(gè)或多個(gè)本地或分布式處理器。存儲(chǔ)器資源302包括一個(gè)或多個(gè)本地或分布式存儲(chǔ)器設(shè)備且包括數(shù)據(jù)訪問(wèn)控制模塊306。因此,存儲(chǔ)器資源302和處理資源304是系統(tǒng)300的硬件部件。
[0032]數(shù)據(jù)訪問(wèn)控制模塊306表示在被處理資源304執(zhí)行時(shí)實(shí)現(xiàn)關(guān)聯(lián)引擎的指令。例如,當(dāng)由處理資源304來(lái)執(zhí)行數(shù)據(jù)訪問(wèn)控制模塊306時(shí),實(shí)現(xiàn)上述數(shù)據(jù)訪問(wèn)控制引擎106功能。還可將數(shù)據(jù)訪問(wèn)控制模塊306實(shí)現(xiàn)為安裝包或存儲(chǔ)在存儲(chǔ)器資源302上的包,所述存儲(chǔ)器資源302可以是CD/DVD或可從其下載安裝包的服務(wù)器。
[0033]圖4示出了根據(jù)本公開(kāi)的各種示例的用于控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的方法400。方法400在方框402中從存儲(chǔ)多鎖以控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)開(kāi)始。多鎖包括與第一處理單元102相關(guān)聯(lián)的第一子鎖120和與第二處理單元104相關(guān)聯(lián)的第二子鎖122。子鎖120、122中的每一個(gè)具有讀部分和寫(xiě)部分。方法400在方框404中以從第一處理單元102接收從數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的請(qǐng)求繼續(xù)。方法400然后在方框406中以確定在專用于第一處理單元102的第一高速緩存器110中是否存在第一子鎖120的私人可修改拷貝繼續(xù)。如上文所解釋的,可存在私人可修改拷貝,其中,存儲(chǔ)第一子鎖120的拷貝的高速緩存線處于已修改或獨(dú)有狀態(tài)。
[0034]該方法在方框408中以如果在第一高速緩存器110中存在第一子鎖120的私人可修改拷貝,則獲取第一子鎖120的讀部分(例如,通過(guò)將對(duì)應(yīng)于讀部分的計(jì)數(shù)器遞增)且不跨第一高速緩存器110與專用于第二處理單元104的第二高速緩存器112之間的相干性總線114傳送該獲取繼續(xù)。因此,跨相干性總線114不產(chǎn)生相干性業(yè)務(wù),其中,處理單元獲取存儲(chǔ)在私人可修改高速緩存線(例如,處于已修改或獨(dú)有狀態(tài)的高速緩存線)上的子鎖的讀部分。方法400進(jìn)一步在方框410中以如果在第一高速緩存器110中沒(méi)有拷貝,則將第一子鎖120加載到第一高速緩存器110中且如果在第一高速緩存器110中不存在第一子鎖120的私人可修改拷貝,則獲取子鎖120的讀部分繼續(xù)(例如,如果存儲(chǔ)第一子鎖120的拷貝的高速緩存器處于共享或無(wú)效狀態(tài)或者不存在存儲(chǔ)第一子鎖120的拷貝的高速緩存線的話)。在其中第一子鎖120處于共享狀態(tài)的情況下,則可不必將第一子鎖120的拷貝加載到第一高速緩存器110,而在其中第一子鎖120處于無(wú)效狀態(tài)的其他情況下,可從共享存儲(chǔ)器116加載第一子鎖120的拷貝。在某些情況下,可涉及到相干性業(yè)務(wù),例如以向存儲(chǔ)所獲取子鎖120的私人可修改拷貝的另一處理單元的高速緩存器發(fā)布選中。
[0035]如上文所解釋的,處理單元嘗試獲取其中包含其子鎖的高速緩存線處于已修改或獨(dú)有狀態(tài)(其中,不產(chǎn)生相干性業(yè)務(wù))的讀鎖的次數(shù)通常大于其中包含其子鎖的高速緩存線處于共享或無(wú)效狀態(tài)的實(shí)例。情況常常如此,因?yàn)樘幚韱卧蓮耐粩?shù)據(jù)結(jié)構(gòu)讀取許多次而沒(méi)有由它或另一處理單元進(jìn)行的中間寫(xiě)入。此外,由獲取寫(xiě)鎖引起的相干性業(yè)務(wù)的適度增加(例如,因?yàn)楸仨毇@取所有子鎖的寫(xiě)部分)也被在獲取讀鎖時(shí)的相干性業(yè)務(wù)的減少超過(guò),其中,包含子鎖的高速緩存線處于已修改或獨(dú)有狀態(tài)。
[0036]在本公開(kāi)的某些示例中,特別是在采用MESI高速緩存相干性協(xié)議的情況下,應(yīng)將每個(gè)處理單元的子鎖存儲(chǔ)在不同的高速緩存線上。這是因?yàn)镸ESI相干性方案是基于高速緩存線的,并且因此將用于多個(gè)處理單元的子鎖存儲(chǔ)在單個(gè)高速緩存線上將導(dǎo)致關(guān)于單個(gè)子鎖的狀態(tài)(例如,Μ、E、S或I)的混亂??刹捎貌煌拇虬椒▉?lái)將一個(gè)處理單元的子鎖存儲(chǔ)在單個(gè)高速緩存線上,其可基于子鎖的尺寸而改變。另外,在采用不同高速緩存相干性協(xié)議的情況下,可不需要使高速緩存線僅限于包含屬于一個(gè)處理單元的子鎖。
[0037]圖5示出了根據(jù)本公開(kāi)的某些示例的示例性子鎖打包方案。如上文所解釋的,確保不超過(guò)一個(gè)處理單元在單個(gè)高速緩存線上存儲(chǔ)子鎖可能是有利的。頂部示例502示出了兩個(gè)高速緩存線,每個(gè)存儲(chǔ)用于一個(gè)處理單元的讀/寫(xiě)鎖且具有未使用空間的一部分。這是其中讀/寫(xiě)鎖的尺寸小于高速緩存線的尺寸的簡(jiǎn)單示例。接下來(lái)的示例504示出了連續(xù)高速緩存線,其中每個(gè)其他高速緩存線存儲(chǔ)用于兩個(gè)處理單元中的一個(gè)的多個(gè)鎖。第一高速緩存線存儲(chǔ)用于核I的兩個(gè)不同鎖,第二高速緩存線存儲(chǔ)用于核2的兩個(gè)不同鎖,第三高速緩存線存儲(chǔ)用于核I的兩個(gè)不同鎖等等。底部示例506示出了示例504的變化,但是其中,每個(gè)第二高速緩存線存儲(chǔ)用于兩個(gè)處理單元中的一個(gè)的兩個(gè)不同鎖。第一和第二高速緩存線存儲(chǔ)用于核I的不同鎖,第三和第四高速緩存線存儲(chǔ)用于核2的不同鎖等等。以上僅僅是示例性的,并且許多不同的子鎖打包方案在本公開(kāi)的范圍內(nèi)。
[0038]以上討論意圖說(shuō)明本發(fā)明的原理和各種示例。在全面地認(rèn)識(shí)到以上公開(kāi)時(shí),許多變更和修改將變得對(duì)于本領(lǐng)域的技術(shù)人員而言顯而易見(jiàn)。例如,雖然一般地相對(duì)于MESI高速緩存相干性協(xié)議(也稱為“Illinois協(xié)議”)來(lái)描述,但以上公開(kāi)可適合于許多其他高速緩存相干性協(xié)議。某些示例可采用更簡(jiǎn)單的“MSI”協(xié)議或相關(guān)MOS1、MOES1、MERSI以及MESIF協(xié)議(作為其他相關(guān)協(xié)議的示例)。在某些情況下,“M或E”狀態(tài)可指的是其中高速緩存相干性協(xié)議可在不通知其他協(xié)議參與者的情況下修改高速緩存線的那些狀態(tài);在一個(gè)示例中,可以認(rèn)為MERSI協(xié)議的“R”狀態(tài)類似于已修改或E。同樣地,可以認(rèn)為MESIF協(xié)議的F狀態(tài)類似于共享狀態(tài),因?yàn)槠湟笸ㄖ渌麉⑴c者,其全部是出于以下討論的目的。
[0039]作為另一示例,已一般地將獲取讀鎖描述為遞增計(jì)數(shù)器,然而,可以許多方式來(lái)實(shí)現(xiàn)獲取讀鎖(例如,使用操作,諸如獲取和相加、比較并交換、測(cè)試和設(shè)定、比較和“0P”、獲取和0P、原子謂詞和op、futex運(yùn)算;使用數(shù)據(jù)結(jié)構(gòu),諸如輪流和票計(jì)數(shù)器、位組、等待線程列表)以用信號(hào)通知其他處理單元特定處理單元當(dāng)前正在從共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取。此外,已將讀/寫(xiě)鎖描述為分別地使用計(jì)數(shù)器和單個(gè)位來(lái)體現(xiàn)同一存儲(chǔ)器字內(nèi)的讀和寫(xiě)子部分,但可以有替換實(shí)施方式(例如,兩個(gè)計(jì)數(shù)器、位運(yùn)算、多個(gè)字、列表)。意圖在于將以下權(quán)利要求解釋為包括所有此類變更和修改。
【權(quán)利要求】
1.一種用于控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的計(jì)算機(jī)系統(tǒng),包括: 第一處理單元,被耦合到專用于第一處理單元的第一高速緩存器; 第二處理單元,被耦合到專用于第二處理單元的第二高速緩存器; 共享存儲(chǔ)器,被耦合到第一和第二處理單元,存儲(chǔ)多鎖以控制對(duì)被第一和第二處理單元共享的數(shù)據(jù)結(jié)構(gòu)的訪問(wèn),多鎖包括與第一處理單元相關(guān)聯(lián)的第一子鎖和與第二處理單元相關(guān)聯(lián)的第二子鎖,子鎖包括讀部分和寫(xiě)部分; 相干性總線,將第一和第二高速緩存器耦合并在第一和第二高速緩存器之間載送相干性信息;以及 數(shù)據(jù)訪問(wèn)控制引擎,用以從第一處理單元接收用以從數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的請(qǐng)求,并且作為結(jié)果: 確定在第一高速緩存器中是否存在第一子鎖的私人可修改拷貝; 如果在第一高速緩存器中存在第一子鎖的私人可修改拷貝,則獲取第一子鎖的讀部分且不跨相干性總線傳送該獲?。灰约? 如果在第一高速緩存器中不存在第一子鎖的私人可修改拷貝,則在第一高速緩存器中沒(méi)有拷貝的情況下將第一子鎖加載到第一高速緩存器中,選中第一子鎖的其他拷貝,并獲取第一子鎖的讀部分。
2.權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,所述相干性總線載送實(shí)現(xiàn)MESI高速緩存相干性協(xié)議的相干性信息。
3.權(quán)利要求2所述的計(jì)算機(jī)系統(tǒng),其中,如果將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于已修改或獨(dú)有狀態(tài),則第一子鎖的拷貝是私人可修改的。
4.權(quán)利要求2所述的計(jì)算機(jī)系統(tǒng),其中,如果將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于共享或無(wú)效狀態(tài)或者不存在將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線,則第一子鎖的拷貝不是私人可修改的,并且其中,如果將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于共享狀態(tài),則在相干性總線上向第二高速緩存器發(fā)布選中并獲取第一子鎖的讀部分。
5.權(quán)利要求2所述的計(jì)算機(jī)系統(tǒng),其中,所述數(shù)據(jù)訪問(wèn)控制引擎還被配置成從第一處理單元接收用以向共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入的請(qǐng)求,并且作為結(jié)果,針對(duì)多鎖的每個(gè)子鎖: 如果讀部分指示不存在已獲取子鎖的讀部分的處理單元且將子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于已修改或獨(dú)有狀態(tài),則獲取子鎖的寫(xiě)部分; 如果讀部分指示不存在已獲取子鎖的讀部分的處理單元且將子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于共享狀態(tài),則獲取子鎖的寫(xiě)部分并向除第一高速緩存器之外的高速緩存器發(fā)布選中;以及 如果在第一高速緩存器中不存在子鎖的私人可修改拷貝,則在第一高速緩存器中沒(méi)有拷貝的情況下將子鎖加載到第一高速緩存器中,獲取子鎖的寫(xiě)部分,并且如果讀部分指示不存在已獲取子鎖的讀部分的處理單元、則向除第一高速緩存器之外的高速緩存器發(fā)布選中。
6.權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中,當(dāng)從共享存儲(chǔ)器將第一子鎖加載到第一高速緩存器中時(shí),在相干性總線上向第二高速緩存器發(fā)布選中。
7.一種用于控制對(duì)共享數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)的方法,包括: 存儲(chǔ)多鎖以控制對(duì)數(shù)據(jù)結(jié)構(gòu)的訪問(wèn),多鎖包括與第一處理單元相關(guān)聯(lián)的第一子鎖和與第二處理單元相關(guān)聯(lián)的第二子鎖,每個(gè)子鎖包括讀部分和寫(xiě)部分; 從第一處理單元接收用以從數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的請(qǐng)求; 確定在專用于第一處理單元的第一高速緩存器中是否存在第一子鎖的私人可修改拷貝; 如果在第一高速緩存器中存在第一子鎖的私人可修改拷貝,則獲取第一子鎖的讀部分且不跨第一高速緩存器與專用于第二處理單元的第二高速緩存器之間的相干性總線傳送該獲?。灰约? 如果在第一高速緩存器中沒(méi)有拷貝,則將第一子鎖加載到第一高速緩存器中,并且如果在第一高速緩存器中不存在第一子鎖的私人可修改拷貝,則獲取第一子鎖的讀部分。
8.權(quán)利要求7所述的方法,其中,所述相干性總線載送實(shí)現(xiàn)MESI高速緩存相干性協(xié)議的相干性信息。
9.權(quán)利要求8所述的方法,其中,如果將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于已修改或獨(dú)有狀態(tài),則第一子鎖的拷貝是私人可修改的。
10.權(quán)利要求8所述的方法,其中,如果將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于共享或無(wú)效狀態(tài)或者不存在將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線,則第一子鎖的拷貝不是私人可修改的,并且其中,如果將第一子鎖存儲(chǔ)在第一高速緩存器中的高速緩存器處于共享狀態(tài),則所述方法還包括在相干性總線上向第二高速緩存器發(fā)布選中并獲取第一子鎖的讀部分。
11.權(quán)利要求8所述的方法,還包括從第一處理單元接收用以向數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入的請(qǐng)求,并且作為結(jié)果,針對(duì)多鎖的每個(gè)子鎖: 如果讀部分指示不存在已獲取子鎖的讀部分的處理單元且將子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于已修改或獨(dú)有狀態(tài),則獲取子鎖的寫(xiě)部分; 如果讀部分指示不存在已獲取子鎖的讀部分的處理單元且將子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于共享狀態(tài),則獲取子鎖的寫(xiě)部分并向除第一高速緩存器之外的高速緩存器發(fā)布選中;以及 如果在第一高速緩存器中不存在子鎖的私人可修改拷貝,則在第一高速緩存器中沒(méi)有拷貝的情況下將子鎖加載到第一高速緩存器中,獲取子鎖的寫(xiě)部分,并且如果讀部分指示不存在已獲取子鎖的讀部分的處理單元、則向除第一高速緩存器之外的高速緩存器發(fā)布選中。
12.權(quán)利要求7所述的方法,還包括當(dāng)從共享存儲(chǔ)器將第一子鎖加載到第一高速緩存器中時(shí),在相干性總線上向第二高速緩存器發(fā)布選中。
13.一種存儲(chǔ)軟件的非臨時(shí)計(jì)算機(jī)可讀存儲(chǔ)設(shè)備,該軟件在被包括相干性總線的處理器執(zhí)行時(shí)促使處理器: 存儲(chǔ)多鎖以控制對(duì)數(shù)據(jù)結(jié)構(gòu)的訪問(wèn),多鎖包括與第一處理單元相關(guān)聯(lián)的第一子鎖和與第二處理單元相關(guān)聯(lián)的第二子鎖,每個(gè)子鎖包括讀部分和寫(xiě)部分; 從第一處理單元接收用以從數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取的請(qǐng)求; 確定在專用于第一處理單元的第一高速緩存器中是否存在第一子鎖的私人可修改拷貝; 如果在第一高速緩存器中存在第一子鎖的私人可修改拷貝,則獲取第一子鎖的讀部分并且不將該獲取傳送至專用于第二處理單元的第二高速緩存器;以及 如果在第一高速緩存器中沒(méi)有拷貝,則將第一子鎖加載到第一高速緩存器中,并且如果在第一高速緩存器中不存在第一子鎖的私人可修改拷貝,則獲取第一子鎖的讀部分。
14.權(quán)利要求13所述的非臨時(shí)計(jì)算機(jī)可讀存儲(chǔ)設(shè)備,其中,所述相干性總線載送實(shí)現(xiàn)MESI高速緩存相干性協(xié)議的相干性信息。
15.權(quán)利要求14所述的非臨時(shí)計(jì)算機(jī)可讀存儲(chǔ)設(shè)備,其中,所述處理器從第一處理單元接收用以向數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫(xiě)入的請(qǐng)求,并且作為結(jié)果,針對(duì)多鎖的每個(gè)子鎖: 如果讀部分指示不存在已獲取子鎖的讀部分的處理單元且將子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于已修改或獨(dú)有狀態(tài),則獲取子鎖的寫(xiě)部分; 如果讀部分指示不存在已獲取子鎖的讀部分的處理單元且將子鎖存儲(chǔ)在第一高速緩存器中的高速緩存線處于共享狀態(tài),則獲取子鎖的寫(xiě)部分并向除第一高速緩存器之外的高速緩存器發(fā)布選中;以及 如果在第一高速緩存器中不存在子鎖的私人可修改拷貝,則在第一高速緩存器中沒(méi)有拷貝的情況下將子鎖加載到第一高速緩存器中,獲取子鎖的寫(xiě)部分,并且如果讀部分指示不存在已獲取子鎖的讀部分的處理單元、則向除第一高速緩存器之外的高速緩存器發(fā)布選中。
【文檔編號(hào)】G06F13/14GK104508645SQ201280075064
【公開(kāi)日】2015年4月8日 申請(qǐng)日期:2012年7月31日 優(yōu)先權(quán)日:2012年7月31日
【發(fā)明者】A. 圖塞克 J. 申請(qǐng)人:惠普發(fā)展公司,有限責(zé)任合伙企業(yè)