欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于執(zhí)行多個(gè)線程的數(shù)據(jù)處理設(shè)備中的共享資源的制作方法

文檔序號(hào):12071186閱讀:452來(lái)源:國(guó)知局
用于執(zhí)行多個(gè)線程的數(shù)據(jù)處理設(shè)備中的共享資源的制作方法與工藝

本技術(shù)涉及數(shù)字處理領(lǐng)域。具體地,本技術(shù)研究在其中執(zhí)行多個(gè)線程的數(shù)據(jù)處理設(shè)備和方法。



背景技術(shù):

數(shù)據(jù)處理設(shè)備可執(zhí)行多個(gè)線程。線程可以步調(diào)一致(lockstep)的方式進(jìn)展。具體地,每一線程可維護(hù)它自身的程序計(jì)數(shù)器。系統(tǒng)本身可維護(hù)自身的通用程序計(jì)數(shù)器,以使得針對(duì)(程序計(jì)數(shù)器與通用程序計(jì)數(shù)器匹配的)線程執(zhí)行由通用程序計(jì)數(shù)器所指示的指令。此類(lèi)系統(tǒng)可稱為例如單指令多線程(SIMT)系統(tǒng)。因此,在每一步驟處,針對(duì)多個(gè)線程中的至少一子集執(zhí)行單個(gè)指令。一旦已針對(duì)線程的子集執(zhí)行指令,可改變通用程序計(jì)數(shù)器來(lái)指示新的指令。在此類(lèi)系統(tǒng)中可以優(yōu)選地設(shè)定通用程序計(jì)數(shù)器以匹配由線程中的每個(gè)線程維護(hù)的程序計(jì)數(shù)器中的最小者。以此方式,可允許最落后的線程取得進(jìn)展,并且從而追趕上具有更高的程序計(jì)數(shù)器的線程。此可引發(fā)線程進(jìn)入收斂,即共享相同程序計(jì)數(shù)器值以使得可在盡可能多的線程上執(zhí)行單個(gè)指令。

對(duì)此方案的修改涉及追蹤每個(gè)線程的函數(shù)調(diào)用深度。具體地,每當(dāng)線程做出函數(shù)調(diào)用時(shí),此線程的函數(shù)調(diào)用深度計(jì)數(shù)器遞增,且每當(dāng)線程自函數(shù)調(diào)用返回時(shí),此線程的函數(shù)調(diào)用深度計(jì)數(shù)器遞減。當(dāng)通用程序計(jì)數(shù)器要變化時(shí),即它被設(shè)定為匹配首先具有最高函數(shù)調(diào)用深度計(jì)數(shù)器的線程的程序計(jì)數(shù)器,且其次(若存在多個(gè)這樣的線程)匹配此集合中具有最低程序計(jì)數(shù)器值的一個(gè)或多個(gè)線程的程序計(jì)數(shù)器。換言之,僅考慮具有最高函數(shù)調(diào)用深度的全部線程間的程序計(jì)數(shù)器值。因此,這幫助防止在僅考慮程序計(jì)數(shù)器值情況下將會(huì)發(fā)生的性能問(wèn)題或死鎖情形。當(dāng)線程的子集做出函數(shù)調(diào)用時(shí),這可使得與那些線程關(guān)聯(lián)的程序計(jì)數(shù)器顯著增加,使得應(yīng)在函數(shù)本身之后下一個(gè)執(zhí)行的指令并不具有最低程序計(jì)數(shù)器值。通過(guò)基于函數(shù)調(diào)用深度選擇用于執(zhí)行的線程,即便該函數(shù)不具有最低程序計(jì)數(shù)器也可先處理該函數(shù)。

上述兩種機(jī)制皆傾向于遭受死鎖,其中待執(zhí)行的代碼包含要求獨(dú)占訪問(wèn)的共享資源。舉例而言,可在任何一個(gè)瞬時(shí)處由單個(gè)線程保持鎖定,從而允許線程且僅此線程訪問(wèn)共享資源。

訪問(wèn)共享資源的線程可比不可訪問(wèn)共享資源的其余線程具有更高的程序計(jì)數(shù)器。因此,將能夠執(zhí)行其余線程,但將無(wú)法執(zhí)行具有對(duì)共享資源的訪問(wèn)權(quán)的線程。由于另一線程具有對(duì)共享資源的訪問(wèn)權(quán)的同時(shí)其余線程將不能夠訪問(wèn)共享資源,將發(fā)生死鎖。然而,具有對(duì)共享資源的訪問(wèn)權(quán)的線程可能永遠(yuǎn)不被允許執(zhí)行。因此,無(wú)線程取得任何進(jìn)展且系統(tǒng)暫停。



技術(shù)實(shí)現(xiàn)要素:

根據(jù)本技術(shù)的一個(gè)方面,提供了一種被配置為執(zhí)行多個(gè)線程的數(shù)據(jù)處理設(shè)備,所述數(shù)據(jù)處理設(shè)備包括:通用程序計(jì)數(shù)器,用于標(biāo)識(shí)指令流中要針對(duì)所述多個(gè)線程的至少一子集執(zhí)行的一個(gè)指令,其中所述子集中的每一線程具有相關(guān)聯(lián)的、用于標(biāo)識(shí)所述指令流中的一個(gè)指令的線程程序計(jì)數(shù)器;選擇器,被配置為選擇線程的所述子集中的選定線程并且將所述通用程序計(jì)數(shù)器設(shè)定為與所述選定線程相關(guān)聯(lián)的線程程序計(jì)數(shù)器;以及處理器,被配置為針對(duì)線程的所述子集中包括所述選定線程的一個(gè)或多個(gè)線程執(zhí)行由所述通用程序計(jì)數(shù)器標(biāo)識(shí)的指令,其中線程的所述子集與至少一個(gè)鎖定參數(shù)相關(guān)聯(lián),該至少一個(gè)鎖定參數(shù)用于追蹤線程的所述子集中的哪個(gè)線程具有對(duì)共享資源的獨(dú)占訪問(wèn);其中所述處理器被配置為響應(yīng)于針對(duì)一線程執(zhí)行的第一指令而修改所述至少一個(gè)鎖定參數(shù)來(lái)指示此線程已經(jīng)獲得對(duì)所述共享資源的獨(dú)占訪問(wèn),并且響應(yīng)于針對(duì)此線程執(zhí)行的第二指令而修改與所述線程相關(guān)聯(lián)的所述至少一個(gè)鎖定參數(shù)來(lái)指示所述線程不再具有對(duì)所述共享資源的獨(dú)占訪問(wèn);并且其中所述選擇器被配置為基于所述至少一個(gè)鎖定參數(shù)選擇所述選定線程。

根據(jù)本技術(shù)的另一方面,提供一種用于針對(duì)多個(gè)線程中的子集執(zhí)行指令流的數(shù)據(jù)處理方法,其中所述子集中的每一線程具有相關(guān)聯(lián)的、用于標(biāo)識(shí)所述指令流中的一個(gè)指令的線程程序計(jì)數(shù)器,所述數(shù)據(jù)處理方法包括以下步驟:

選擇線程的所述子集中的選定線程,并且將通用程序計(jì)數(shù)器設(shè)定為與所述選定線程相關(guān)聯(lián)的線程程序計(jì)數(shù)器,其中所述通用程序計(jì)數(shù)器標(biāo)識(shí)所述指令流中要針對(duì)線程的所述子集執(zhí)行的一個(gè)指令;以及

針對(duì)線程的所述子集中包括所述選定線程的一個(gè)或多個(gè)線程執(zhí)行由所述通用程序計(jì)數(shù)器所標(biāo)識(shí)的指令,

其中線程的所述子集與至少一個(gè)鎖定參數(shù)相關(guān)聯(lián),該至少一個(gè)鎖定參數(shù)用于追蹤線程的所述子集中的何者具有對(duì)共享資源的獨(dú)占訪問(wèn);

其中所述至少一個(gè)鎖定參數(shù)響應(yīng)于針對(duì)一線程執(zhí)行的第一指令而被修改以指示此線程已經(jīng)獲得對(duì)所述共享資源的獨(dú)占訪問(wèn),并且響應(yīng)于針對(duì)此線程執(zhí)行的第二指令而被修改以指示所述線程不再具有對(duì)所述共享資源的獨(dú)占訪問(wèn);并且

其中所述選擇器被配置為基于所述至少一個(gè)鎖定參數(shù)選擇所述選定線程。

根據(jù)另一方面,提供一種被配置為執(zhí)行多個(gè)線程的數(shù)據(jù)處理設(shè)備,該數(shù)據(jù)處理設(shè)備包含:

通用程序計(jì)數(shù)器裝置,用于標(biāo)識(shí)指令流中要針對(duì)所述多個(gè)線程的至少一子集執(zhí)行的一個(gè)指令,其中所述子集中的每一線程具有相關(guān)聯(lián)的、用于標(biāo)識(shí)所述指令流中的一個(gè)指令的線程程序計(jì)數(shù)器裝置;

選擇裝置,用于選擇線程的所述子集中的選定線程并且將所述通用程序計(jì)數(shù)器裝置設(shè)定為與所述選定線程相關(guān)聯(lián)的線程程序計(jì)數(shù)器裝置;以及

處理器裝置,用于針對(duì)線程的所述子集中包括所述選定線程的一個(gè)或多個(gè)線程執(zhí)行由所述通用程序計(jì)數(shù)器裝置標(biāo)識(shí)的指令,

其中線程的所述子集與至少一個(gè)鎖定參數(shù)相關(guān)聯(lián),該至少一個(gè)鎖定參數(shù)用于追蹤線程的所述子集中的哪個(gè)線程具有對(duì)共享資源的獨(dú)占訪問(wèn);

