亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于工作項(xiàng)同步的方法和系統(tǒng)的制作方法

文檔序號:6496989閱讀:164來源:國知局
用于工作項(xiàng)同步的方法和系統(tǒng)的制作方法
【專利摘要】公開了用于使一個或多個處理器上的工作項(xiàng)同步的方法、系統(tǒng)和計算機(jī)程序產(chǎn)品實(shí)施方案。實(shí)施方案包括:通過來自所述組的第一工作項(xiàng)執(zhí)行屏障跳越指令;以及響應(yīng)于所執(zhí)行的屏障跳越指令,重新配置屏障以使來自所述組的其它工作項(xiàng)在序列中的多個點(diǎn)上同步,而不要求第一工作項(xiàng)在多個點(diǎn)中的任一個上到達(dá)屏障。
【專利說明】用于工作項(xiàng)同步的方法和系統(tǒng)
發(fā)明背景發(fā)明領(lǐng)域
[0001 ] 本發(fā)明大致涉及工作項(xiàng)同步。
【背景技術(shù)】
[0002]圖形處理單元(GPU)通常包括理想地適合于在并行數(shù)據(jù)流上執(zhí)行相同的指令的多個處理元件,如在單指令多數(shù)據(jù)(SMD)設(shè)備中的情況或在數(shù)據(jù)并行處理中的。在很多計算模型中,中央處理單元(CPU)起主機(jī)或控制處理器的作用,并不干涉其它處理器(例如GPU)的專用函數(shù),例如圖形處理。
[0003]多核CPU(其中每個CPU具有多個處理核心)為與在GPU上可用的那些函數(shù)類似的專用函數(shù)(例如圖形處理)提供處理能力。多核CPU或GPU的一個或多個計算核心可以是同一裸片(例如AMDFusion?)的部分,或可選地在不同的裸片(例如具有NVIDIAGPU的 IntelXeon?)中。最近,具有 CPU 和 GPU(例如 CellSPE?、IntelLarrabee?)兩者的特征的混合核心被提出,用于通用GPU(GPGPU)型計算。GPGPU型的計算主張使用CPU來主要執(zhí)行控制代碼并將性能關(guān)鍵數(shù)據(jù)-并行代碼卸載到GPU。GPU主要用作加速器。多核CPU和GPGPU計算模型的組合包括CPU核心和作為加速器目標(biāo)的GPU核心兩者。很多多核CPU核心具有在很多領(lǐng)域中與GPU可比較的性能。
[0004]為具有CPU和GPU的異構(gòu)計算平臺開發(fā)了幾個框架。這些框架包括斯坦福大學(xué)的BrookGPU.NVIDIA的計算統(tǒng)一設(shè)備架構(gòu)(CUDA)和被稱為科納斯組織的行業(yè)協(xié)會的OpenCL。OpenCL框架提供用戶可創(chuàng)建用于GPU的應(yīng)用的C型開發(fā)環(huán)境。OpenCL使用戶能夠例如指定用于將一些計算(例如數(shù)據(jù)-并行計算)卸載到GPU的指令。OpenCL也提供編譯器和運(yùn)行時間環(huán)境,其中代碼可在異構(gòu)或其它計算系統(tǒng)內(nèi)被編譯并執(zhí)行。
[0005]由OpenCUCUDA和很多低級GPU中間語言體現(xiàn)的計算模型有時被稱為單指令多線程(“SMT”)。在SMT模型的頻繁使用的實(shí)施中,使用在矢量上的硬件掩模組的SMD執(zhí)行用于模擬比在硬件中可獲得的更精細(xì)粒度的線程。
[0006]為了有效地利用計算模型(其中CPU和GPU都可用于很多類型的代碼的執(zhí)行),很多靈活的線程同步模型是需要的。當(dāng)與不是傳統(tǒng)圖形處理任務(wù)的工作項(xiàng)一起使用時,在OpenCL中可用的常規(guī)工作項(xiàng)同步例如可能效率較低。例如,盡管在圖形處理任務(wù)中的各自并發(fā)性工作項(xiàng)可能常常沒有歧異,但是在CPU相關(guān)的應(yīng)用中,執(zhí)行的歧異可能相對較高。在OpenCL中提供的同步模型單獨(dú)地不足以處理工作項(xiàng)的這樣的動態(tài)行為。
[0007]在OpenCL中,在工作組內(nèi)的工作項(xiàng)可被同步。在工作組內(nèi),可發(fā)布屏障(barrier)指令,其具有下列語義:在工作組中的所有工作項(xiàng)必須在任何工作項(xiàng)可前進(jìn)而經(jīng)過屏障之前到達(dá)屏障?!捌琳稀弊钃醯竭_(dá)它的所有進(jìn)程,直到上面提到的語義被滿足。它接著釋放被阻擋的進(jìn)程以重新開始它們各自的處理。然而,在OpenCL和其它類似的常規(guī)框架中,在控制流中的屏障使用被嚴(yán)重限制。[0008]圖1A示出使用單個工作項(xiàng)(在圖1A中被稱為內(nèi)核(kernel))以將值加載到組共享存儲器空間中,其它工作項(xiàng)可從該存儲器空間得到加載的值。加載值的工作項(xiàng)以及工作組中的其它工作項(xiàng)被阻止越過屏障前進(jìn),直到組中的所有工作項(xiàng)都到達(dá)屏障。
[0009]將值加載到組共享存儲器中的上述操作也可從庫函數(shù)內(nèi)完成,從內(nèi)核代碼調(diào)用庫函數(shù)。圖1B示出包括屏障指令的庫函數(shù)。圖1C是調(diào)用庫函數(shù)的內(nèi)核。圖1C中的代碼示出阻擋調(diào)用相應(yīng)庫的所有工作項(xiàng)直到指定的工作項(xiàng)將數(shù)據(jù)加載到共享區(qū)域的操作。
[0010]圖1D示出一個示例,其中將對屏障的調(diào)用放置在庫內(nèi)部可導(dǎo)致不正確的操作。例如,調(diào)用包括來自具有條件(其中條件之一沒有對庫函數(shù)的調(diào)用)的內(nèi)核的屏障指令的庫函數(shù)可導(dǎo)致死鎖。這是因?yàn)槠琳现辉谝唤M的所有工作項(xiàng)都到達(dá)它時才釋放,然而一個或多個工作項(xiàng)(其條件未被滿足)將根本不到達(dá)屏障。
[0011]而且,在OpenCL的工作項(xiàng)同步框架中,執(zhí)行內(nèi)核的工作組中的工作項(xiàng)必須在任何工作項(xiàng)被允許繼續(xù)執(zhí)行之前執(zhí)行屏障指令。屏障指令必須被執(zhí)行內(nèi)核的工作組中的所有工作項(xiàng)遇到(即,在指令流中到達(dá))。如果屏障指令在條件語句內(nèi)部,則所有工作項(xiàng)必須進(jìn)入條件即任何工作項(xiàng)進(jìn)入條件語句并執(zhí)行屏障。如果屏障指令在循環(huán)內(nèi)部,則所有工作項(xiàng)必須在任何工作項(xiàng)被允許越過屏障繼續(xù)執(zhí)行之前針對循環(huán)的每次迭代執(zhí)行屏障指令。這些限制可限制系統(tǒng)和編程員最佳地利用處理資源的能力。
[0012]因此所需要的是實(shí)現(xiàn)工作項(xiàng)同步的更靈活和有效的使用的方法和系統(tǒng)。
實(shí)施方案概述
[0013]公開了用于工作項(xiàng)的更有效和靈活的調(diào)度的方法和系統(tǒng)。公開了使工作項(xiàng)指示它永久地離開同步組使得在該同步組中的工作項(xiàng)的執(zhí)行中出現(xiàn)的隨后屏障不等待已宣布從工作組離開的工作項(xiàng)的一種技術(shù)。公開了另一技術(shù),通過該技術(shù),工作項(xiàng)可再加入同步組,以便繼續(xù)與該組的其它工作項(xiàng)同步。所公開的技術(shù)可在各種情況下編程時在提高的處理效率和靈活性方面產(chǎn)生明顯的優(yōu)點(diǎn)。
[0014]所公開的方法、系統(tǒng)和計算機(jī)程序產(chǎn)品實(shí)施方案包括由來自組的第一工作項(xiàng)執(zhí)行屏障跳越指令并響應(yīng)于所執(zhí)行的屏障跳越指令而重新配置屏障以使來自該組的其它工作項(xiàng)在序列中的多個點(diǎn)上同步,而不要求第一工作項(xiàng)在多個點(diǎn)中的任一個上到達(dá)屏障。
[0015]下面參考附圖詳細(xì)描述本發(fā)明的另外的實(shí)施方案、特征和優(yōu)點(diǎn)以及本發(fā)明的各種實(shí)施方案的結(jié)構(gòu)和操作。
附圖/圖簡述
[0016]合并在說明書中并構(gòu)成說明書的部分的附圖示出本發(fā)明的實(shí)施方案,并連同上面給出的一般描述和下面給出的實(shí)施方案的詳細(xì)描述一起用來解釋本發(fā)明的原理。在附圖中:
[0017]圖1A-圖1D示出呈偽碼形式的常規(guī)屏障同步示例。
[0018]圖2A示出根據(jù)本發(fā)明的實(shí)施方案的屏障跳越指令(以偽碼形式)。
[0019]圖2B示出根據(jù)實(shí)施方案的具有使用庫調(diào)用的屏障跳越指令的內(nèi)核(以偽碼形式)。
[0020]圖3示出根據(jù)實(shí)施方案的屏障重置指令(以偽碼形式)。
[0021]圖4A-圖4C示出根據(jù)實(shí)施方案的屏障同步的示例性使用情況的偽碼范例。
[0022]圖5示出根據(jù)實(shí)施方案的幾個工作項(xiàng)隨著時間的示例性流。[0023]圖6示出根據(jù)實(shí)施方案的用于工作項(xiàng)同步的方法。
[0024]圖7示出根據(jù)實(shí)施方案的用于工作項(xiàng)同步的系統(tǒng)的方框圖。
[0025]圖8示出根據(jù)實(shí)施方案的工作項(xiàng)同步模塊的方框圖。
本發(fā)明的實(shí)施方案的詳細(xì)描述
[0026]雖然在本文使用特定應(yīng)用的說明性實(shí)施方案描述了本發(fā)明,但是應(yīng)理解,本發(fā)明不限于此??梢垣@得本文提供的教導(dǎo)的本領(lǐng)域中的技術(shù)人員將認(rèn)識到在本發(fā)明范圍和本發(fā)明將具有重要效用的另外領(lǐng)域內(nèi)的另外的修改、應(yīng)用和實(shí)施方案。
[0027]可在任何計算機(jī)系統(tǒng)、計算設(shè)備、娛樂系統(tǒng)、媒體系統(tǒng)、游戲系統(tǒng)、通信設(shè)備、個人數(shù)字助理或使用一個或多個處理器的任何系統(tǒng)中使用本發(fā)明的實(shí)施方案。在系統(tǒng)包括異構(gòu)計算系統(tǒng)的場合,本發(fā)明可能是特別有用的。如在本文使用的術(shù)語“異構(gòu)計算系統(tǒng)”是多種類型的處理器是可用的計算系統(tǒng)。
[0028]在GPU中,被分配到處理元件的工作項(xiàng)被稱為“工作組”。被發(fā)布用于并行執(zhí)行的兩個或多個工作項(xiàng)是“波前”。工作組可包括一個或多個波前。雖然主要關(guān)于使工作組的工作項(xiàng)同步描述了實(shí)施方案,但是本公開的教導(dǎo)可適用于使遍及任一個或多個處理器和/或訪問共享存儲器的進(jìn)程組的工作項(xiàng)同步。如本文使用的術(shù)語“內(nèi)核”指作為一個或多個工作項(xiàng)并行地執(zhí)行的、具有相同的編碼基數(shù)的程序和/或處理邏輯。應(yīng)注意,在一些實(shí)施方案中,術(shù)語“工作項(xiàng)”和“線程”是可互換的。在本公開中,“工作項(xiàng)”和“線程”的可互換性說明例如體現(xiàn)在實(shí)施方案中的模型中的工作項(xiàng)執(zhí)行的靈活模擬的或真實(shí)的獨(dú)立性。
[0029]本發(fā)明的實(shí)施方案可通過實(shí)現(xiàn)并發(fā)工作項(xiàng)之間的更有效和更靈活的同步來明顯提高系統(tǒng)的性能。在GPU、多核CPU或例如使用SIMD或SIMT框架執(zhí)行非常大數(shù)量的并發(fā)工作項(xiàng)的其它處理器中,實(shí)施方案通過使一些工作項(xiàng)能夠離開和/或再加入一組工作項(xiàng)來提高效率,這組工作項(xiàng)使其在指令流中的幾個點(diǎn)處的執(zhí)行同步。例如,當(dāng)特定的工作項(xiàng)不需要與同步組的其余部分的進(jìn)一步同步時,它可發(fā)布屏障跳越指令以從同步組永久地移除本身。
[0030]如果特定的工作項(xiàng)必須再次包括在同步工作組中,則屏障重置指令可隨后被發(fā)布。跳越指令實(shí)際上聲明相應(yīng)的工作項(xiàng)將不在屏障被重置之前的任何點(diǎn)到達(dá)屏障。重置指令允許同一屏障被重新使用。
[0031]通過使工作項(xiàng)能夠永久地跳越屏障,各種性能提高將實(shí)現(xiàn)。例如,編程靈活性明顯提高(如在圖2A-圖2B中示出的),因而允許更有效的代碼的創(chuàng)建。循環(huán)行為(特別是在具有大量并發(fā)工作項(xiàng)的系統(tǒng)中)也得到改進(jìn)。
[0032]例如,在常規(guī)系統(tǒng)(包括包含在屏障上的到達(dá)和等待操作的系統(tǒng))中,所有工作項(xiàng)都被包括屏障的循環(huán)阻擋,直到最長的迭代工作項(xiàng)完成其迭代。相反,在本發(fā)明的實(shí)施方案中,不需要與組的進(jìn)一步同步的工作項(xiàng)可退出循環(huán),而不引起系統(tǒng)中的死鎖。
[0033]處理速度的提高以及功率效率的提高被實(shí)現(xiàn)。
[0034]圖2示出一種函數(shù)(以偽碼形式),其中根據(jù)本發(fā)明的實(shí)施方案使用屏障跳越指令(例如b.skip())。已命名的屏障b被聲明,且跳越指令在離開條件循環(huán)之后被發(fā)布。在循環(huán)內(nèi),工作項(xiàng)等待b,直到規(guī)定的條件被滿足。
[0035]對應(yīng)于“theKernel”函數(shù)(在圖2A中示出)的所有工作項(xiàng)在循環(huán)中時可以不重復(fù)相同或相似數(shù)量的迭代。當(dāng)每個工作項(xiàng)離開循環(huán)時,跳越指令被發(fā)布?,F(xiàn)有工作項(xiàng)對跳越指令的發(fā)布向還沒有離開循環(huán)的其它工作項(xiàng)指示,現(xiàn)有工作項(xiàng)將不再到達(dá)屏障。因此,屏障可被重新配置以避免在當(dāng)前和隨后的示例中等待現(xiàn)有工作項(xiàng),直到至少被稱為“屏障重置”的另一指令被發(fā)布為止。例如,屏障可被重新配置,使得到達(dá)屏障所需的工作項(xiàng)的數(shù)量可減小以解釋現(xiàn)有的工作項(xiàng)。
[0036]在常規(guī)系統(tǒng)中,包括在循環(huán)內(nèi)的屏障函數(shù)(例如barrier O或barrier 0.wait)的工作項(xiàng)不能被有效地處理。例如,為了防止死鎖,必須迫使組中的所有工作項(xiàng)迭代相同的次數(shù),使得在每次迭代中,所有工作項(xiàng)都到達(dá)(或訪問)屏障。這樣的方法在工作項(xiàng)可能具有不同的執(zhí)行路徑的環(huán)境中將顯然是浪費(fèi)的。
[0037]另一常規(guī)同步指令是屏障到達(dá)。然而,到達(dá)指令只從當(dāng)前屏障釋放調(diào)用程序。例如,如果在圖2A中,跳越指令用到達(dá)指令代替,則屏障將仍然需要現(xiàn)有工作項(xiàng)在隨后的屏障實(shí)例中到達(dá)屏障。因此,到達(dá)指令不提供機(jī)制,工作項(xiàng)可通過該機(jī)制永久地從同步組移除本身。
[0038]圖2B是根據(jù)本發(fā)明的允許選定的工作項(xiàng)將數(shù)據(jù)拷貝到具有其它工作項(xiàng)的共享空間的、以偽碼形式的庫函數(shù)“l(fā)oadFunction”的圖示。庫函數(shù)包括對屏障等待指令(例如b.wait O)的兩個調(diào)用。這兩個屏障等待指令將由調(diào)用庫函數(shù)的任何工作項(xiàng)發(fā)布。
[0039]在圖2B中,當(dāng)規(guī)定的條件被滿足時,內(nèi)核函數(shù)“theKernel”調(diào)用laodFunction。否則,它發(fā)布跳越指令。
[0040]在條件(在圖2B中)的else部分中的跳越指令確保不滿足條件的所有工作項(xiàng)調(diào)用跳越指令。因此,未能滿足條件的所有工作項(xiàng)將從屏障的兩個隨后實(shí)例免除,且屏障實(shí)例將不等待這些工作項(xiàng)。在指令流中的屏障的實(shí)例可被稱為同步點(diǎn)。兩個同步點(diǎn)對應(yīng)于對庫函數(shù)中的屏障等待(b.waitO)的兩個調(diào)用。死鎖將不出現(xiàn),因?yàn)槊總€工作項(xiàng)調(diào)用loadFunction并從而在兩個同步點(diǎn)處到達(dá)屏障,或調(diào)用跳越指令,其使本身免于必須到達(dá)屏障的任何隨后實(shí)例。
[0041]相反,如果在圖2B中使用常規(guī)到達(dá)指令而不是跳越指令,則死鎖將出現(xiàn)。例如,雖然不滿足條件的每個工作項(xiàng)執(zhí)行到達(dá)指令,但是到達(dá)指令只從緊接的下一屏障免除發(fā)布工作項(xiàng)。發(fā)布工作項(xiàng)將被預(yù)期在第二同步點(diǎn)到達(dá)屏障,且因此死鎖將出現(xiàn)。
[0042]圖3是根據(jù)實(shí)施方案的屏障重置指令(例如b.reset)的使用的以偽碼形式的圖示。當(dāng)規(guī)定的條件被滿足時,內(nèi)核函數(shù)“theKernel”調(diào)用loadFunction,如圖2B所示。否貝1J,它發(fā)布跳越指令,后面是重置指令。
[0043]如上面關(guān)于圖2B描述的,跳越指令的發(fā)布確保未能滿足條件的所有工作項(xiàng)將從兩個隨后的同步點(diǎn)免除。在同步點(diǎn)處的屏障將不等待這些工作項(xiàng)。屏障重置指令將屏障重置到其原始配置。例如,雖然跳越指令實(shí)際上減小針對該屏障的同步組的尺寸,重置指令卻反轉(zhuǎn)由組中的工作項(xiàng)發(fā)布的任何前面的跳越指令的效應(yīng)。重置指令的實(shí)施要求任何未決的屏障在重置完成之前被同步。根據(jù)一些實(shí)施方案,屏障重置被實(shí)施為自同步指令,其使遍及所有工作項(xiàng)的同步點(diǎn)涉及到重置被應(yīng)用到的屏障實(shí)例中。在其它實(shí)施方案中,用戶可包括一個或多個同步點(diǎn)以確保在重置指令處的同步。圖4A是根據(jù)實(shí)施方案的具有獨(dú)立于其組尺寸的限定尺寸的屏障的使用的以偽碼形式的圖示。例如,具有原始同步組尺寸16的屏障b可被創(chuàng)建,而不考慮多少工作項(xiàng)在工作組中,從該工作組調(diào)用屏障。創(chuàng)建具有限定尺寸16的屏障b使在屏障b上調(diào)用等待指令的任何進(jìn)程能夠與在屏障b上同步的該組中的任何15個工作項(xiàng)同步。
[0044]具有限定尺寸的屏障可被創(chuàng)建用于一種應(yīng)用,其中已知只有特定數(shù)量的工作項(xiàng)將滿足限定的條件。以這種方式,如圖4A所示,滿足條件的工作項(xiàng)可在屏障b上同步,而其它工作項(xiàng)采用“else”路徑。因?yàn)槠琳现坏却凉M足條件的限定數(shù)量的工作項(xiàng),所以沒有死鎖條件出現(xiàn),且不滿足條件的工作項(xiàng)不需要發(fā)布跳越指令。
[0045]在圖4B的示例性圖示中,屏障用于使兩組工作項(xiàng)同步。一組滿足規(guī)定的條件??墒褂闷琳蟗l和b2來單獨(dú)地同步不滿足該條件的另一組。工作項(xiàng)屬于bl同步組或b2同步組,并可向它不屬于的組發(fā)布跳越指令。
[0046]在圖4C的示例性圖示中,使用以偽碼形式的分級屏障。滿足第一規(guī)定條件的工作項(xiàng)在屏障bl之后的等待指令上同步,而其它工作項(xiàng)跳越屏障bl。滿足第一規(guī)定條件的那些工作項(xiàng)遇到另一屏障b2。在遇到第二屏障b2的工作項(xiàng)中,滿足第二條件的那些工作項(xiàng)等待b2,其它工作項(xiàng)跳越b2。如在偽碼中所示的,基于屏障bl的當(dāng)前狀態(tài)來創(chuàng)建屏障b2。
[0047]更具體地,屏障b2的尺寸(S卩,b2強(qiáng)制同步的工作項(xiàng)的數(shù)量)由在bl之后不發(fā)布跳越指令的工作項(xiàng)的數(shù)量表示。在圖4C中,這個數(shù)字是滿足第一條件的工作項(xiàng)的數(shù)量。當(dāng)bl被跳越時,其它實(shí)施方案可能需要屏障更新b2的基礎(chǔ)實(shí)施。而且,為了避免可能在b2的更新中的一些情況中出現(xiàn)的競爭條件,可通過在bl跳越操作之前有同步點(diǎn)來保護(hù)bl跳越操作。
[0048]圖5是根據(jù)本發(fā)明的實(shí)施方案的幾個工作項(xiàng)T1、T2、T3和Τ4隨著時間的示例性流程500的圖示。如所示,Tl、Τ2、Τ3和Τ4并發(fā)性地或?qū)嵸|(zhì)上并發(fā)性地開始。在每個工作項(xiàng)中的第一屏障等待指令使它在同步點(diǎn)501同步。在同步點(diǎn)501的同步涉及工作項(xiàng)Tl、Τ2、Τ3和Τ4等待它們當(dāng)中的最后一個工作項(xiàng)到達(dá)501,并接著并發(fā)性地或?qū)嵸|(zhì)上并發(fā)性地重新開始執(zhí)行。
[0049]在點(diǎn)502,工作項(xiàng)Τ4發(fā)布屏障到達(dá)指令。屏障到達(dá)指令通知屏障的下一實(shí)例不等待Τ4,且Τ4前進(jìn),而不必在屏障的第二實(shí)例處同步。
[0050]在同步點(diǎn)503,工作項(xiàng)Τ1、Τ2和Τ3基于指令流中的第二屏障等待指令在屏障的第二實(shí)例上同步。當(dāng)所有工作項(xiàng)Τ1、Τ2和Τ3到達(dá)同步點(diǎn)503時,它們并發(fā)性地或?qū)嵸|(zhì)上并發(fā)性地重新開始執(zhí)行。
[0051]在點(diǎn)504,Tl發(fā)布屏障跳越指令。屏障跳越指令通知屏障的任何隨后的實(shí)例不等待Tl,且Tl前進(jìn)而不必在屏障的隨后實(shí)例處同步。
[0052]在同步點(diǎn)505,工作項(xiàng)Τ2、Τ3和Τ4同步。注意,雖然Τ4以前發(fā)布屏障到達(dá)指令(在502),這個以前的發(fā)布只從下一出現(xiàn)的屏障(即,在同步點(diǎn)503)免除Τ4。在同步點(diǎn)505的同步之后,Τ2、Τ3和Τ4前進(jìn)以再次在同步點(diǎn)506同步。當(dāng)在同步點(diǎn)506同步時,Τ2和Τ3每個遇到了在它們的各自指令流中的屏障等待指令的四個實(shí)例。此時,Τ4只遇到了三個實(shí)例。在同步點(diǎn)505和506的屏障不阻擋Tl,因?yàn)門l在同步點(diǎn)505和506之前在504發(fā)布了屏障跳越指令。
[0053]在時間上的點(diǎn)507處,在506出現(xiàn)之后,Tl發(fā)布屏障重置指令。這將屏障重置到其原始配置。原始屏障配置成在所有四個工作項(xiàng)Tl、Τ2、Τ3和Τ4上同步。重置使Tl在同步點(diǎn)507與Τ2、Τ3和Τ4同步。可通過實(shí)施重置作為自同步指令或通過與重置相關(guān)的用戶指定的同步指令在點(diǎn)507處實(shí)現(xiàn)同步。[0054]在點(diǎn)507處的同步之后,T1-T4基于在每個工作項(xiàng)中的等待指令在同步點(diǎn)508處繼續(xù)進(jìn)行同步。
[0055]圖6是根據(jù)實(shí)施方案的工作項(xiàng)同步的示例性方法600的圖示。
[0056]在操作602處,開始一組工作項(xiàng)。工作項(xiàng)可以是相同代碼的多個工作項(xiàng)。在相同代碼的各自工作項(xiàng)中執(zhí)行的實(shí)際指令序列可以是相同的或不同的,取決于條件估計等。根據(jù)另一實(shí)施方案,工作項(xiàng)不都是相同的代碼,并可包括彼此共享一個或多個同步點(diǎn)的任何工作項(xiàng)。
[0057]多個工作項(xiàng)可并發(fā)性地或非并發(fā)性地開始??稍贑PU、GPU上、在兩個或多個GPU上、在CPU的兩個或多個核心上或一個或多個GPU和一個或多個CPU核心的任何組合上執(zhí)行工作項(xiàng)。根據(jù)實(shí)施方案,多個工作項(xiàng)是在GPU的一個處理元件上執(zhí)行的工作組。
[0058]在操作604處,創(chuàng)建屏障b??赏ㄟ^在聲明屏障b的工作項(xiàng)上執(zhí)行指令來創(chuàng)建或例示屏障b。根據(jù)實(shí)施方案,當(dāng)系統(tǒng)遇到屏障b的聲明的第一實(shí)例時,屏障的實(shí)例在存儲器中被創(chuàng)建。隨后聲明屏障b的工作項(xiàng)接收到對已經(jīng)創(chuàng)建的屏障b的引用。屏障的基礎(chǔ)實(shí)施在各自的框架和/或系統(tǒng)中可以是不同的。計數(shù)信號量是示例性機(jī)制,具有上述語義的屏障可通過該機(jī)制來實(shí)施。
[0059]存儲器中的屏障b對象的創(chuàng)建包括初始化動態(tài)存儲器和/或硬件中的一個或多個存儲器位置和/或寄存器。例如,關(guān)于屏障b,需要如下所述維持幾個計數(shù)??稍趯懞妥x到那些存儲器位置時使用適當(dāng)?shù)牟l(fā)控制機(jī)制在動態(tài)存儲器中維持屏障對象以及所有計數(shù)。根據(jù)另一實(shí)施方案,雖然對應(yīng)于屏障b的對象在動態(tài)存儲器中被例示,但是對應(yīng)的計數(shù)被維持在特定的硬件寄存器中。
[0060]在操作606,初始化屏障b所需的各種計數(shù)被確定,且它們的初始值被設(shè)置。訪問工作項(xiàng)的數(shù)量(“訪問計數(shù)”)限定已到達(dá)屏障b的工作項(xiàng)的數(shù)量。當(dāng)工作項(xiàng)發(fā)布屏障等待指令或等效指令時,工作項(xiàng)已“到達(dá)”屏障。訪問計數(shù)可被初始化為O。在屏障b上執(zhí)行屏障跳越指令的工作項(xiàng)的數(shù)量可在跳越的計數(shù)(“跳越計數(shù)”)中被跟蹤。屏障釋放閾值(“釋放閾值”)是屏障正等待的工作項(xiàng)的數(shù)量。根據(jù)實(shí)施方案,屏障b被初始化具有等于在操作602開始的組中的工作項(xiàng)的數(shù)量的釋放閾值。根據(jù)另一實(shí)施方案,創(chuàng)建(在操作604)具有限定尺寸的屏障b,而不考慮在操作602開始的組的尺寸。因此,釋放閾值被初始化為限定尺寸。
[0061]在操作608,在執(zhí)行來自指令流的任何數(shù)量的其它指令之后,工作項(xiàng)χ到達(dá)同步指令。同步指令可以是但不限于下列項(xiàng)之一:屏障等待、屏障到達(dá)、屏障跳越和屏障重置。
[0062]在操作610,做出同步指令是否是屏障等待指令的決定,且如果是,方法600繼續(xù)進(jìn)行到操作612。
[0063]在操作612,訪問計數(shù)被更新。根據(jù)實(shí)施方案,訪問計數(shù)遞增一以指示工作項(xiàng)χ到
達(dá)屏障。
[0064]在操作614,將更新的訪問計數(shù)和跳越計數(shù)的和與釋放閾值進(jìn)行比較。如果該和等于或大于釋放閾值,則工作項(xiàng)X是到達(dá)屏障的最后一個工作項(xiàng),且屏障在操作618釋放。根據(jù)實(shí)施方案,釋放屏障使一個或多個計數(shù)值被重置且阻擋的工作項(xiàng)重新開始執(zhí)行。
[0065]屏障的釋放在操作620引起訪問計數(shù)的重置且在操作622引起在屏障上被阻擋的所有工作項(xiàng)的重新開始。在操作620,根據(jù)實(shí)施方案,訪問計數(shù)被重置為O。注意,重置訪問計數(shù)清除早些時候出現(xiàn)的屏障到達(dá)指令的任何影響。然而,重置訪問計數(shù)并不清除早些時候出現(xiàn)的任何屏障跳越指令的影響。如在來自塊的屏障釋放的情況中完成的,僅僅訪問計數(shù)的重置可被考慮為在屏障上的“部分重置”操作。如在本文使用的術(shù)語“部分重置”傳達(dá)應(yīng)用于不發(fā)布跳越指令的工作項(xiàng)的屏障部分被重置。
[0066]在操作622,所有阻擋的工作項(xiàng)重新開始執(zhí)行。根據(jù)實(shí)施方案,阻擋的工作項(xiàng)可等待信號量,且信號量被重置,使得阻擋的工作項(xiàng)可重新開始執(zhí)行。例如,在硬件或軟件中實(shí)施的計數(shù)信號量可用于阻擋工作項(xiàng)。在完成操作622之后,方法600繼續(xù)進(jìn)行到操作608。
[0067]如果在操作614確定訪問計數(shù)和跳越計數(shù)的和不等于釋放閾值,則在操作616,工作項(xiàng)X被阻擋。根據(jù)實(shí)施方案,可通過使工作項(xiàng)等待信號量來執(zhí)行工作項(xiàng)X的阻擋。當(dāng)操作618-622針對屏障出現(xiàn)時,工作項(xiàng)χ將隨后被釋放。操作619代表在例如通過操作618-622釋放屏障之后工作項(xiàng)χ的執(zhí)行的繼續(xù)。
[0068]如果在操作610決定指令不是屏障等待指令,則在操作624決定指令是否是屏障到達(dá)。如果是,則在操作626更新訪問計數(shù)。根據(jù)實(shí)施方案,訪問計數(shù)遞增一以指示工作項(xiàng)χ已到達(dá)屏障。在更新訪問計數(shù)之后,在操作628,工作項(xiàng)χ繼續(xù)指令流的執(zhí)行。隨后,當(dāng)下一同步指令被遇到時,處理繼續(xù)進(jìn)行到操作608。
[0069]如果在操作624決定指令不是屏障到達(dá)指令,則在操作630決定指令是否是屏障跳越。如果是,則在操作632更新跳越計數(shù)。根據(jù)實(shí)施方案,跳越計數(shù)遞增I。然后在操作636,工作項(xiàng)χ繼續(xù)執(zhí)行并當(dāng)下一同步指令被遇到時繼續(xù)進(jìn)行到操作608。
[0070]如果在操作630決定指令不是屏障跳越指令,則在操作638確定指令是否是屏障重置。如果是,則在操作640,屏障b被重置。根據(jù)實(shí)施方案,響應(yīng)于屏障重置指令而重置屏障包括將訪問計數(shù)和跳越計數(shù)設(shè)置為O。因此,在屏障重置在屏障b上被執(zhí)行之后,屏障b被重置到其原始狀態(tài)。在一些情況下,如果組中的所有工作項(xiàng)都未在屏障處被同步,則競爭條件可出現(xiàn)。因此,在一些實(shí)施方案中,屏障重置指令可被實(shí)施為自同步指令,并可引起遍及所有工作項(xiàng)的同步點(diǎn)。在其它實(shí)施方案中,用戶可包括一個或多個同步點(diǎn)以確保在重置指令處的同步。在操作640之后,當(dāng)在指令流中遇到下一同步指令時,處理可繼續(xù)到操作608。
[0071]如果在步驟638確定指令不是屏障重置指令,則在操作639,工作項(xiàng)χ可繼續(xù)執(zhí)行。在操作639之后,當(dāng)在指令流中遇到下一同步指令時,處理可繼續(xù)到操作608。
[0072]根據(jù)另一實(shí)施方案,不是維持單獨(dú)的跳越計數(shù)和屏障的釋放閾值,可只維持釋放閾值。例如,釋放閾值可遞減以反映工作項(xiàng)已執(zhí)行屏障跳越指令。然后,當(dāng)屏障重置指令被發(fā)布時,計數(shù)的重置包括將釋放閾值重置到其原始尺寸。實(shí)際上,根據(jù)該方法,執(zhí)行屏障跳越的一定數(shù)量的工作項(xiàng)可被認(rèn)為離開同步組。
[0073]圖7是根據(jù)實(shí)施方案的工作項(xiàng)同步的系統(tǒng)的方框圖圖示。在圖7中,示例性異構(gòu)計算系統(tǒng)700可包括一個或多個CPU (例如CPU701)以及一個或多個GPU (例如GPU702)。異構(gòu)計算系統(tǒng)700也可包括系統(tǒng)存儲器703、持久存儲設(shè)備704、系統(tǒng)總線705、輸入/輸出設(shè)備706和屏障同步器709。
[0074]CPU701可包括市場上可買到的控制處理器或定制控制處理器。CPU701例如執(zhí)行控制異構(gòu)計算系統(tǒng)700的操作的控制邏輯。CPU701可以是多核CPU,例如具有兩個CPU核心741和742的多核CPU。除了任何控制電路以外,CPU701還包括分別是CPU核心741和742的CPU高速緩存存儲器743和744。CPU高速緩存存儲器743和744可用于在CPU核心741和742上的應(yīng)用的執(zhí)行期間分別臨時存儲指令和/或參數(shù)值。
[0075]例如,CPU高速緩存存儲器743可用于在CPU核心741上的控制邏輯指令的執(zhí)行期間臨時存儲來自系統(tǒng)存儲器703的一個或多個控制邏輯指令、變量的值或恒定參數(shù)的值。CPU701也可包括專用矢量指令處理單元。例如,CPU核心742可包括可有效地處理矢量化指令的流SMD擴(kuò)展(SSE)單元。本領(lǐng)域中的技術(shù)人員將理解,CPU701可包括比選定示例中的CPU核心更多或更少的CPU核心,并且也可沒有高速緩存存儲器或具有更復(fù)雜的高速緩存存儲器分級結(jié)構(gòu)。
[0076]GPU702可包括市場上可買到的圖形處理器或定制設(shè)計的圖形處理器。GPU702例如可執(zhí)行用于選定功能的專用代碼。通常,GPU702可用于執(zhí)行圖形功能,例如圖形流水線計算和在顯示器上渲染圖像。
[0077]GPU702包括GPU全局高速緩存存儲器710及一個或多個計算單元712和713。圖形存儲器707可包括在GPU702中或耦合到GPU702。每個計算單元712和713分別與GPU本地存儲器714和715相關(guān)。每個計算單元包括一個或多個GPU處理元件(PE)。例如,計算單元712包括GPU處理元件721和722,且計算單元713包括GPUPE723和724。
[0078]每個GPU處理元件721、722、723和724分別與至少一個專用存儲器(PM) 731、732、733和734相關(guān)。每個GPUPE可包括一個或多個標(biāo)量和矢量浮點(diǎn)單元。GPUPE也可包括專用單元例如平方根倒數(shù)單元和正弦/余弦單元。GPU全局高速緩存存儲器710可耦合到系統(tǒng)存儲器(例如系統(tǒng)存儲器703)和/或圖形存儲器(例如圖形存儲器707)。
[0079]系統(tǒng)存儲器703可包括至少一個非持久存儲器,例如動態(tài)隨機(jī)存取存儲器(DRAM)。系統(tǒng)存儲器703可在應(yīng)用或其它處理邏輯的部分的執(zhí)行期間存儲處理邏輯指令、恒定值和變量值。例如,屏障同步器709的控制邏輯和/或其它處理邏輯可在通過CPU701執(zhí)行屏障同步器709期間存在于系統(tǒng)存儲器703內(nèi)。如在本文使用的術(shù)語“處理邏輯”指控制流指令、用于執(zhí)行計算的指令和用于對資源的相關(guān)訪問的指令。
[0080]持久存儲器704包括能夠存儲數(shù)字?jǐn)?shù)據(jù)的一個或多個存儲設(shè)備,例如磁盤、光盤或閃存。持久存儲器704可例如存儲屏障同步器709的指令邏輯的至少部分。在異構(gòu)計算系統(tǒng)700啟動時,操作系統(tǒng)和其它應(yīng)用軟件可從持久存儲器704加載到系統(tǒng)存儲器703中。
[0081]系統(tǒng)總線705可包括外圍部件互連(PCI)總線、工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)總線或這樣的設(shè)備。系統(tǒng)總線705也可包括網(wǎng)絡(luò)(例如局域網(wǎng)(LAN))連同耦合部件(包括異構(gòu)計算系統(tǒng)700的部件)的功能。
[0082]輸入/輸出接口 706包括連接用戶輸入/輸出設(shè)備(例如鍵盤、鼠標(biāo)、顯示器和/或觸摸屏)的一個或多個接口。例如,可通過鍵盤和鼠標(biāo)連接的用戶接口 706向異構(gòu)計算系統(tǒng)700提供用戶輸入。異構(gòu)計算系統(tǒng)700的輸出可通過用戶接口 706輸出到顯示器。
[0083]圖形存儲器707耦合到系統(tǒng)總線705和GPU702。圖形存儲器707通常用于存儲從系統(tǒng)存儲器703傳輸?shù)臄?shù)據(jù)用于由GPU快速訪問。例如,在GPU702和圖形存儲器707之間的接口可以比系統(tǒng)總線接口 705快幾倍。
[0084]屏障同步器709包括在GPU702和CPU701中的任一或兩個上的使功能同步的邏輯和處理邏輯。屏障同步器709可配置成使全局地遍及計算機(jī)中的處理器組、在每個單獨(dú)的處理器中和/或在處理器的每個處理元件內(nèi)的工作項(xiàng)同步。下面還關(guān)于圖8描述了屏障同步器709。本領(lǐng)域中的技術(shù)人員將理解,可使用軟件、固件、硬件或其任何組合來實(shí)施屏障同步器。當(dāng)在軟件中實(shí)施時,例如屏障同步器709可以是用C或OpenCL寫的計算機(jī)程序,其當(dāng)被編譯和執(zhí)行時存在于系統(tǒng)存儲器703中。在源代碼形式和/或編譯可執(zhí)行形式中,屏障同步器709可存儲在持久存儲器704中。在一個實(shí)施方案中,用硬件描述語言(例如Verilog, RTL、網(wǎng)表)規(guī)定了屏障同步器709的一些或全部功能,以能夠通過掩模作品/光掩模的產(chǎn)生來最終配置制造過程以產(chǎn)生體現(xiàn)本文描述的發(fā)明的方面的硬件設(shè)備。
[0085]本領(lǐng)域中的技術(shù)人員將理解,異構(gòu)計算系統(tǒng)700可包括比圖7所示的更多或更少的部件。例如,異構(gòu)計算系統(tǒng)700可包括一個或多個網(wǎng)絡(luò)接口和/或軟件應(yīng)用例如OpenCL框架。
[0086]圖8是根據(jù)實(shí)施方案的屏障同步器800的圖示。屏障同步器800包括工作項(xiàng)阻擋模塊802、屏障釋放模塊804、屏障工作項(xiàng)組模塊806、屏障跳越模塊808和屏障重置模塊810。而且,屏障同步器800可包括屏障寄存器812。根據(jù)實(shí)施方案,屏障同步器800包括在屏障冋步器709中。
[0087]工作項(xiàng)阻擋模塊802操作來在屏障上阻擋一個或多個工作項(xiàng)。可使用信號量(例如計數(shù)信號量)和寄存器來實(shí)施屏障。工作項(xiàng)阻擋可通過使阻擋的工作項(xiàng)等待信號量來實(shí)施。信號量可在硬件或軟件中實(shí)施。當(dāng)遇到屏障等待指令時,可阻擋工作項(xiàng)。工作項(xiàng)阻擋模塊可例如包括處理邏輯以實(shí)施操作,包括方法600的操作616。
[0088]屏障釋放模塊804操作來在足夠數(shù)量的工作項(xiàng)到達(dá)屏障時釋放屏障。如上所述,屏障可使用信號量來實(shí)施,且釋放屏障可包括釋放信號量。當(dāng)遇到屏障等待指令且工作項(xiàng)證明是最后一個工作項(xiàng)以完成一定數(shù)量的工作項(xiàng)到達(dá)屏障的要求時,可釋放工作項(xiàng)。屏障釋放模塊可例如包括處理器邏輯以實(shí)施操作,包括方法600的操作618-622。
[0089]屏障工作項(xiàng)組模塊806操作來掌握在各種執(zhí)行工作項(xiàng)當(dāng)中的同步組的線索。屏障工作項(xiàng)組模塊806也可操作來根據(jù)組構(gòu)造來創(chuàng)建和初始化屏障。根據(jù)實(shí)施方案,屏障釋放模塊806可例如包括處理邏輯以實(shí)施操作,包括方法600的操作602-606。
[0090]屏障跳越模塊808操作來實(shí)施屏障跳越指令。例如,屏障跳越指令將使相應(yīng)屏障的跳越計數(shù)被更新。根據(jù)實(shí)施方案,屏障跳越模塊808可包括處理邏輯以實(shí)施操作,包括方法600的操作630-636。
[0091]屏障重置模塊810操作來實(shí)施屏障重置指令。例如,屏障重置指令將使與屏障有關(guān)的訪問計數(shù)和跳越計數(shù)被重置,和/或釋放閾值被調(diào)整。屏障重置模塊810可例如包括處理邏輯以實(shí)施操作,包括方法600的操作638-640。
[0092]屏障寄存器812包括與屏障有關(guān)的硬件和/或軟件寄存器。屏障寄存器812可包括屏障記錄814,其包括多個寄存器和/或存儲器位置。示例性屏障記錄814包括屏障標(biāo)識符822、鎖824、阻擋工作項(xiàng)計數(shù)826、到達(dá)工作項(xiàng)計數(shù)828、跳越工作項(xiàng)計數(shù)830和閾值832。屏障標(biāo)識符822可以是指針、索引或唯一地識別屏障的存儲器位置或寄存器的其它標(biāo)識符。
[0093]鎖824可以是對信號量或其它實(shí)體的指針或引用,進(jìn)程在所述實(shí)體上被阻擋。阻擋工作項(xiàng)計數(shù)826是在屏障上被阻擋的工作項(xiàng)的數(shù)量。到達(dá)工作項(xiàng)計數(shù)828是發(fā)布屏障到達(dá)指令的工作項(xiàng)的數(shù)量。跳越工作項(xiàng)計數(shù)830是發(fā)布屏障跳越指令的工作項(xiàng)的數(shù)量。閾值832是釋放閾值或同步組的組尺寸。 結(jié)論
[0094]概述和摘要章節(jié)可闡述如發(fā)明人設(shè)想的本發(fā)明的一個或多個但不是所有示例性實(shí)施方案,且因此并不用來以任何方式限制本發(fā)明和所附權(quán)利要求。
[0095]上面在示出指定功能的實(shí)施及其關(guān)系的功能構(gòu)造塊的幫助下描述了本發(fā)明。為了描述的方便,這些功能構(gòu)造塊的邊界在本文被任意界定??山缍蛇x的邊界,只要指定功能及其關(guān)系被適當(dāng)?shù)貓?zhí)行。
[0096]特定的實(shí)施方案的前述描述充分揭露本發(fā)明的一般性質(zhì),使得其他人可通過應(yīng)用在本領(lǐng)域的技術(shù)范圍內(nèi)的知識來容易修改和/或適應(yīng)這樣的特定實(shí)施方案的各種應(yīng)用而沒有過度的實(shí)驗(yàn),而不偏離本發(fā)明的一般概念。因此,基于本文提出的教導(dǎo)和指導(dǎo),這樣的適應(yīng)和修改被規(guī)定為在所公開的實(shí)施方案的等效形式的意義和范圍內(nèi)。應(yīng)理解,本文的用語或術(shù)語是為了描述而不是限制的目的,使得本說明書的術(shù)語或用語由技術(shù)人員按照教導(dǎo)和指導(dǎo)來解釋。
[0097]本發(fā)明的廣度和范圍不應(yīng)被上述示例性實(shí)施方案中的任一個限制,而應(yīng)只根據(jù)下面的權(quán)利要求及其等效形式來被限定。
【權(quán)利要求】
1.一種使一個或多個處理器上的一組工作項(xiàng)同步的方法,其包括: 通過來自所述組的第一工作項(xiàng)執(zhí)行屏障跳越指令;以及 響應(yīng)于所述執(zhí)行的屏障跳越指令,重新配置屏障以使來自所述組的其它工作項(xiàng)在序列中的多個點(diǎn)上同步,而不要求所述第一工作項(xiàng)在所述多個點(diǎn)中的任一個上到達(dá)所述屏障。
2.如權(quán)利要求1所述的方法,其還包括: 配置所述屏障以在一序列同步點(diǎn)處使所述組同步,其中所述序列包括所述多個點(diǎn)。
3.如權(quán)利要求1所述的方法,其中重新配置所述屏障以使其它工作項(xiàng)同步包括: 使與所述屏障相關(guān)的跳越計數(shù)遞增,其中所述跳越計數(shù)在確定來自所述組的所有工作項(xiàng)是否到達(dá)所述屏障時被使用。
4.如權(quán)利要求1所述的方法,其還包括: 使所述其它工作項(xiàng)在所述多個點(diǎn)中的第一點(diǎn)和第二點(diǎn)處同步,其中所述第一工作項(xiàng)在所述第一點(diǎn)和所述第二點(diǎn)處不到達(dá)所述屏障。
5.如權(quán)利要求4所述的方法,其中使所述其它工作項(xiàng)同步包括: 對于到達(dá)所述屏障的所述其它工作項(xiàng)中的每個,確定它是否是所述其它工作項(xiàng)中的最后一個;以及 當(dāng)所述其它工作項(xiàng)中的所述最后一個到達(dá)所述屏障時,將所有所述其它工作項(xiàng)解鎖以重新開始處理。
6.如權(quán)利要求5所述的方法,其中確定它是否是所述其它工作項(xiàng)中的最后一個包括: 比較跳越計數(shù)和訪問計數(shù)的和與釋放閾值,其中當(dāng)所述跳越指令被執(zhí)行時所述跳越計數(shù)遞增,其中當(dāng)工作項(xiàng)到達(dá)所述屏障時所述訪問計數(shù)遞增,且其中所述釋放閾值對應(yīng)于所述組中的工作項(xiàng)的數(shù)量。
7.如權(quán)利要求4所述的方法,其中使所述其它工作項(xiàng)同步包括: 在所述第一點(diǎn)處使所述其它工作項(xiàng)同步; 部分重置所述屏障以僅使所述其它工作項(xiàng)同步;以及 在部分重置所述屏障以僅使所述其它工作項(xiàng)同步之后在所述第二點(diǎn)處使所述其它工作項(xiàng)同步。
8.如權(quán)利要求7所述的方法,其中部分重置所述屏障以僅使所述其它工作項(xiàng)同步包括: 將與所述屏障相關(guān)的訪問計數(shù)設(shè)置到指示沒有工作項(xiàng)到達(dá)所述屏障的初始值,其中所述訪問計數(shù)代表到達(dá)所述屏障的工作項(xiàng)的數(shù)量;以及 使跳越計數(shù)的值持久,其中當(dāng)工作項(xiàng)發(fā)布屏障跳越指令時,所述跳越計數(shù)遞增。
9.如權(quán)利要求1所述的方法,其還包括: 通過來自所述組的任何工作項(xiàng)執(zhí)行屏障重置指令;以及 響應(yīng)于所述屏障重置指令,進(jìn)一步重新配置所述屏障以要求來自所述組的所有工作項(xiàng)到達(dá)所述屏障,以便使所述組同步。
10.如權(quán)利要求9所述的方法,其中進(jìn)一步重新配置所述屏障以要求所有工作項(xiàng)包括: 將與所述屏障相關(guān)的訪問計數(shù)設(shè)置到指示沒有工作項(xiàng)到達(dá)所述屏障的初始值;以及 將與所述屏障相關(guān)的跳越計數(shù)設(shè)置到指示沒有工作項(xiàng)發(fā)布與所述屏障相關(guān)的屏障跳越指令的初始值。
11.如權(quán)利要求1所述的方法,其中所述組的工作項(xiàng)是工作組,且其中所述工作組在圖形處理單元的處理元件中執(zhí)行。
12.如權(quán)利要求1所述的方法,其中所述組包括來自在圖形處理單元中執(zhí)行的波前的兩個或多個工作組的工作項(xiàng)。
13.如權(quán)利要求1所述的方法,其中所述組包括在CPU上執(zhí)行的工作項(xiàng)。
14.如權(quán)利要求1所述的方法,其中配置所述屏障以在一序列同步點(diǎn)處使所述組同步響應(yīng)于包括在庫函數(shù)中的指令而被執(zhí)行。
15.—種系統(tǒng),其包括: 一個或多個處理器; 在所述一個或多個處理器上執(zhí)行的一組工作項(xiàng);以及 屏障同步模塊,其 被配置成當(dāng)被所述一個或多個處理器執(zhí)行時使所述一個或多個處理器: 通過來自所述組的所述第一工作項(xiàng)執(zhí)行屏障跳越指令;以及 響應(yīng)于所述執(zhí)行的屏障跳越指令,重新配置屏障以使來自所述組的其它工作項(xiàng)在序列中的多個點(diǎn)上同步,而不要求所述第一工作項(xiàng)在所述多個點(diǎn)中的任一個上到達(dá)所述屏障。
16.如權(quán)利要求15所述的系統(tǒng),其中所述屏障同步模塊還被配置成當(dāng)被所述一個或多個處理器執(zhí)行時使所述一個或多個處理器: 配置屏障以在一序列同步點(diǎn)處使所述組同步,其中所述序列包括所述多個點(diǎn)。
17.如權(quán)利要求15所述的系統(tǒng),其中所述一個或多個處理器是異構(gòu)計算系統(tǒng)的部分。
18.如權(quán)利要求15所述的系統(tǒng),其中所述屏障同步模塊還被配置成當(dāng)被所述一個或多個處理器執(zhí)行時使所述一個或多個處理器: 通過來自所述組的任何工作項(xiàng)執(zhí)行屏障重置指令;以及 響應(yīng)于所述屏障重置指令,進(jìn)一步重新配置所述屏障以要求來自所述組的所有工作項(xiàng)到達(dá)所述屏障,以便使所述組同步。
19.一種存儲命令的計算機(jī)可讀介質(zhì),其中所述命令如果被執(zhí)行則使方法包括: 通過來自所述組的第一工作項(xiàng)執(zhí)行屏障跳越指令;以及 響應(yīng)于所述執(zhí)行的屏障跳越指令,重新配置屏障以使來自所述組的其它工作項(xiàng)在序列中的多個點(diǎn)上同步,而不要求所述第一工作項(xiàng)在所述多個點(diǎn)中的任一個上到達(dá)所述屏障。
20.如權(quán)利要求19所述的計算機(jī)可讀介質(zhì),其中所述命令如果被執(zhí)行則使方法還包括: 配置屏障以在一序列同步點(diǎn)處使所述組同步,其中所述序列包括所述多個點(diǎn)。
【文檔編號】G06F9/52GK103917959SQ201280053875
【公開日】2014年7月9日 申請日期:2012年10月31日 優(yōu)先權(quán)日:2011年11月3日
【發(fā)明者】李·W·豪斯, 本尼迪克特·R·蓋斯特, 邁克爾·C·休斯頓, 邁克爾·曼特, 馬克·萊瑟, 諾曼·拉賓, 布賴恩·D·恩柏林 申請人:超威半導(dǎo)體公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1