其中所述處理器裝置用于響應(yīng)于針對(duì)一線程執(zhí)行的第一指令而修改所述至少一個(gè)鎖定參數(shù)來(lái)指示此線程已經(jīng)獲得對(duì)所述共享資源的獨(dú)占訪問(wèn),并且響應(yīng)于針對(duì)此線程執(zhí)行的第二指令而修改與所述線程相關(guān)聯(lián)的所述至少一個(gè)鎖定參數(shù)來(lái)指示所述線程不再具有對(duì)所述共享資源的獨(dú)占訪問(wèn);并且

其中所述選擇裝置用于基于所述至少一個(gè)鎖定參數(shù)選擇所述選定線程。

附圖說(shuō)明

僅通過(guò)示例的方式,本技術(shù)的其它方面、特征、優(yōu)點(diǎn)和示例實(shí)施例將參照附圖進(jìn)行描述,其中:

圖1示出了根據(jù)一個(gè)實(shí)施例的數(shù)據(jù)處理設(shè)備;

圖2示出了具有不同程序計(jì)數(shù)器值的多個(gè)不同線程的執(zhí)行的示例;

圖3示出了其中可在SIMT系統(tǒng)中發(fā)生死鎖的代碼;

圖4示出了解釋可如何防止圖3的死鎖的第二代碼示例;

圖5以流程圖形式示出了SIMT系統(tǒng)的線程之間的選擇可如何發(fā)生;

圖6以流程圖形式示出了執(zhí)行線程的方法;

圖7示出了針對(duì)線程的子集維護(hù)的狀態(tài)數(shù)據(jù)的另一示例;

圖8示出了第三代碼示例;以及

圖9是示出使用圖7的狀態(tài)數(shù)據(jù)選擇線程程序計(jì)數(shù)器的方法的流程圖。

具體實(shí)施方式

在一個(gè)示例中,線程的子集已與至少一個(gè)鎖定參數(shù)關(guān)聯(lián)以便追蹤子集中的哪個(gè)線程具有對(duì)共享資源的獨(dú)占訪問(wèn)。處理器可響應(yīng)于線程所執(zhí)行的第一指令來(lái)修改至少一個(gè)鎖定參數(shù),從而指示線程已經(jīng)獲得對(duì)此共享資源的獨(dú)占訪問(wèn)。類(lèi)似地,處理器可響應(yīng)第二指令來(lái)修改至少一個(gè)鎖定參數(shù),從而指示線程不再具有對(duì)此共享資源的獨(dú)占訪問(wèn)。在選擇選定線程(其線程程序計(jì)數(shù)器被用作通用程序計(jì)數(shù)器的值)并從而確定針對(duì)線程的子集下一個(gè)將執(zhí)行哪個(gè)指令的過(guò)程中,數(shù)據(jù)處理設(shè)備可考慮至少一個(gè)鎖定參數(shù)。通過(guò)基于鎖定參數(shù)選擇通用程序計(jì)數(shù)器的值,控制在任何特定時(shí)刻處能夠執(zhí)行哪些線程且從而減少或防止死鎖發(fā)生幾率是可能的。

舉例而言,當(dāng)線程獲得或已經(jīng)獲得對(duì)共享資源的獨(dú)占訪問(wèn)時(shí)可執(zhí)行第一指令,且當(dāng)線程放棄或已經(jīng)放棄對(duì)共享資源的訪問(wèn)權(quán)時(shí)可執(zhí)行第二指令。

處理器可被配置為響應(yīng)于鎖定序列包含針對(duì)線程執(zhí)行的至少一個(gè)鎖定指令,向線程授權(quán)對(duì)共享資源的獨(dú)占訪問(wèn)。鎖定序列可包含涉及各種比較、加載及存儲(chǔ)的眾多不同指令。此序列內(nèi)可以是最終設(shè)定共享資源的所有權(quán)的鎖定指令。在一些示例中,鎖定指令可使得具有對(duì)共享資源的獨(dú)占訪問(wèn)的線程的標(biāo)識(shí)被存儲(chǔ)或記錄。在其他示例中,鎖定指令可僅設(shè)定已鎖定資源的指示,無(wú)需明確標(biāo)識(shí)哪個(gè)線程具有鎖定的所有權(quán)。在一些情況中,鎖定序列可未包含第一指令。換言之,引發(fā)線程獲得對(duì)共享資源的獨(dú)占訪問(wèn)的鎖定序列可與第一指令分離,該第一指令向處理器指示線程已經(jīng)獲得對(duì)共享資源的獨(dú)占訪問(wèn)。因此,代碼可包含含有鎖定指令的鎖定序列,該鎖定序列位于第一指令之前或之后。此方法可用于確保與不支持第一指令的舊式系統(tǒng)的后向兼容性。即使不支持第一指令,可仍由舊式系統(tǒng)正常處理鎖定序列。一些示例可在第一指令之前執(zhí)行鎖定序列,使得線程先試圖獲得對(duì)共享資源的獨(dú)占訪問(wèn),且隨后若成功,則因此通過(guò)執(zhí)行第一指令更新鎖定參數(shù)。其他示例可在鎖定序列之前執(zhí)行第一指令,使得第一指令有效用于在使用鎖定序列實(shí)際實(shí)施鎖定之前為線程請(qǐng)求鎖定特權(quán)。在第二種情況中,對(duì)鎖定序列的進(jìn)展可取決于第一指令被成功執(zhí)行,這可取決于另一線程是否已具有鎖定。在其他實(shí)施例中,鎖定序列包含第一指令。換言之,鎖定序列向線程中的一者授權(quán)對(duì)共享資源的獨(dú)占訪問(wèn),且亦設(shè)定線程的鎖定參數(shù)以指示線程具有對(duì)共享資源的獨(dú)占訪問(wèn)。因此,存在實(shí)施鎖定序列及第一指令的不同方式。

類(lèi)似地,處理器可被配置為響應(yīng)于包含針對(duì)線程執(zhí)行的至少一個(gè)解鎖指令的解鎖序列放棄該線程對(duì)共享資源的獨(dú)占訪問(wèn)。解鎖序列可包含眾多不同指令,例如包括比較、加載或存儲(chǔ),該等指令引發(fā)特定線程失去對(duì)共享資源的獨(dú)占訪問(wèn)。可例如通過(guò)移除對(duì)資源的鎖定或通過(guò)將獨(dú)占訪問(wèn)傳遞至不同線程來(lái)放棄對(duì)資源的獨(dú)占訪問(wèn)。在解鎖序列內(nèi)可以是解鎖指令,該解鎖指令用于清除哪個(gè)線程具有對(duì)共享資源的獨(dú)占訪問(wèn)或指示特定線程不再具有對(duì)共享資源的訪問(wèn)權(quán)。換言之,解鎖指令可用于設(shè)定或清除變量以指示特定線程不再具有對(duì)共享資源的獨(dú)占訪問(wèn)。在一些實(shí)施例中,解鎖序列未包含第二指令。換言之,解鎖序列并不修改與線程關(guān)聯(lián)的鎖定參數(shù)以指示線程不再具有對(duì)此共享資源的獨(dú)占訪問(wèn)。因此,在代碼中執(zhí)行解鎖的一個(gè)或多個(gè)指令與代碼中設(shè)定鎖定參數(shù)以指示線程不再具有對(duì)共享資源的訪問(wèn)權(quán)的指令之間存在分隔。此針對(duì)上文所論述的后向兼容性原因而適用??稍诮怄i序列之后執(zhí)行第二指令。在其他實(shí)施例中,解鎖序列包含第二指令。

選擇器可被配置為優(yōu)先于由至少一個(gè)鎖定參數(shù)指示為不具有對(duì)共享資源的獨(dú)占訪問(wèn)的第二線程而選擇由至少一個(gè)鎖定參數(shù)指示為具有對(duì)共享資源的獨(dú)占訪問(wèn)的第一線程來(lái)作為選定線程。換言之,選擇器可被配置為使得具有對(duì)共享資源獨(dú)占訪問(wèn)的線程優(yōu)先。因此,此線程能夠完成它對(duì)共享資源的使用以便解鎖共享資源。此幫助防止死鎖,因?yàn)槿菰S執(zhí)行有能力解鎖共享資源的第一線程并從而解鎖共享資源。

選擇器可被配置為基于與線程的子集中的每一線程關(guān)聯(lián)的函數(shù)調(diào)用深度參數(shù)選擇選定線程。換言之,當(dāng)確定應(yīng)使用哪個(gè)線程的線程程序計(jì)數(shù)器來(lái)設(shè)定通用程序計(jì)數(shù)器時(shí),選擇器可考慮函數(shù)深度調(diào)用參數(shù)及至少一個(gè)鎖定參數(shù)兩者。

選擇器可被配置為基于與線程的子集中的每一線程關(guān)聯(lián)的線程程序計(jì)數(shù)器選擇選定線程。換言之,當(dāng)確定應(yīng)使用哪個(gè)線程程序計(jì)數(shù)器來(lái)設(shè)定為通用程序計(jì)數(shù)器時(shí),選擇器可考慮線程程序計(jì)數(shù)器及至少一個(gè)鎖定參數(shù)兩者。

可以不同方式實(shí)施對(duì)選定線程的選擇。在一些示例中,可直接選擇線程,且隨后此線程的線程程序計(jì)數(shù)器可用于通用程序計(jì)數(shù)器。在其他示例中,可使用給定程序計(jì)數(shù)器選擇算法選擇特定線程程序計(jì)數(shù)器(隱含選擇相應(yīng)線程作為選定線程)。因此,大體而言,在本申請(qǐng)案中提及的選擇選定線程意欲包含選擇與線程關(guān)聯(lián)的線程程序計(jì)數(shù)器之意。

鎖定參數(shù)可采用眾多不同形式。在一個(gè)示例中,子集內(nèi)的每一線程可具有相應(yīng)鎖定參數(shù)。當(dāng)獲得對(duì)共享資源的獨(dú)占訪問(wèn)的線程執(zhí)行第一指令時(shí),可修改此線程的鎖定參數(shù)以指示線程已經(jīng)獲得對(duì)資源的獨(dú)占訪問(wèn)。類(lèi)似地,當(dāng)線程放棄對(duì)線程的獨(dú)占訪問(wèn)時(shí),可響應(yīng)于針對(duì)此線程執(zhí)行的第二指令而修改相應(yīng)鎖定參數(shù)以指示線程不再具有對(duì)共享資源的獨(dú)占訪問(wèn)。舉例而言,每一線程的鎖定參數(shù)可指示多少共享資源當(dāng)前被此線程鎖定。在此情況中,處理器可在某一時(shí)間處容許多個(gè)線程具有對(duì)不同共享資源的獨(dú)占訪問(wèn)。當(dāng)選擇選定線程時(shí),選擇器可考慮線程的鎖定參數(shù)以便選擇第一組線程(例如,選擇具有指示鎖定資源的最高數(shù)目的鎖定參數(shù)的線程),且隨后基于函數(shù)調(diào)用深度在第一組線程中選擇第二組線程,且隨后基于與第二組線程中的線程關(guān)聯(lián)的線程程序計(jì)數(shù)器選擇第二組線程中的一者作為選定線程。此方法提供改良的性能,因?yàn)檫@使得多個(gè)線程同時(shí)對(duì)不同資源保持鎖定是可能的,使得它們都可彼此并行行進(jìn)。

換言之,選擇器可被配置為首先考慮線程的鎖定參數(shù),隨后考慮函數(shù)調(diào)用深度并最后考慮程序計(jì)數(shù)器。通過(guò)以此次序考慮參數(shù),可能使得在特定時(shí)刻執(zhí)行來(lái)自最適宜線程的指令。應(yīng)注意,可無(wú)需選擇器執(zhí)行對(duì)第一組或第二組的選擇。舉例而言,若僅單個(gè)線程具有期望的鎖定參數(shù),則此線程的線程程序計(jì)數(shù)器將用于設(shè)定通用程序計(jì)數(shù)器。類(lèi)似地,若第一組線程包含兩個(gè)線程及這兩個(gè)線程中的僅一者具有期望的函數(shù)調(diào)用深度,則可能不具體形成第二組線程,而是替代地,可將第一組線程中具有期望的函數(shù)調(diào)用深度的線程的線程程序計(jì)數(shù)器設(shè)定為通用程序計(jì)數(shù)器。換言之,盡管選擇器可被配置為執(zhí)行前文所論及的三個(gè)選擇,但可能不必始終在每個(gè)情況中實(shí)施三個(gè)選擇。

在另一示例中,至少一個(gè)鎖定參數(shù)可包含在線程的子集之間共享的共享鎖定參數(shù),及指示線程的子集中的何者具有對(duì)共享資源的獨(dú)占訪問(wèn)的鎖定所有者參數(shù)。在一些情況中,共享鎖定參數(shù)可包含鎖定計(jì)數(shù),該鎖定計(jì)數(shù)指示由鎖定所有者參數(shù)所指示的鎖定自有線程具有對(duì)多少資源的獨(dú)占訪問(wèn)。在其他情況中,共享鎖定參數(shù)可包含鎖定旗標(biāo),該鎖定旗標(biāo)指示當(dāng)前線程的子集中的任何一者是否具有對(duì)共享資源的獨(dú)占訪問(wèn)。在此示例中,處理器可確保在某一時(shí)間處線程的每個(gè)子集中僅一個(gè)線程被允許具有對(duì)共享資源的獨(dú)占訪問(wèn)。因此,若一個(gè)線程具有對(duì)第一共享資源的獨(dú)占訪問(wèn),則不允許第二線程對(duì)第二共享資源的獨(dú)占訪問(wèn)(甚至當(dāng)?shù)诙蚕碣Y源與第一共享資源不同時(shí)亦如此)。此方法提供針對(duì)在存在遞歸鎖定時(shí)可出現(xiàn)的死鎖的增加保護(hù),在遞歸鎖定中不同線程逐步鎖定一系列資源且隨后依次釋放鎖定。若已知待執(zhí)行的代碼不能包括此類(lèi)遞歸鎖定,則每一線程具有相應(yīng)鎖定參數(shù)的前述方法可以是優(yōu)選的以提升性能(且前述方法與現(xiàn)有技術(shù)相比仍大大減少了死鎖發(fā)生)。然而,若需要遞歸鎖定,則每次將鎖定限制于一個(gè)線程可提供針對(duì)死鎖的增加保護(hù)。在此情況中,不必為每一線程提供鎖定參數(shù),因?yàn)槊看蝺H一個(gè)線程可持有鎖定。替代地,指示哪個(gè)線程當(dāng)前持有鎖定的鎖定所有者參數(shù)線程及在線程的子集之間共享的鎖定參數(shù)(例如,指示由鎖定自有線程持有的線程數(shù)目的鎖定計(jì)數(shù))足以追蹤哪個(gè)線程持有鎖定,使得程序計(jì)數(shù)器的選擇可傾向于選擇持有鎖定的線程而非其他線程以避免死鎖并確保向前進(jìn)展。鎖定計(jì)數(shù)用于確保在允許其他線程持有鎖定之前再次放棄已由線程設(shè)定的全部鎖定。

在第二示例中,若至少一個(gè)鎖定參數(shù)指示線程具有對(duì)一個(gè)或多個(gè)共享資源的獨(dú)占訪問(wèn),則選擇器可選擇由鎖定參數(shù)所指示的鎖定自有線程作為選定線程,使得鎖定自有線程可取得進(jìn)展,使得最終該線程將釋放鎖定而另一線程可接著獲得鎖定。另一方面,若無(wú)線程持有鎖定,則對(duì)選定線程的選擇可基于函數(shù)調(diào)用深度及線程的線程程序計(jì)數(shù)器,如第一示例中所述。

在上文所論述的兩個(gè)示例中,至少一個(gè)鎖定參數(shù)可響應(yīng)于第一指令遞增及響應(yīng)于第二指令遞減(無(wú)論鎖定參數(shù)是線程的子集之間共享的,還是特定于單個(gè)線程的)。在一個(gè)示例中,鎖定參數(shù)可僅具有兩個(gè)狀態(tài):第一狀態(tài),指示線程具有對(duì)共享資源的獨(dú)占訪問(wèn),及第二狀態(tài),指示線程不具有對(duì)共享資源的獨(dú)占訪問(wèn)。此參數(shù)易于表示,因?yàn)檫@要求每個(gè)線程僅需要單個(gè)位。因此,需要非常小的空間且因此非常小的能量來(lái)表示每一線程的狀態(tài)。在其他實(shí)施例中,鎖定參數(shù)可指示線程具有獨(dú)占訪問(wèn)的共享資源的數(shù)目。換言之,鎖定參數(shù)可充當(dāng)計(jì)數(shù)器,該計(jì)數(shù)器在線程獲得對(duì)共享資源的獨(dú)占訪問(wèn)時(shí)遞增且在線程失去對(duì)共享資源的獨(dú)占訪問(wèn)時(shí)遞減。此系統(tǒng)為每一線程提供更好的優(yōu)先級(jí)指示符。具體地,可能想要使具有對(duì)若干共享資源的獨(dú)占訪問(wèn)的線程優(yōu)先于具有對(duì)僅一個(gè)共享資源的獨(dú)占訪問(wèn)的線程。然而,存儲(chǔ)此額外信息需要更多空間,且因此必須為系統(tǒng)中待執(zhí)行的每一線程投入更多能量。

由處理器執(zhí)行的線程的子集中的一個(gè)或多個(gè)可包含具有與選定線程的相應(yīng)線程參數(shù)相匹配的一個(gè)或多個(gè)線程參數(shù)的線程。在一個(gè)示例中,一個(gè)或多個(gè)線程參數(shù)可僅包含線程程序計(jì)數(shù)器。因此,所執(zhí)行的一個(gè)或多個(gè)線程可以是其線程程序計(jì)數(shù)器標(biāo)識(shí)由通用程序計(jì)數(shù)器標(biāo)識(shí)的相同指令的線程。換言之,數(shù)據(jù)處理設(shè)備可執(zhí)行其程序計(jì)數(shù)器與通用程序計(jì)數(shù)器相同的所有那些線程?;蛘撸司€程程序計(jì)數(shù)器之外,線程參數(shù)亦可包括函數(shù)調(diào)用深度參數(shù)或鎖定參數(shù)中的一者或兩者,使得針對(duì)具有匹配選定線程的線程參數(shù)的線程參數(shù)組合的線程執(zhí)行指令。以此方式,可同時(shí)針對(duì)多個(gè)線程執(zhí)行單個(gè)指令。

由數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令可以是微操作。在一些系統(tǒng)中,在到達(dá)處理器之前,復(fù)雜指令(例如,多重加載/存儲(chǔ)指令)可被分成微操作。因此,應(yīng)將本申請(qǐng)中對(duì)“指令”的引用解讀為指示指令或者對(duì)應(yīng)于指令之一部分的微操作。

可在至少一個(gè)預(yù)定義指令集中將第一指令及第二指令編碼為NOOP(無(wú)操作)指令。在此情況中,數(shù)據(jù)處理設(shè)備所使用的指令集為預(yù)定義指令集的增強(qiáng)版本。換言之,數(shù)據(jù)處理設(shè)備所使用的指令集可定義未在預(yù)定義指令集中定義的指令。作為在至少一個(gè)預(yù)定義指令集中將第一指令及第二指令編碼為NOOP指令的結(jié)果,在那些預(yù)定義指令集中可不考慮第一指令及第二指令。由于第一指令及第二指令將簡(jiǎn)單地對(duì)第二數(shù)據(jù)處理設(shè)備無(wú)效,經(jīng)寫(xiě)入以在數(shù)據(jù)處理設(shè)備上操作的代碼仍在實(shí)施預(yù)定義指令集的第二數(shù)據(jù)處理設(shè)備上正確執(zhí)行。因此,為數(shù)據(jù)處理設(shè)備寫(xiě)入的代碼可視為與舊式系統(tǒng)后向兼容。此意味著不必針對(duì)不同系統(tǒng)編碼不同版本的代碼,使得代碼開(kāi)發(fā)更有效率。

處理器可被配置為響應(yīng)于第一指令及第二指令中的至少一者來(lái)執(zhí)行另一操作。舉例而言,另一操作可為以下各項(xiàng)中的一者或多者:作為鎖定序列的一部分且用于獲得對(duì)共享資源的獨(dú)占訪問(wèn)的操作;作為解鎖序列的一部分且用于放棄對(duì)共享資源的獨(dú)占訪問(wèn)的操作;用于訪問(wèn)共享資源的操作;用于決定線程是否具有對(duì)共享資源的獨(dú)占訪問(wèn)的操作;以及比較與交換操作。此允許利用另一指令覆蓋更新線程的鎖定參數(shù)的功能以減少需要執(zhí)行的指令數(shù)目。

共享資源可包含存儲(chǔ)器中的數(shù)據(jù)。共享資源的其他示例可為硬件裝置、信道、或關(guān)鍵代碼區(qū)段。

處理器可被配置為在放棄對(duì)共享資源的獨(dú)占訪問(wèn)之前向存儲(chǔ)器發(fā)出存儲(chǔ)器屏障操作。存儲(chǔ)器系統(tǒng)可以與自處理器接收到事務(wù)的次序不同的次序處理事務(wù)。可由處理器發(fā)布存儲(chǔ)器屏障操作以控制存儲(chǔ)器可重新排序事務(wù)的程度。存儲(chǔ)器系統(tǒng)對(duì)存儲(chǔ)器操作的重新排序被禁止跨越存儲(chǔ)器屏障。亦即,盡管存儲(chǔ)器能夠自由地以任何次序處理連續(xù)的存儲(chǔ)器屏障操作之間的操作,但當(dāng)接收存儲(chǔ)器屏障操作時(shí),存儲(chǔ)器應(yīng)當(dāng)先于在存儲(chǔ)器屏障操作之后所接收的存儲(chǔ)器操作而處理在存儲(chǔ)器屏障操作之前所接收的全部存儲(chǔ)器操作。若沒(méi)有發(fā)布存儲(chǔ)器屏障,則存在以下風(fēng)險(xiǎn):在放棄對(duì)資源的獨(dú)占訪問(wèn)之后所發(fā)布的事務(wù)在獨(dú)占訪問(wèn)仍然被持有的同時(shí)被存儲(chǔ)器處理,這可導(dǎo)致不正確的數(shù)據(jù)值。通過(guò)在放棄對(duì)共享資源的獨(dú)占訪問(wèn)之前發(fā)布存儲(chǔ)器屏障操作,系統(tǒng)可確保每次僅由單個(gè)線程訪問(wèn)共享資源且確保存儲(chǔ)器中的數(shù)據(jù)一致性。

圖1示出根據(jù)一個(gè)實(shí)施例的數(shù)據(jù)處理設(shè)備100。由選擇器110將通用程序計(jì)數(shù)器120設(shè)定為與特定線程關(guān)聯(lián)的程序計(jì)數(shù)器184中的一者。隨后將通用程序計(jì)數(shù)器120的值發(fā)送至提取單元130,該提取單元提取由通用程序計(jì)數(shù)器120所指示的指令。將所提取的指令傳遞至譯碼指令的譯碼單元140,且將所譯碼的指令發(fā)送至發(fā)布單元150。發(fā)布單元150發(fā)布一個(gè)或多個(gè)信號(hào)至處理器160,以便針對(duì)線程中的一者或多者執(zhí)行所提取的指令。處理器160可能夠同時(shí)或?qū)嵸|(zhì)上同時(shí)針對(duì)一個(gè)或多個(gè)線程執(zhí)行指令。在一些實(shí)施例中,處理器160可具有用于處理每一相應(yīng)線程的并行功能單元使得針對(duì)多個(gè)線程并行執(zhí)行相同指令。其他系統(tǒng)可僅具有單個(gè)功能單元,使得在移動(dòng)到下一指令之前針對(duì)線程的子集中的各者依次處理相同指令。其他系統(tǒng)可具有一些并行單元,但比線程的總數(shù)少,使得針對(duì)眾多線程以小于線程總數(shù)的批量處理相同指令。

處理器160亦可訪問(wèn)存儲(chǔ)器170,該存儲(chǔ)器可包含高速緩存以及主存儲(chǔ)器。處理器亦可與可在其中加載或存儲(chǔ)數(shù)據(jù)值的寄存器文件180通信。在此實(shí)施例中,寄存器文件180包含針對(duì)每一線程的眾多不同硬件單元。舉例而言,圖1中所示的寄存器文件180針對(duì)每一線程包含一組寄存器182、程序計(jì)數(shù)器184、函數(shù)調(diào)用深度計(jì)數(shù)器186及鎖定計(jì)數(shù)器188。應(yīng)了解,與圖1所示不同的硬件配置可為可能的。舉例而言,單個(gè)寄存器組182可包含一個(gè)以上線程的寄存器。此外,所示硬件組件的子集可存在于寄存器文件180外部。

在本文所描述的實(shí)施例中,僅考慮單組線程,其中并行執(zhí)行那些線程的至少一子集。然而,應(yīng)了解,數(shù)據(jù)處理設(shè)備100不限于此配置。舉例而言,數(shù)據(jù)處理設(shè)備100可對(duì)線程的多個(gè)群組或子集執(zhí)行,其中能夠?qū)嵸|(zhì)上同時(shí)執(zhí)行線程的每一群組。因此,通用程序計(jì)數(shù)器120可包含一組通用程序計(jì)數(shù)器,組內(nèi)的每一通用程序計(jì)數(shù)器與線程的不同群組相關(guān)。此說(shuō)明書(shū)的其余部分僅考慮線程的單個(gè)群組(子集),但應(yīng)了解,當(dāng)存在多個(gè)線程群組時(shí),可將所描述的技術(shù)應(yīng)用于每一不同線程群組。

圖2示出執(zhí)行指令序列的線程T#0至T#31的單個(gè)群組。由于線程中的各者具有自身的寄存器且由于正受執(zhí)行的指令參考寄存器,線程中的各者可在執(zhí)行相同指令時(shí)不同地表現(xiàn)。指令0引發(fā)寄存器5及寄存器3中保持的數(shù)據(jù)值得以相加在一起并存儲(chǔ)于寄存器0中。若先前加法等于0,則第1行上的指令引發(fā)線程的執(zhí)行跳越至第3行處的“卷標(biāo)(label)”。在此情況中,由線程T#2執(zhí)行的加法結(jié)果(0+0)及由線程T#4執(zhí)行的加法結(jié)果(-1+1)兩者皆等于0,且因此對(duì)該等兩個(gè)線程的控制流程跳越至“卷標(biāo)”。其他線程并不跳越,反而繼續(xù)第2行處的指令。

因此,線程T#2及T#4的程序計(jì)數(shù)器等于3并且其余線程的程序計(jì)數(shù)器等于2。為了促成線程的收斂,將數(shù)據(jù)處理設(shè)備100的通用程序計(jì)數(shù)器120設(shè)定為全部線程中的最低線程程序計(jì)數(shù)器184(亦即,2)。通過(guò)以此方式選擇通用程序計(jì)數(shù)器120的值,可使得較不前進(jìn)的線程取得進(jìn)展,且因此追趕上其他線程,從而導(dǎo)致線程的收斂。此為所處的理想狀態(tài),因?yàn)殡S后系統(tǒng)的并行性被改善,亦即將并行執(zhí)行更多線程。因此,將通用程序計(jì)數(shù)器120設(shè)定為值2,該值為與任何線程關(guān)聯(lián)的最低程序計(jì)數(shù)器值。由于線程T#2及T#4不具有等于2的線程程序計(jì)數(shù)器,并未針對(duì)線程T#2及T#4執(zhí)行第2行處的指令。其余線程執(zhí)行第2行處的指令,從而引發(fā)寄存器0及寄存器4處的數(shù)據(jù)值彼此相乘,并存儲(chǔ)于寄存器6中。已執(zhí)行乘法,執(zhí)行指令的線程中的各者的線程程序計(jì)數(shù)器前進(jìn)到3。因此,全部線程具有相同程序計(jì)數(shù)器及實(shí)現(xiàn)收斂。第3行處的“指令”僅為卷標(biāo),且因此執(zhí)行行進(jìn)至第4行。此指令使得從主存儲(chǔ)器中訪問(wèn)存儲(chǔ)于寄存器9中的存儲(chǔ)器地址并且此地址處的數(shù)據(jù)值被存儲(chǔ)在寄存器8處。如圖2所示,由于線程中的各者在寄存器9中存儲(chǔ)不同存儲(chǔ)器地址值(例如,線程T#0存儲(chǔ)存儲(chǔ)器地址100,而線程T#5存儲(chǔ)存儲(chǔ)器地址200),線程中的各者將存取不同存儲(chǔ)器地址且因此在它們各自的寄存器8中存儲(chǔ)不同值??赡軐邢蛳嗤咚倬彺婢€或存儲(chǔ)器的相同頁(yè)的存儲(chǔ)器訪問(wèn)合并成單個(gè)存儲(chǔ)器訪問(wèn),以節(jié)省功率及時(shí)間。

圖3示出在兩個(gè)線程上執(zhí)行的代碼,其中代碼包含共享資源,經(jīng)由鎖定控制對(duì)該共享資源的訪問(wèn)權(quán)。此處,通過(guò)第7行與第9行之間的關(guān)鍵代碼區(qū)段訪問(wèn)共享資源。共享資源可為關(guān)鍵代碼區(qū)段所需要且每次一個(gè)線程需要對(duì)該資源獨(dú)占訪問(wèn)的任何東西。舉例而言,資源可為共享數(shù)據(jù)結(jié)構(gòu)或硬件單元或裝置的使用?;蛘撸蓪㈥P(guān)鍵代碼區(qū)段本身視為共享資源。在此示例中,選擇器110被配置為將通用程序計(jì)數(shù)器120設(shè)定為具有最高函數(shù)調(diào)用深度計(jì)數(shù)器186的線程的線程程序計(jì)數(shù)器184。在多個(gè)線程具有最高函數(shù)調(diào)用深度計(jì)數(shù)器186的情況下,將通用程序計(jì)數(shù)器120設(shè)定為在具有最高函數(shù)調(diào)用深度計(jì)數(shù)器186的線程間的最低程序計(jì)數(shù)器184。如先前所論述,在正常情況下,需要允許優(yōu)先于具有較高程序計(jì)數(shù)器值的線程而執(zhí)行具有最低程序計(jì)數(shù)器的線程,以便引發(fā)線程的收斂發(fā)生。然而,如將所示,當(dāng)存在關(guān)鍵代碼區(qū)段時(shí),此程序計(jì)數(shù)器選擇機(jī)制引發(fā)死鎖發(fā)生。

圖3的若干指令指示寄存器x19中的地址。此地址可對(duì)應(yīng)于一數(shù)據(jù)值,該數(shù)據(jù)值指示共享資源是否被線程鎖定用于獨(dú)占訪問(wèn)。在此示例中,當(dāng)寄存器所指示之地址處的值為0時(shí),則此指示未對(duì)第7行至第9行處的關(guān)鍵代碼區(qū)段所使用的資源設(shè)定鎖定,且當(dāng)此地址處的值為1,則已設(shè)定鎖定。然而,應(yīng)了解,存在表示是否已授權(quán)對(duì)資源的獨(dú)占訪問(wèn)的其他方式。應(yīng)注意,當(dāng)線程執(zhí)行此代碼示例時(shí),執(zhí)行第2行及第5行處的指令的不同線程可訪問(wèn)各自寄存器組182中的寄存器x19的不同版本,這可含有不同存儲(chǔ)器地址。因此,線程設(shè)法訪問(wèn)的共享資源可在線程之間不同。另一方面,若存在寄存器x19含有相同地址的多個(gè)線程,則存在下文所論述的潛在沖突。

最初,全部線程將步調(diào)一致地執(zhí)行。第0行包含卷標(biāo)且因此對(duì)執(zhí)行無(wú)效。第1行引發(fā)在寄存器w1中存儲(chǔ)數(shù)據(jù)值1。第2行處的指令被稱為加載獨(dú)占指令。此引發(fā)訪問(wèn)數(shù)據(jù)值及設(shè)定監(jiān)視器。監(jiān)視器偵測(cè)是否修改數(shù)據(jù)值。因此,在此示例中,寄存器x19中指示的存儲(chǔ)器地址中存儲(chǔ)的數(shù)據(jù)值被訪問(wèn),并被存儲(chǔ)在寄存器w0中,且針對(duì)此存儲(chǔ)器地址設(shè)定監(jiān)視器。在第3行處,寄存器w0中所存儲(chǔ)的數(shù)據(jù)值與數(shù)字0相比較。換言之,除了設(shè)定監(jiān)視器以外,第2行及第3行集體決定寄存器x19中所指示的存儲(chǔ)器地址中所存儲(chǔ)的數(shù)據(jù)值是否等于0。若數(shù)據(jù)值不相等,則第4行處的指令引發(fā)執(zhí)行跳越至第0行處的卷標(biāo)retry_lock。換言之,若存儲(chǔ)于寄存器w0中的數(shù)據(jù)值不等于0(亦即,另一線程已對(duì)共享資源具有鎖定),則控制流程返回至卷標(biāo)retry_lock,否則控制流程繼續(xù)第5行。因此,第2行至第4行處的指令檢查在執(zhí)行第2行處的加載指令時(shí)另一線程是否已具有鎖定。

另一方面,第5行至第6行處的指令檢查另一線程是否已在執(zhí)行第2行處的獨(dú)占加載指令之后但在開(kāi)始關(guān)鍵代碼區(qū)段之前的某點(diǎn)處獲得鎖定。此確保多個(gè)線程無(wú)法同時(shí)獲得鎖定。第5行為存儲(chǔ)獨(dú)占指令,該指令使得僅在先前設(shè)定的監(jiān)視器指示正被監(jiān)視的存儲(chǔ)器地址尚未被修改的時(shí)候存儲(chǔ)數(shù)據(jù)值。在此示例中,該指令使得:僅在由寄存器x19所指示的存儲(chǔ)器地址中存儲(chǔ)的數(shù)據(jù)值尚未被修改的時(shí)候(因?yàn)楸O(jiān)視器由第2行上的加載獨(dú)占指令建立)才將寄存器w1中所存儲(chǔ)的數(shù)據(jù)值(亦即,1)存儲(chǔ)在寄存器x19所指示的存儲(chǔ)器位置中。隨后在寄存器w2處存儲(chǔ)該存儲(chǔ)成功與否的結(jié)果。具體地,若存儲(chǔ)成功,則在w2中存儲(chǔ)值0。否則,若存儲(chǔ)不成功,則在w2存儲(chǔ)非零值。當(dāng)然,本領(lǐng)域技術(shù)人員應(yīng)了解,用于指示成功或失敗的具體數(shù)字并非重要,而且可易于對(duì)調(diào)這些數(shù)字。因?yàn)槿袅硪痪€程尚未修改寄存器x19所指示的地址中所存儲(chǔ)的數(shù)據(jù)值,才實(shí)施存儲(chǔ)操作,所以若寄存器x19的值對(duì)于全部線程相同,則恰好一個(gè)線程將修改數(shù)據(jù)值。若不同線程需要不同鎖定的資源,則可在不同線程的寄存器x19中置放不同地址,使得一個(gè)以上線程成功執(zhí)行第5行處的存儲(chǔ)指令是可能的。針對(duì)每一線程的存儲(chǔ)獨(dú)占指令的結(jié)果因此表現(xiàn)出此線程是否已獲取鎖定。在第6行處,實(shí)行比較以決定寄存器w2中所存儲(chǔ)的數(shù)據(jù)值是否為0(亦即,存儲(chǔ)獨(dú)占指令是否不成功)。若w2處所存儲(chǔ)的數(shù)據(jù)值不為0,則控制流程返回至第0行上的卷標(biāo)retry_lock。否則,流程繼續(xù)在第7行上。

第7行至第9行(圖3中未圖示)表示關(guān)鍵區(qū)段。亦即,鑒于先前鎖定序列,每次僅可由每個(gè)共享資源單個(gè)線程執(zhí)行關(guān)鍵區(qū)段(若使用不同資源,則多個(gè)線程可執(zhí)行關(guān)鍵區(qū)段)。在需要相同資源的另一線程可進(jìn)入之前,線程必須完成關(guān)鍵區(qū)段中的執(zhí)行代碼。關(guān)鍵區(qū)段可包括:利用共享資源的任何指令,諸如訪問(wèn)共享位置或共享數(shù)據(jù)結(jié)構(gòu)的加載/存儲(chǔ)指令,對(duì)于共享位置或共享數(shù)據(jù)結(jié)構(gòu)需要獨(dú)占訪問(wèn)以維護(hù)數(shù)據(jù)一致性;或利用每次僅可由一個(gè)線程使用的硬件裝置的指令。

解鎖序列被示出始于第10行。在已執(zhí)行關(guān)鍵區(qū)段之后執(zhí)行此代碼。在第10行處,在寄存器w1中存儲(chǔ)數(shù)據(jù)值0。在第11行處,將存儲(chǔ)于寄存器w1中的數(shù)據(jù)值(亦即,0)存儲(chǔ)在寄存器x19中所指示的存儲(chǔ)器位置中,以指示此線程不再具有鎖定。此意味著,到達(dá)第2行至第4行處的指令的另一線程現(xiàn)可成功獲取鎖定。

如前文所論及的,若多個(gè)線程試圖獲得相同鎖定(亦即,在不同線程的寄存器組182中的寄存器x19的各個(gè)版本指示相同存儲(chǔ)器位置),則用于向關(guān)鍵區(qū)段提供鎖定的代碼可引發(fā)在SIMT數(shù)據(jù)處理設(shè)備中發(fā)生死鎖。舉例而言,如圖3所示,線程T#0可為獲取對(duì)鎖定的訪問(wèn)權(quán)且因此繼續(xù)代碼的第7行的線程。然而,線程T#1(及靶向相同資源的其他線程)將無(wú)法獲取鎖定。因此,在代碼的第一次執(zhí)行中,在無(wú)法獲得鎖定引發(fā)控制流程返回至第0行之前,除線程T#0以外的線程將執(zhí)行直至代碼的第6行。對(duì)于后續(xù)嘗試,除線程T#0以外的線程將執(zhí)行直至第4行,因?yàn)榫€程T#0現(xiàn)已將值#1存儲(chǔ)至寄存器x19中所指示的地址。全部線程具有相同函數(shù)調(diào)用深度計(jì)數(shù)器值1。因此,選擇器110將通用程序計(jì)數(shù)器120設(shè)定為與線程中的各者關(guān)聯(lián)的最低線程程序計(jì)數(shù)器184。除線程T#0以外的全部線程具有程序計(jì)數(shù)器值0,且因此通用程序計(jì)數(shù)器值120將被設(shè)定為0。因此,將允許執(zhí)行除線程T#0以外的線程。然而,那些線程將仍無(wú)法獲取對(duì)關(guān)鍵區(qū)段的鎖定,因?yàn)橛蒚#0持有鎖定。在第4行處,那些線程的控制流程將因此傳到第0行。再次,當(dāng)由選擇器110對(duì)程序計(jì)數(shù)器值做出選擇時(shí),除線程T#0以外的線程具有程序計(jì)數(shù)器值(0),該程序計(jì)數(shù)器值比線程T#0的程序計(jì)數(shù)器值(7)低。因此,通用程序計(jì)數(shù)器值120將被設(shè)定為0且將允許執(zhí)行除線程T#0以外的線程。此過(guò)程將繼續(xù),可能永遠(yuǎn)進(jìn)行下去。僅線程T#0能夠解鎖對(duì)關(guān)鍵區(qū)段的訪問(wèn)權(quán),且線程T#0僅可在已執(zhí)行關(guān)鍵區(qū)段之后解鎖對(duì)關(guān)鍵區(qū)段的訪問(wèn)權(quán)。然而,線程T#0無(wú)法執(zhí)行關(guān)鍵區(qū)段,因?yàn)樵摼€程的程序計(jì)數(shù)器值比其他線程的程序計(jì)數(shù)器值高,且因此決不將通用程序計(jì)數(shù)器120設(shè)定為與線程T#0關(guān)聯(lián)的線程程序計(jì)數(shù)器。因此,在此示例中,發(fā)生死鎖。無(wú)線程可取得任何進(jìn)展且因此系統(tǒng)停滯。

圖4示出對(duì)此死鎖問(wèn)題的解決方案。在此實(shí)施例中,為每一線程提供鎖定計(jì)數(shù)器188,且選擇器110被配置為除了函數(shù)調(diào)用深度及線程程序計(jì)數(shù)器之外基于鎖定計(jì)數(shù)器選擇選定線程(將該選定線程的線程程序計(jì)數(shù)器設(shè)定為通用程序計(jì)數(shù)器)。將通用程序計(jì)數(shù)器120設(shè)定為與具有最高鎖定計(jì)數(shù)器188的線程關(guān)聯(lián)的線程程序計(jì)數(shù)器184。若多個(gè)線程具有最高鎖定計(jì)數(shù)器188,則在具有最高鎖定計(jì)數(shù)器188的線程中考慮具有最高函數(shù)調(diào)用深度計(jì)數(shù)器186的線程。若多個(gè)線程具有最高鎖定計(jì)數(shù)器188及最高函數(shù)調(diào)用深度計(jì)數(shù)器186,則在那些線程中選擇具有最低程序計(jì)數(shù)器值的線程。隨后基于選定線程的線程程序計(jì)數(shù)器更新通用程序計(jì)數(shù)器,且隨后可針對(duì)具有匹配線程參數(shù)(至少匹配的線程程序計(jì)數(shù)器,且視情況還有匹配的函數(shù)調(diào)用深度及鎖定參數(shù))的任何線程執(zhí)行由通用程序計(jì)數(shù)器所指示的指令。應(yīng)了解,其他實(shí)施例可應(yīng)用不同機(jī)制,其中直接選擇特定線程程序計(jì)數(shù)器或者線程程序計(jì)數(shù)器、函數(shù)調(diào)用參數(shù)與鎖定參數(shù)的特定組合(而非選擇線程)。

圖4的代碼與圖3的代碼相同,其中在第6行及第12行處分別多了兩個(gè)新指令。這些指令引發(fā)與線程關(guān)聯(lián)的鎖定計(jì)數(shù)器188條件性遞增及遞減。具體地,第6行上的指令“cond_inc_lock_count w2”在w2值為零情況下引發(fā)與線程關(guān)聯(lián)的鎖定計(jì)數(shù)器188遞增。如參考圖3所解釋的,將w2值設(shè)定為0或者1,其中值0表示STXR指令成功(亦即,線程已成功獲取鎖定),而1表示STXR指令失敗(亦即,線程無(wú)法獲取鎖定)。因此,若此線程已設(shè)法完成在第5行上的行進(jìn)指令中獲取鎖定,第6行上的指令引發(fā)特定線程的鎖定計(jì)數(shù)器188遞增。第12行處的指令“dec_lock_count”使特定線程的鎖定計(jì)數(shù)器188遞減。此指令為無(wú)條件的。此原因在于每次僅通過(guò)單個(gè)線程(具體地,當(dāng)前保持鎖定且因此具有對(duì)關(guān)鍵區(qū)段的訪問(wèn)權(quán)的線程)執(zhí)行第8行至第12行處的代碼。因此,關(guān)于應(yīng)使哪個(gè)線程的鎖定計(jì)數(shù)器遞減不存在歧義。

當(dāng)代碼執(zhí)行時(shí),作為第6行處的指令的結(jié)果,獲取鎖定的線程(T#0)使得它的鎖定計(jì)數(shù)器遞增。反之,其他線程并未使自身的鎖定計(jì)數(shù)器遞增,因?yàn)樗鼈兊募拇嫫髦祑2將為非零(未能獲取鎖定)。在第7行處,線程T#0將繼續(xù)至第8行上,但其余線程將返回至第0行處的卷標(biāo)“retry_lock”。如前文所解釋,在此實(shí)施例中,選擇器110被配置為將通用程序計(jì)數(shù)器120設(shè)定為具有最高鎖定計(jì)數(shù)器的線程的程序計(jì)數(shù)器。因此,當(dāng)線程T#0的程序計(jì)數(shù)器為8時(shí),此線程將能夠鑒于自身的較高鎖定計(jì)數(shù)器188繼續(xù)執(zhí)行,即便是該線程的程序計(jì)數(shù)器182比其他線程的程序計(jì)數(shù)器更高。因此,線程T#0能夠繼續(xù)執(zhí)行且將最終執(zhí)行第10行至第11行上的解鎖序列的代碼,從而釋放鎖定。隨后,線程T#0繼續(xù)第12行,在該線處使線程的鎖定計(jì)數(shù)器遞減。在此點(diǎn)處,線程中的各者的鎖定計(jì)數(shù)器等于0,線程中的各者的函數(shù)調(diào)用深度等于1,且因此,將通用程序計(jì)數(shù)器120設(shè)定為全部線程中的最低線程程序計(jì)數(shù)器184。因此,容許除線程T#0外的線程執(zhí)行,且它們執(zhí)行第0行與第7行之間的代碼。在此執(zhí)行期間,線程中的一者將獲取鎖定并如前文所描述使得該線程的鎖定計(jì)數(shù)器188遞增。此序列將重復(fù),直至全部線程已通過(guò)關(guān)鍵代碼區(qū)段。因此,盡管存在關(guān)鍵代碼區(qū)段,但避免了死鎖情形。

在圖4的此示例中,cond_inc_lock_count及dec_lock_count指令僅影響與特定線程關(guān)聯(lián)的鎖定計(jì)數(shù)器188。然而,應(yīng)了解,這些指令可執(zhí)行額外操作。舉例而言,條件性遞增指令可與第5行上的獨(dú)占存儲(chǔ)指令或者第7行上的比較分支指令組合。在此情況中,在關(guān)于比較與分支指令的操作之前或并行地及在關(guān)于獨(dú)占存儲(chǔ)指令的操作之后實(shí)施條件性遞增指令。類(lèi)似地,遞減鎖定計(jì)數(shù)器指令可與其他操作組合。舉例而言,遞減鎖定計(jì)數(shù)器指令可與在由寄存器x19指向的地址中存儲(chǔ)數(shù)值0的指令組合。

亦存在實(shí)施鎖定序列的眾多方式。在圖4的示例中,使用第2行上的加載獨(dú)占指令與第5行上的存儲(chǔ)獨(dú)占指令的組合。實(shí)施鎖定機(jī)制的另一方式可經(jīng)由使用比較與交換指令(CMPXCHG)。比較與交換指令為原子基元。換言之,指令無(wú)法中斷中間執(zhí)行,而是替代地,一旦已開(kāi)始,便執(zhí)行至完成。比較與交換指令采用三個(gè)參數(shù)。參數(shù)中的一者為存儲(chǔ)器中的位置。另一參數(shù)為比較值及又一參數(shù)為存儲(chǔ)值。比較與交換指令測(cè)試存儲(chǔ)器中的位置處的數(shù)據(jù)值是否等于比較值,且若是,則將存儲(chǔ)值寫(xiě)入到存儲(chǔ)器位置中且回傳指示操作成功的結(jié)果。若存儲(chǔ)器位置處的數(shù)據(jù)值不等于比較值,則沒(méi)有東西被寫(xiě)入至存儲(chǔ)器位置(存儲(chǔ)器位置保留原始值),且結(jié)果反而指示操作不成功。再次,此比較與交換指令可與其他操作組合并可與cond_inc_lock_count指令組合。

可在dec_lock_count指令之前及關(guān)鍵代碼區(qū)段之后執(zhí)行存儲(chǔ)器屏障操作。在數(shù)據(jù)處理設(shè)備中,可為了效率重新排序存儲(chǔ)器存取指令。然而,不可跨存儲(chǔ)器屏障發(fā)生此重新排序。因此,存儲(chǔ)器屏障可幫助確保先于在已完成關(guān)鍵區(qū)段之后發(fā)布的存儲(chǔ)器存取操作處理作為關(guān)鍵代碼區(qū)段的一部分的存儲(chǔ)器存取操作。

cond_inc_lock_count指令及dec_lock_count指令可各自經(jīng)編碼以使得在預(yù)定指令集中,cond_inc_lock_count指令及dec_lock_count指令的編碼對(duì)應(yīng)于NOOP指令。舉例而言,數(shù)據(jù)處理設(shè)備100所使用的指令集可為將這兩個(gè)指令編碼為NOOP指令的指令集的增強(qiáng)版本。因此,在除數(shù)據(jù)處理設(shè)備100以外的數(shù)據(jù)處理設(shè)備上,兩個(gè)指令可能無(wú)效。因此,經(jīng)設(shè)計(jì)用于數(shù)據(jù)處理設(shè)備100的代碼可與其他數(shù)據(jù)處理設(shè)備后向兼容,且可與未使用SIMT的數(shù)據(jù)處理設(shè)備后向兼容。

圖5示出了選擇選定線程的方法,將該選定線程的線程程序計(jì)數(shù)器用作通用程序計(jì)數(shù)器120。方法從步驟s200處開(kāi)始,其中將第一組及第二組兩者皆設(shè)定為空組。在步驟s205處,從全部線程中選擇下一線程。此步驟與步驟s210、s215及s220一起集體形成迭代通過(guò)全部線程的回路。在步驟s210處,確定步驟s205處所選定的線程的鎖定參數(shù)(亦即,鎖定計(jì)數(shù)器188)是否等于全部線程中的最高鎖定參數(shù)。若此線程的鎖定參數(shù)等于全部線程中的最高鎖定參數(shù),則流程行進(jìn)至步驟s215,否則流程繼續(xù)步驟s220。假定在步驟s210中,數(shù)據(jù)處理設(shè)備知曉全部線程中的最高鎖定參數(shù)。若此信息并不易于取得,可通過(guò)首先迭代通過(guò)全部線程或通過(guò)保持自先前線程可見(jiàn)的最高鎖定參數(shù)的運(yùn)轉(zhuǎn)計(jì)數(shù)且當(dāng)遇到比先前最高鎖定參數(shù)更高的鎖定參數(shù)時(shí)刪除已添加至第一組中的線程來(lái)確定。在步驟s215處,將選定線程添加至第一組,且流程隨后行進(jìn)至步驟s220。在步驟s220處,確定是否存在更多線程要迭代通過(guò)。若存在更多線程,則流程返回到步驟s205,在該步驟處選擇下一線程。若不存在更多線程,則流程繼續(xù)步驟s225。因此,在步驟s220結(jié)束時(shí),第一組線程被確定,該組線程包含具有等于任何線程的較高鎖定參數(shù)的鎖定參數(shù)的線程。步驟s225確定在第一組中是否存在恰好一個(gè)條目。若在第一組中存在恰好一個(gè)條目,則流程繼續(xù)步驟s230,在該步驟處將第一組中的項(xiàng)目被返回作為選定線程。亦即,將通用程序計(jì)數(shù)器120設(shè)定成與第一組中的唯一線程關(guān)聯(lián)的線程程序計(jì)數(shù)器184。若在步驟s225處在第一組中不存在恰好一個(gè)條目,則流程繼續(xù)步驟s235??偟膩?lái)說(shuō),步驟s205至s230試圖使線程程序計(jì)數(shù)器選擇的確定基于全部線程的鎖定計(jì)數(shù)參數(shù)。若線程中的一者具有比全部其他線程更高的鎖定計(jì)數(shù)器參數(shù),則此線程為選定線程且將通用程序計(jì)數(shù)器120設(shè)定為與具有較高鎖定計(jì)數(shù)器參數(shù)188的線程對(duì)應(yīng)的線程程序計(jì)數(shù)器184。否則,如下文所解釋來(lái)實(shí)施線程的進(jìn)一步收縮。

在步驟s235處,自第一組選擇下一線程。步驟s235至s250集體形成迭代通過(guò)第一組中的全部線程的回路。在步驟s240處,確定所選線程的函數(shù)調(diào)用深度是否等于第一組中的全部線程中的最高函數(shù)調(diào)用深度。再次,假定確定第一組中的全部線程中的最高函數(shù)調(diào)用深度是可能的??纱_定此信息的一種方式為先迭代通過(guò)第一組中的全部線程,或如上文所論述的藉由維護(hù)運(yùn)轉(zhuǎn)計(jì)數(shù)值。若在步驟s240處所選線程的函數(shù)調(diào)用深度等于第一組中的全部線程中的最高函數(shù)調(diào)用深度,則流程繼續(xù)步驟s245。否則,流程繼續(xù)步驟s250。在步驟s245處,將所選線程添加至第二組,且流程繼續(xù)步驟s250。在步驟s250處,確定在第一組中是否存在更多線程得以迭代通過(guò)。若在第一組中存在更多線程,則流程返回至步驟s235以繼續(xù)回路。否則,流程繼續(xù)步驟s255,在該步驟處確定在第二組中是否存在恰好一個(gè)條目。若在步驟s255處在第二組中存在恰好一個(gè)條目,則流程繼續(xù)步驟s260。在步驟s260處,將第二組中的單個(gè)條目返回作為選定線程。換言之,將通用程序計(jì)數(shù)器120設(shè)定成與第二組中的單個(gè)線程關(guān)聯(lián)的線程程序計(jì)數(shù)器184。舉例而言,若一個(gè)以上線程共享最高鎖定計(jì)數(shù)器參數(shù)188,但若那些線程中的僅一者具有最高函數(shù)調(diào)用深度計(jì)數(shù)器186,則可出現(xiàn)此情形。因此,通過(guò)將通用程序計(jì)數(shù)器120設(shè)定成與此線程關(guān)聯(lián)的線程程序計(jì)數(shù)器184來(lái)允許執(zhí)行此線程。集體而言,步驟s235至s260與用于確定通用程序計(jì)數(shù)器120的第二標(biāo)準(zhǔn)相關(guān)。

若在第二組中不存在恰好一個(gè)條目,則流程行進(jìn)至步驟s265,在該步驟處將第二組中具有最低程序計(jì)數(shù)器184的條目返回作為選定線程。換言之,將通用程序計(jì)數(shù)器120設(shè)定成第二組中的全部線程中的線程程序計(jì)數(shù)器184中的最低者。因此,步驟s265提供第三標(biāo)準(zhǔn)以決定通用程序計(jì)數(shù)器120。

圖6示出如何選擇每一循環(huán)中執(zhí)行的線程。在步驟s400處,基于鎖定參數(shù)(鎖定計(jì)數(shù)器)188、函數(shù)調(diào)用深度計(jì)數(shù)器186及線程程序計(jì)數(shù)器184選擇多個(gè)線程中的一者(或等效地,對(duì)應(yīng)于線程的線程程序計(jì)數(shù)器中的一者)。關(guān)于圖5示出此過(guò)程的示例。在步驟s410處,將通用程序計(jì)數(shù)器120設(shè)定為選定線程的線程程序計(jì)數(shù)器。換言之,通用程序計(jì)數(shù)器120經(jīng)設(shè)定以匹配與步驟s400中所選定的線程對(duì)應(yīng)的線程程序計(jì)數(shù)器184。最后,在步驟s420處,針對(duì)所關(guān)聯(lián)的線程參數(shù)匹配選定線程的線程參數(shù)的全部線程執(zhí)行由通用程序計(jì)數(shù)器120所標(biāo)識(shí)的指令(線程參數(shù)可僅包含線程程序計(jì)數(shù)器184,或可包含線程程序計(jì)數(shù)器與鎖定計(jì)數(shù)器188及函數(shù)調(diào)用深度186中的一者或兩者的組合)。此過(guò)程可引發(fā)與每一線程關(guān)聯(lián)的線程程序計(jì)數(shù)器184改變,且因此隨后從步驟s400處開(kāi)始重復(fù)該過(guò)程,從而引發(fā)確定不同通用程序計(jì)數(shù)器值120。

在關(guān)于圖4所論述的示例中,處理器有利地嘗試為扭曲中的全部線程獲取鎖定且隨后基于哪些線程能夠獲取鎖定來(lái)對(duì)執(zhí)行偏好次序進(jìn)行分類(lèi)。

參考圖7至圖9描述第二實(shí)施例。在此實(shí)施例中,每次允許群組中的僅一個(gè)線程保持鎖定。再者,盡管在圖4中處理器有利地嘗試使用包括STXR指令的鎖定序列為全部線程獲取鎖定,且隨后僅在成功時(shí)使鎖定計(jì)數(shù)遞增以發(fā)出信號(hào)指示線程獲得鎖定特權(quán),但是在圖7至圖9中翻轉(zhuǎn)次序,使得首先執(zhí)行指令以請(qǐng)求鎖定特權(quán)并因此更新鎖定參數(shù)。在此點(diǎn)處,處理器確保僅一個(gè)線程可成功執(zhí)行請(qǐng)求鎖定特權(quán)的指令(對(duì)于其他線程,這個(gè)指令的執(zhí)行失效,且因此此線程的線程程序計(jì)數(shù)器并未遞增)。已獲得鎖定特權(quán),成功的線程隨后執(zhí)行鎖定序列以獲得鎖定。以此方式,在任何時(shí)間點(diǎn)處允許群組中的僅一個(gè)線程保持鎖定。解鎖序列仍與圖4相同,首先釋放鎖定,隨后釋放鎖定特權(quán)。單個(gè)線程在持有鎖定特權(quán)的同時(shí)可多次請(qǐng)求鎖定,且可使用鎖定計(jì)數(shù)器追蹤由線程所保持的鎖定數(shù)目。盡管可能用與第一實(shí)施例相同的方式實(shí)施第二實(shí)施例,其中每個(gè)線程具有鎖定計(jì)數(shù)器并具有偏好較高鎖定計(jì)數(shù)的程序計(jì)數(shù)器選擇機(jī)制,因?yàn)槊看螌㈡i定特權(quán)(執(zhí)行偏好)給予每群組的單個(gè)線程,但是可通過(guò)以下方式來(lái)簡(jiǎn)化這一方案:為作為整體的群組存儲(chǔ)該群組中的任何線程是否具有鎖定特權(quán)的單個(gè)指示、此線程的標(biāo)識(shí)、以及群組的單個(gè)鎖定計(jì)數(shù)器。

因此,圖7示出寄存器文件180及供此第二實(shí)施例使用的狀態(tài)數(shù)據(jù)的示例。圖7與圖1的寄存器文件的不同在于并未向每一線程提供鎖定計(jì)數(shù)器188。替代地,除了線程的群組的通用程序計(jì)數(shù)器120之外,在線程的群組之間共享眾多鎖定參數(shù):

·鎖定設(shè)定旗標(biāo)500,指示群組中的任何線程是否已針對(duì)一個(gè)或多個(gè)共享資源鎖定;

·鎖定所有者參數(shù)502,指示群組中的哪個(gè)線程已鎖定一個(gè)或多個(gè)共享資源;及

·鎖定計(jì)數(shù)參數(shù)504,指示由鎖定所有者參數(shù)502所指示的鎖定自有線程已鎖定多少資源。

在一些示例中,可省略鎖定設(shè)定旗標(biāo)500且替代地,可使用鎖定所有者參數(shù)502或鎖定計(jì)數(shù)參數(shù)504發(fā)出信號(hào)指示線程是否保持鎖定。舉例而言,若鎖定計(jì)數(shù)參數(shù)504為零,則此可發(fā)出信號(hào)指示無(wú)線程保持鎖定,且若鎖定計(jì)數(shù)參數(shù)504具有非零值,則此可發(fā)出信號(hào)指示線程保持鎖定。或者,鎖定所有者參數(shù)502可在線程中的一者保持鎖定的情況下具有對(duì)應(yīng)于該線程的值,且在無(wú)線程保持鎖定的情況下具有并未對(duì)應(yīng)于線程中的任何者的值,因此可有效指示是否已設(shè)定任何鎖定。然而,有時(shí),提供指示是否已設(shè)定任何鎖定的獨(dú)立鎖定設(shè)定旗標(biāo)500可為有用的,例如原因在于鎖定設(shè)定旗標(biāo)500可包含單個(gè)位,檢查該單個(gè)位比檢查對(duì)應(yīng)于鎖定所有者參數(shù)502或鎖定計(jì)數(shù)值504的多位值更快且更有能量效率。

圖8示出了用于第二實(shí)施例的代碼示例,如下:

第0行:表示鎖定序列開(kāi)始的卷標(biāo),該卷標(biāo)并未引發(fā)處理器處的任何特定動(dòng)作。

第1行:inc_lock_count為請(qǐng)求鎖定特權(quán)(用于線程為資源設(shè)定一個(gè)或多個(gè)鎖定的權(quán)利)的指令。僅可針對(duì)群組中的一個(gè)線程成功執(zhí)行此指令。因此,在此指令之后,一個(gè)線程可行進(jìn)至下一指令(其中使此線程的程序計(jì)數(shù)器遞增至下一指令),而其他線程無(wú)法成功執(zhí)行此指令(且因此它們的線程程序計(jì)數(shù)器保留在相同指令inc_lock_count處,直至可成功執(zhí)行此指令)。若成功執(zhí)行inc_lock_count,則設(shè)定鎖定設(shè)定旗標(biāo)500以指示線程保持鎖定特權(quán),設(shè)定鎖定所有者參數(shù)502以指示當(dāng)前線程的標(biāo)識(shí)符,且使鎖定計(jì)數(shù)504遞增。

第2行:用于在具有鎖定特權(quán)的線程無(wú)法獲得鎖定的情況下分支到的卷標(biāo)retry_lock,。

第3行至第5行:與圖4的第1行至第3行相同,用于檢查另一進(jìn)程(例如,線程的當(dāng)前群組外部的線程,或例如在多處理器系統(tǒng)中的不同處理器上執(zhí)行的進(jìn)程)是否已獲得由寄存器x19中的地址所標(biāo)識(shí)的、針對(duì)資源的鎖定。

第6行:條件性分支,在另一進(jìn)程持有針對(duì)x19中所標(biāo)識(shí)的地址的鎖定的情況下分支至第10行至第12行處的“后退”序列。

第7行至第8行:與圖4的第5行及第7行相同。針對(duì)寄存器x19中的地址設(shè)定鎖定的存儲(chǔ)獨(dú)占指令,及條件性分支,若存儲(chǔ)獨(dú)占指令失效,則分支回到第2行。與圖4的第6行不同,若成功獲取鎖定,則不存在條件性指令使鎖定計(jì)數(shù)遞增,因?yàn)樵趫D8中,鎖定計(jì)數(shù)已在第1行處遞增。

第9行:若成功獲取鎖定,則分支至第13行以使用已鎖定的資源進(jìn)行操作。

第10行:卷標(biāo)“backoff_lock”表示后退序列的開(kāi)始,該后退序列用于在已設(shè)定由寄存器x19中的地址所標(biāo)識(shí)的、針對(duì)資源的鎖定的情況下放棄鎖定特權(quán)。通過(guò)放棄鎖定特權(quán),可在其版本的寄存器x19中具有不同地址的另一線程可能能夠成功獲得自身的鎖定,并取得進(jìn)展。

第11行:使鎖定計(jì)數(shù)504遞減。若此導(dǎo)致鎖定計(jì)數(shù)504變成零,則亦清除鎖定設(shè)定旗標(biāo)500,使得另一線程可獲得鎖定特權(quán)。在第11行之后,線程可等待一些時(shí)間以允許相同群組中的其他線程有時(shí)間完成使用鎖定的處理及釋放該鎖定。

第12行:分支回到第0行處的鎖定序列的開(kāi)始以再次努力獲得鎖定。

第13行:卷標(biāo)“l(fā)ock_acquired”表示成功獲取鎖定情況下執(zhí)行的序列開(kāi)始。在此之后,可使用已鎖定資源執(zhí)行任何數(shù)目的指令。

第14行:一旦完成使用已鎖定資源的處理,隨后便開(kāi)始解鎖序列。

第15行至第17行:與圖4的第10行至第12行相同以放棄鎖定,只是在此情況中若執(zhí)行dec_lock_count指令及此導(dǎo)致鎖定計(jì)數(shù)504變成零,則對(duì)鎖定設(shè)定旗標(biāo)500清零。

因此,在此示例下,每次相同的線程群組內(nèi)僅一個(gè)線程可保持鎖定,以提供防止死鎖的額外保護(hù)。

圖9示出當(dāng)使用第二實(shí)施例時(shí)選擇選定線程(且因此將哪個(gè)線程程序計(jì)數(shù)器設(shè)定為線程群組的通用程序計(jì)數(shù)器)的方法。由于群組內(nèi)每次僅一個(gè)線程可保持鎖定,程序計(jì)數(shù)器選擇過(guò)程的初始部分變得更簡(jiǎn)單。在步驟600處,選擇器110確定鎖定設(shè)定旗標(biāo)500是否指示群組內(nèi)的任何線程是否持有鎖定。若是,則在步驟602處,選擇器110選擇由鎖定所有者參數(shù)502所指示的線程作為選定線程。

另一方面,若鎖定設(shè)定旗標(biāo)500指示群組中無(wú)線程當(dāng)前持有鎖定,則在步驟604處,將群組(子集)中的全部線程視為線程的“第一組”中的一部分。方法隨后行進(jìn)至圖5的步驟S225,且之后,方法隨后以與圖5相同的方式行進(jìn),以基于函數(shù)調(diào)用深度及線程程序計(jì)數(shù)器選擇選定線程。

已選擇選定線程,可如前所述應(yīng)用圖6的步驟S410及S420。

在本申請(qǐng)中,詞語(yǔ)“被配置為…”被用于表示設(shè)備中的元件具有能夠執(zhí)行定義的操作的配置。在此上下文中,“配置”意味著硬件或軟件的互連的布置或方式。例如,設(shè)備可具有提供所定義的操作的專用硬件,或者處理器或其它處理裝置可被編程以執(zhí)行功能?!氨慌渲脼椤辈⒉话凳驹O(shè)備元件需要以任何方式被改變從而提供所定義的操作。

盡管本文已參照附圖詳細(xì)描述本技術(shù)的說(shuō)明性實(shí)施例,但要理解,本技術(shù)不限于那些精確實(shí)施例,且本領(lǐng)域技術(shù)人員可在不脫離由所附權(quán)利要求定義的技術(shù)的范圍和精神的情況下實(shí)行各種變化、添加及修改。舉例而言,可在不脫離本技術(shù)的范疇的情況下利用獨(dú)立權(quán)利要求的特征進(jìn)行從屬權(quán)利要求的特征的各種組合。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
徐汇区| 海阳市| 青海省| 宣城市| 西乌| 东乡| 余干县| 绥中县| 同江市| 西林县| 金阳县| 安达市| 泰宁县| 成安县| 道孚县| 安宁市| 大悟县| 太原市| 盐边县| 伊金霍洛旗| 金秀| 安徽省| 平和县| 莲花县| 荃湾区| 忻州市| 苏尼特右旗| 探索| 广安市| 金阳县| 讷河市| 宁陕县| 天峨县| 瑞安市| 青海省| 筠连县| 平潭县| 安溪县| 关岭| 石渠县| 宁波市|