TW201617859A - 用於執行複數個執行緒之資料處理設備中之共享資源 - Google Patents
用於執行複數個執行緒之資料處理設備中之共享資源 Download PDFInfo
- Publication number
- TW201617859A TW201617859A TW104127210A TW104127210A TW201617859A TW 201617859 A TW201617859 A TW 201617859A TW 104127210 A TW104127210 A TW 104127210A TW 104127210 A TW104127210 A TW 104127210A TW 201617859 A TW201617859 A TW 201617859A
- Authority
- TW
- Taiwan
- Prior art keywords
- thread
- lock
- threads
- subset
- data processing
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 67
- 230000004044 response Effects 0.000 claims abstract description 25
- 230000006870 function Effects 0.000 claims description 47
- 230000004888 barrier function Effects 0.000 claims description 13
- 238000003672 processing method Methods 0.000 claims description 4
- 230000007717 exclusion Effects 0.000 claims description 2
- 238000000034 method Methods 0.000 description 23
- 230000008569 process Effects 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000000605 extraction Methods 0.000 description 3
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
資料處理設備100執行執行緒且包括通用程式計數器(PC)120,該通用程式計數器識別將針對至少執行緒之子集執行之指令。每一執行緒具有執行緒PC 184。執行緒之子集具有至少一個鎖定參數188(500-504)以便追蹤對共享資源之互斥存取。回應於針對執行緒執行之第一指令,處理器160修改至少一個鎖定參數188(500-504)以指示執行緒已經獲得了對共享資源之互斥存取。回應於第二指令,處理器修改至少一個鎖定參數188(500-504)以指示執行緒不再具有互斥存取。選擇器110基於至少一個鎖定參數188(500-504)選擇執行緒之子集中的一者且將通用PC 120設定為選定執行緒之執行緒PC 184。
Description
本發明技術係關於資料處理領域。詳言之,本發明技術研究執行複數個執行緒之資料處理之設備及方法。
資料處理設備可執行複數個執行緒。執行緒可以步調一致(lockstep)的方式進展。詳言之,每一執行緒可維護自身的程式計數器。系統本身可維護自身的通用程式計數器,以使得針對執行緒執行由通用程式計數器所指示之指令,該等執行緒之程式計數器匹配通用程式計數器。此類型系統可稱為例如單指令多執行緒(Single Instruction Multiple Thread;SIMT)系統。因此,在每一步驟處,針對複數個執行緒中的至少一子集執行單個指令。一旦已針對執行緒之子集執行指令,可改變通用程式計數器來指示新的指令。在此類系統中較佳可設定通用程式計數器以匹配藉由執行緒中之各者所維護之程式計數器中的最小者。以此方式,可允許後面最遠的執行緒取得進展,並且從而追趕上具有較高程式計數器的執行緒。此可引發執行緒進入收斂,亦即共享相同程式計數器值以使得可對儘可能多的執行緒執行單個指令。
對此方案之修改涉及追蹤每一執行緒之函數調用深度。詳言之,每當執行緒實行函數調用時,彼執行緒之函數調用深度計數器遞增,且每當執行緒自函數調用返回時,彼執行緒之函數調用深度計數器遞減。當通用程式計數器欲變化時,即設定以匹配首先具有最高函數調用深度計數器的執行緒之程式計數器,且其次(若存在多個此類執行緒)具有最低程式計數器值之彼組中的該或該等執行緒。換言之,僅在具有最高函數調用深度的全部執行緒中考慮程式計數器值。因此,此幫助防止僅考慮程式計數器值情況下可發生的效能問題或死鎖情形。當執行緒之子集實行函數調用時,此可引發與彼等執行緒關聯的程式計數器顯著增加,使得應在函數本身之後下一個執行之指令並不具有最低程式計數器值。藉由基於函數調用深度選擇用於執行的執行緒,可先處理函數,即便是該函數並不具有最低程式計數器亦如此。
上述兩種機制兩者皆傾向於遭受死鎖,其中待執行之程式碼包含需要互斥存取的共享資源。舉例而言,可在任何一個瞬時處藉由單個執行緒保持鎖定,從而允許執行緒且僅彼執行緒存取共享資源。
存取共享資源的執行緒可比不可存取共享資源的其餘執行緒具有更高的程式計數器。因此,將能夠執行其餘執行緒,但將無法執行具有對共享資源存取的執行緒。由於其餘執行緒將不能夠存取共享資源,但另一執行緒具有對該共享資源之存取,將發生死鎖。然而,可決不
允許執行具有對共享資源存取的執行緒。因此,無執行緒取得任何進展且系統暫停。
根據本發明技術之一個態樣,提供一種經配置以執行複數個執行緒的資料處理設備,該資料處理設備包含:通用程式計數器,用於識別針對至少複數個執行緒之子集執行之一串指令中的一個指令,其中子集中的每一執行緒具有用於識別該串指令中的一個指令之關聯執行緒程式計數器;選擇器,經配置以選擇執行緒之子集中的選定執行緒且將通用程式計數器設定為與選定執行緒關聯的執行緒程式計數器;及處理器,經配置以針對包括選定執行緒的執行緒之子集中的一或更多者執行藉由通用程式計數器所識別之指令,其中執行緒之子集與至少一個鎖定參數關聯以便追蹤執行緒之子集中的何者具有對共享資源之互斥存取;其中處理器經配置以回應於針對彼執行緒執行之第一指令而修改至少一個鎖定參數來指示執行緒已經獲得對共享資源之互斥存取,且回應於針對彼執行緒執行之第二指令而修改至少一個鎖定參數來指示執行緒不再具有對共享資源之互斥存取;且其中選擇器經配置以基於與每一執行緒關聯的鎖定參數選擇選定執行緒。
根據本發明技術之另一態樣,提供一種用於針對複數個執行緒之子集執行一串指令的資料處理方法,其中子集中的每一執行緒具有用於識別該串指令中的一個
指令之關聯執行緒程式計數器,該資料處理方法包含以下步驟:選擇執行緒之子集中的選定執行緒且將通用程式計數器設定為與選定執行緒關聯的執行緒程式計數器,其中通用程式計數器識別針對執行緒之子集執行之一串指令中的一個指令;以及針對包括選定執行緒的執行緒之子集中的一或更多者執行藉由通用程式計數器所識別之指令,其中執行緒之子集與至少一個鎖定參數關聯以便追蹤執行緒之子集中的何者具有對共享資源之互斥存取;其中回應於針對彼執行緒執行之第一指令而修改至少一個鎖定參數來指示執行緒已經獲得對共享資源之互斥存取,且回應於針對彼執行緒執行之第二指令而修改至少一個鎖定參數來指示執行緒不再具有對共享資源之互斥存取;且其中選擇器經配置以基於至少一個鎖定參數選擇選定執行緒。
根據另一態樣,提供一種經配置以執行複數個執行緒的資料處理設備,該資料處理設備包含:通用程式計數器手段,用於識別針對至少複數個執行緒之子集執行之一串指令中的一個指令,其中子集中的每一執行緒具有用於識別該串指令中的一個指令之關聯執行緒程式計數器手段;
選擇手段,用於選擇執行緒之子集中的選定執行緒及用於將通用程式計數器手段設定為與選定執行緒關聯的執行緒程式計數器手段;以及處理器手段,用於針對包括選定執行緒的執行緒之子集中的一或更多者執行藉由通用程式計數器手段所識別之指令,其中執行緒之子集與至少一個鎖定參數關聯以便追蹤執行緒之子集中的何者具有對共享資源之互斥存取;其中處理器手段用於回應於針對彼執行緒執行之第一指令而修改至少一個鎖定參數來指示執行緒已經獲得對共享資源之互斥存取,且回應於針對彼執行緒執行之第二指令而修改至少一個鎖定參數來指示執行緒不再具有對共享資源之互斥存取;且其中選擇手段用於基於至少一個鎖定參數選擇選定執行緒。
100‧‧‧資料處理設備
110‧‧‧選擇器
120‧‧‧通用程式計數器
130‧‧‧提取單元
140‧‧‧解碼單元
150‧‧‧發佈單元
160‧‧‧處理器
170‧‧‧記憶體
180‧‧‧暫存器檔案
182‧‧‧暫存器組/程式計數器
184‧‧‧程式計數器
186‧‧‧函數調用深度計數器
188‧‧‧鎖定計數器
500‧‧‧鎖定設定旗標
502‧‧‧鎖定所有者參數
504‧‧‧鎖定計數參數
600‧‧‧步驟
602‧‧‧步驟
604‧‧‧步驟
S200‧‧‧步驟
S205‧‧‧步驟
S210‧‧‧步驟
S215‧‧‧步驟
S220‧‧‧步驟
S225‧‧‧步驟
S230‧‧‧步驟
S235‧‧‧步驟
S240‧‧‧步驟
S245‧‧‧步驟
S250‧‧‧步驟
S255‧‧‧步驟
S260‧‧‧步驟
S265‧‧‧步驟
S400‧‧‧步驟
S410‧‧‧步驟
S420‧‧‧步驟
參看諸圖,將僅以舉例之方式描述本發明技術之進一步態樣、特徵、優勢及示例性實施例,在該等圖式中:第1圖圖示根據一個實施例之資料處理設備;第2圖圖示具有不同程式計數器值的眾多不同執行緒之執行之實例;第3圖圖示可在SIMT系統中發生死鎖之程式碼;
第4圖圖示解釋可如何防止第3圖之死鎖的第二程式碼實例;第5圖以流程圖形式圖示可如何在SIMT系統之執行緒之間發生選擇;第6圖以流程圖形式圖示執行執行緒之方法;第7圖圖示為執行緒之子集維護狀態資料之另一實例;第8圖圖示第三程式碼實例;以及第9圖係圖示使用第7圖之狀態資料選擇執行緒程式計數器之方法的流程圖。
在一個實例中,執行緒之子集已與至少一個鎖定參數關聯以便追蹤子集中的哪個執行緒具有對共享資源之互斥存取。處理器可回應於執行緒所執行之第一指令來修改至少一個鎖定參數,從而指示執行緒已經獲得對彼共享資源之互斥存取。類似地,處理器可回應第二指令來修改至少一個鎖定參數,從而指示執行緒不再具有對彼共享資源之互斥存取。在選擇選定執行緒中,將該執行緒之執行緒程式計數器用作通用程式計數器的值,且從而決定針對執行緒之子集下一個將執行哪個指令,資料處理設備可考慮至少一個鎖定參數。藉由基於鎖定參數選擇通用程式計數器的值,可能控制在任何特定瞬時處能夠執行哪些執行緒,且從而減少或防止死鎖發生幾率。
舉例而言,當執行緒獲得或已經獲得對共享資源之互斥存取時可執行第一指令,且當執行緒放棄或具有對共享資源之放棄存取時可執行第二指令。
處理器可經配置以回應於包含針對彼執行緒執行之至少一個鎖定指令的鎖定序列向執行緒授權對共享資源之互斥存取。鎖定序列可包含涉及各種比較、載入及儲存的眾多不同指令。彼序列內可為鎖定指令,該鎖定指令最終設定共享資源之「所有權」。在一些實例中,鎖定指令可引發儲存或記錄具有對共享資源互斥存取的執行緒之識別。在其他實例中,鎖定指令可僅設定已鎖定資源之指示,無需明確識別哪個執行緒具有鎖定之所有權。在一些情況中,鎖定序列可未包含第一指令。換言之,引發執行緒獲得對共享資源之互斥存取的鎖定序列可與第一指令分離,該第一指令向處理器指示執行緒已經獲得對共享資源之互斥存取。因此,程式碼可包含含有鎖定指令的鎖定序列,該鎖定序列位於第一指令之前或之後。此方法可用於確保與不支持第一指令之舊式系統的反向相容性。即使不支持第一指令,可仍藉由舊式系統正常處理鎖定序列。一些實例可在第一指令之前執行鎖定序列,使得執行緒先試圖獲得對共享資源之互斥存取,且隨後若成功,則因此藉由執行第一指令更新鎖定參數。其他實例可在鎖定序列之前執行第一指令,使得第一指令有效用於在使用鎖定序列實際實施鎖定之前為執行緒請求鎖定特權。在第二種情況中,對鎖定序列的進展可取決於正在成
功執行之第一指令,此可取決於另一執行緒是否已具有鎖定。在其他實施例中,鎖定序列包含第一指令。換言之,鎖定序列向執行緒中的一者授權對共享資源之互斥存取,且亦設定彼執行緒之鎖定參數以指示執行緒具有對共享資源之互斥存取。因此,存在實施鎖定序列及第一指令之不同方式。
類似地,處理器可經配置以回應於包含針對彼執行緒執行之至少一個解鎖指令的解鎖序列向執行緒放棄對共享資源之互斥存取。解鎖序列可包含眾多不同指令,例如包括比較、載入或儲存,該等指令引發特定執行緒失去對共享資源之互斥存取。可例如藉由移除對資源之鎖定或藉由將互斥存取傳遞至不同執行緒放棄對資源之互斥存取。在解鎖序列內可為解鎖指令,該解鎖指令用於弄清哪個執行緒具有對共享資源之互斥存取或指示特定執行緒不再具有對共享資源之存取。換言之,解鎖指令可用於設定或清除變數以指示特定執行緒不再具有對共享資源之互斥存取。在一些實施例中,解鎖序列未包含第二指令。換言之,解鎖序列並未修改與執行緒關聯的鎖定參數以指示執行緒不再具有對彼共享資源之互斥存取。因此,在執行解鎖之程式碼中的該或該等指令與設定鎖定參數以指示執行緒不再具有對共享資源存取的程式碼中的指令之間存在分隔。此針對上文所論述之向後相容性原因而適用。可在解鎖序列之後執行第二指令。在其他實施例中,解鎖序列未包含第二指令。
選擇器可經配置以優先於由至少一個鎖定參數指示為不具有對共享資源互斥存取的第二執行緒而選擇由至少一個鎖定參數指示為具有對共享資源互斥存取的第一執行緒來作為選定執行緒。換言之,選擇器可經配置以使得具有對共享資源互斥存取的執行緒優先。因此,彼執行緒可能夠完成對共享資源之使用以便解鎖共享資源。此幫助防止死鎖,因為容許執行有能力解鎖共享資源的第一執行緒及從而解鎖共享資源。
選擇器可經配置以基於與執行緒之子集中的每一執行緒關聯的函數調用深度參數選擇選定執行緒。換言之,當決定應使用哪個執行緒之執行緒程式計數器來設定通用程式計數器時,選擇器可考慮函數深度調用參數及至少一個鎖定參數兩者。
選擇器可經配置以基於與執行緒之子集中的每一執行緒關聯的執行緒程式計數器選擇選定執行緒。換言之,當決定應使用哪個執行緒程式計數器來設定為通用程式計數器時,選擇器可考慮執行緒程式計數器及至少一個鎖定參數兩者。
可以不同方式實施對選定執行緒之選擇。在一些實例中,可直接選擇執行緒,且隨後彼執行緒之執行緒程式計數器可用於通用程式計數器。在其他實例中,可使用給定程式計數器選擇演算法選擇特定執行緒程式計數器(隱含選擇相應執行緒作為選定執行緒)。因此,大體
而言,在本申請案中對選擇選定執行緒之提及意欲包含選擇與執行緒關聯的執行緒程式計數器之意。
鎖定參數可採用眾多不同形式。在一個實例中,子集內的每一執行緒可具有相應鎖定參數。當獲得對共享資源之互斥存取的執行緒執行第一指令時,可修改彼執行緒之鎖定參數以指示執行緒已經獲得對資源之互斥存取。類似地,當執行緒放棄對執行緒之互斥存取時,可回應於針對彼執行緒執行之第二指令而修改相應鎖定參數以指示執行緒不再具有對共享資源之互斥存取。舉例而言,每一執行緒之鎖定參數可指示多少共享資源當前被彼執行緒鎖定。在此情況中,處理器可容許多個執行緒每次具有對不同共享資源之互斥存取。當選擇選定執行緒時,選擇器可考慮執行緒之鎖定參數以便選擇第一組執行緒(例如,選擇具有指示鎖定資源之最高數目的鎖定參數的執行緒),且隨後基於函數調用深度在第一組執行緒中選擇第二組執行緒,且隨後基於與第二組執行緒中的執行緒關聯的執行緒程式計數器選擇第二組執行緒中的一者作為選定執行緒。此方法提供改良的效能,因為多個執行緒可能每次對不同資源保持鎖定,使得兩者可彼此並行行進。
換言之,選擇器可經配置以首先考慮執行緒之鎖定參數,隨後考慮函數調用深度並最後考慮程式計數器。藉由以此次序考慮參數,可能自最適宜執行緒引發指令在特定瞬時處得以執行。應注意,可無需選擇器執行對
第一組或第二組的選擇。舉例而言,若僅單個執行緒具有所欲鎖定參數,則彼執行緒之執行緒程式計數器將用於設定通用程式計數器。類似地,若第一組執行緒包含兩個執行緒及彼等兩個執行緒中的僅一者具有所欲函數調用深度,則可無法特定形成第二組執行緒,且實情為,可將具有所欲函數調用深度的第一組執行緒中的執行緒之執行緒程式計數器設定為通用程式計數器。換言之,儘管選擇器可經配置以執行前文所論及之三個選擇,但可不一定始終在每個情況中實施三個選擇。
在另一實例中,至少一個鎖定參數可包含在執行緒之子集之間共享的共享鎖定參數,及指示執行緒之子集中的何者具有對共享資源之互斥存取的鎖定所有者參數。在一些情況中,共享鎖定參數可包含鎖定計數,該鎖定計數指示由鎖定所有者參數所指示之鎖定自有執行緒具有對多少資源之互斥存取。在其他情況中,共享鎖定參數可包含鎖定旗標,該鎖定旗標指示當前執行緒之子集中的任何者是否具有對共享資源之互斥存取。在此實例中,處理器可確保每次執行緒之每個子集僅允許一個執行緒具有對共享資源之互斥存取。因此,若一個執行緒具有對第一共享資源之互斥存取,則不允許第二執行緒對第二共享資源之互斥存取(甚至當第二共享資源與第一共享資源不同時亦如此)。此方法提供防止在存在遞迴鎖定時可出現之死鎖的增加保護,在遞迴鎖定中不同執行緒逐步鎖定一系列資源且隨後依次釋放鎖定。若已知待執行之程式碼
無法包括此類遞迴鎖定,則每一執行緒具有相應鎖定參數的前述方法可偏好於改良效能(且前述方法與先前技術相比仍大大減少了死鎖發生)。然而,若需要遞迴鎖定,則每次對一個執行緒之限制鎖定可提供防止死鎖的增加保護。在此情況中,不一定針對每一執行緒提供鎖定參數,因為每次僅一個執行緒可保持鎖定。實情為,指示哪個執行緒當前保持鎖定的鎖定所有者參數執行緒及在執行緒之子集之間共享的鎖定參數(例如,指示由鎖定自有執行緒保持之執行緒數目的鎖定計數)足以追蹤哪個執行緒保持鎖定,使得程式計數器之選擇可促進選擇保持鎖定的執行緒而非其他執行緒以避免死鎖並確保向前進展。鎖定計數用於確保在允許其他執行緒保持鎖定之前再次放棄已由執行緒設定之全部鎖定。
在第二實例中,若至少一個鎖定參數指示執行緒具有對一或更多個共享資源之互斥存取,則選擇器可選擇由鎖定參數所指示之鎖定自有執行緒作為選定執行緒,使得鎖定自有執行緒可取得進展,使得最終該執行緒將釋放鎖定而另一執行緒可接著獲得鎖定。另一方面,若無執行緒保持鎖定,則對選定執行緒之選擇可基於函數調用深度及執行緒之執行緒程式計數器,如第一實例中所述。
在上文所論述之兩個實例中,至少一個鎖定參數可回應於第一指令遞增及回應於第二指令遞減(無論鎖定參數是執行緒之子集之間共享的,還是特定於單個執行
緒的)。在一個實例中,鎖定參數可僅具有兩個狀態:第一狀態,指示執行緒具有對共享資源之互斥存取,及第二狀態,指示執行緒不具有對共享資源之互斥存取。此參數易於表示,因為該參數僅需要每一執行緒之單個位元。因此,需要非常小的空間且因此非常小的能量來表示每一執行緒之狀態。在其他實施例中,鎖定參數可指示執行緒具有互斥存取之共享資源的數目。換言之,鎖定參數可充當計數器,該計數器在執行緒獲得對共享資源之互斥存取時遞增且在執行緒失去對共享資源之互斥存取時遞減。此系統為每一執行緒提供更好的優先權指示符。詳言之,可需要使具有對若干共享資源之互斥存取的執行緒優先於具有對僅一個共享資源之互斥存取的執行緒。然而,儲存此額外資訊需要更多空間,且因此必須為系統中待執行之每一執行緒投入更多能量。
藉由處理器執行之執行緒之子集中的一或更多者可包含具有一或更多個執行緒參數的執行緒,該等執行緒參數匹配選定執行緒之相應執行緒參數。在一個實例中,一或更多個執行緒參數可僅包含執行緒程式計數器。因此,所執行之一或更多個執行緒可為彼等執行緒,該等執行緒之執行緒程式計數器識別藉由通用程式計數器所識別之相同指令的執行緒。換言之,資料處理設備可執行全部彼等執行緒,該等執行緒之程式計數器與通用程式計數器相同。或者,除了執行緒程式計數器之外,執行緒參數亦可包括函數調用深度參數或鎖定參數中的一者或兩
者,使得針對具有匹配選定執行緒之執行緒參數的執行緒參數組合的執行緒執行指令。以此方式,可同時針對多個執行緒執行單個指令。
藉由資料處理設備之處理器執行之指令可為微操作。在一些系統中,在彼等指令到達處理器之前,可將複雜指令(例如,載入/儲存多個指令)分成微操作。因此,應將本申請案中對「指令」之提及解讀為指示指令或者對應於指令之一部分的微操作。
可在至少一個預定義指令集中將第一指令及第二指令編碼為NOOP(無操作)指令。在此情況中,資料處理設備所使用之指令集為預定義指令集之增強版本。換言之,資料處理設備所使用之指令集可定義未在預定義指令集中定義之指令。作為在至少一個預定義指令集中將第一指令及第二指令編碼為NOOP指令之結果,在彼等預定義指令集中可不考慮第一指令及第二指令。由於第一指令及第二指令將僅僅對第二資料處理設備無效,經寫入以在資料處理設備上操作之程式碼仍在實施預定義指令集的第二資料處理設備上準確執行。因此,針對資料處理設備寫入之程式碼可視為與舊式系統反向相容。此意謂不一定針對不同系統寫入程式碼之不同版本,使得程式碼開發更有效率。
處理器可經配置以回應於第一指令及第二指令中的至少一者來執行另一操作。舉例而言,另一操作可為以下之一或更多者:作為鎖定序列的一部分且用於獲得
對共享資源之互斥存取的操作;作為解鎖序列的一部分且用於放棄對共享資源之互斥存取的操作;用於存取共享資源的操作;用於決定執行緒是否具有對共享資源之互斥存取的操作;及比較與交換操作。此允許利用另一指令覆蓋更新執行緒之鎖定參數的功能以減少需要執行之指令數目。
共享資源可包含記憶體中的資料。共享資源之其他實例可為硬體裝置、通訊通道或程式碼之關鍵區段。
處理器可經配置以在放棄對共享資源之互斥存取之前發佈對記憶體之記憶體阻障操作。記憶體系統可以與自處理器接收異動之次序不同的次序處理異動。可藉由處理器發佈記憶體阻障操作以控制記憶體可重新排序異動的程度。跨記憶體阻障禁止藉由記憶體系統的記憶體操作之重新排序。亦即,儘管記憶體能夠自由地以任何次序處理相繼記憶體阻障操作之間的操作,但當接收記憶體阻障操作時,在記憶體阻障操作之後所接收之記憶體操作之前,記憶體應處理記憶體阻障操作之前所接收之全部記憶體操作。若發佈無記憶體阻障,則存在以下風險:藉由記憶體處理放棄對資源之互斥存取之後所發佈的異動,同時仍保持可導致不正確資料值的互斥存取。藉由在放棄對共享資源之互斥存取之前發佈記憶體阻障操作,系統可確保每次僅由單個執行緒存取共享資源且確保記憶體中的資料一致性。
第1圖圖示根據一個實施例之資料處理設備100。藉由選擇器110將通用程式計數器120設定為與特定執行緒關聯的程式計數器184中的一者。隨後將通用程式計數器120的值發送至提取單元130,該提取單元提取由通用程式計數器120所指示之指令。將所提取之指令傳遞至解碼指令的解碼單元140,且將所解碼之指令發送至發佈單元150。發佈單元150發佈一或更多個訊號至處理器160,以便針對執行緒中的一或更多者執行所提取之指令。處理器160可能夠同時或實質上同時針對一或更多個執行緒執行指令。在一些實施例中,處理器160可具有用於處理每一各別執行緒的平行函數單元使得針對多個執行緒平行執行相同指令。其他系統可僅具有單個函數單元,使得在移動到下一指令之前針對執行緒之子集中之各者依次處理相同指令。其他系統可具有一些平行單元,但該等平行單元要比執行緒的總數少,使得針對眾多執行緒以小於執行緒總數之批次處理相同指令。
處理器160亦可存取記憶體170,該記憶體可包含快取記憶體以及主記憶體。處理器亦可與暫存器檔案180通訊,可將資料值載入或儲存至該暫存器檔案中。在此實施例中,暫存器檔案180包含針對每一執行緒的眾多不同硬體單元。舉例而言,第1圖中所示之暫存器檔案180包含針對每一執行緒的一組暫存器182、程式計數器184、函數調用深度計數器186及鎖定計數器188。應瞭解,與第1圖所示不同的硬體配置可為可能的。舉例而
言,單個暫存器組182可包含針對一個以上執行緒的暫存器。此外,所示硬體組件之子集可存在於暫存器檔案180外部。
在本文所描述之實施例中,僅考慮單組執行緒,其中平行執行彼等執行緒之至少一子集。然而,應瞭解,資料處理設備100不限於此配置。舉例而言,資料處理設備100可對執行緒之多個群組或子集執行,其中能夠實質上同時執行執行緒之每一群組。因此,通用程式計數器120可包含一組通用程式計數器,組內的每一通用程式計數器與執行緒之不同群組相關。此描述之其餘部分僅考慮執行緒之單個群組(子集),但應瞭解,當存在多個執行緒群組時,可將所描述之技術應用於每一不同執行緒群組。
第2圖圖示執行指令序列的執行緒T#0至T#31之單個群組。由於執行緒中之各者具有自身的暫存器且由於正受執行之指令指示暫存器,執行緒中之各者可在執行相同指令時不同地表現。指令0引發暫存器5及暫存器3中保持之資料值得以相加在一起並儲存於暫存器0中。若先前加法等於0,則線1上的指令引發執行緒之執行跳越至線3處的「label」。在此情況中,由執行緒T#2執行之加法結果(0+0)及由執行緒T#4執行之加法結果(-1+1)兩者皆等於0,且因此對該等兩個執行緒之控制流程跳越至「label」。其他執行緒並不跳越,反而繼續線2處的指令。
因此,執行緒T#2及T#4之程式計數器等於3及其餘執行緒之程式計數器等於2。為了促成執行緒之收斂,將資料處理設備100之通用程式計數器120設定為全部執行緒中的最低執行緒程式計數器184(亦即,2)。藉由以此方式選擇通用程式計數器120的值,可使得較不先進的執行緒取得進展,且因此追趕上其他執行緒,從而導致執行緒之收斂。此為所處的理想狀態,因為隨後改良系統之並行性,亦即將並行執行更多執行緒。因此,將通用程式計數器120設定為值2,該值為與任何執行緒關聯的最低程式計數器值。由於執行緒T#2及T#4不具有等於2的執行緒程式計數器,並未針對執行緒T#2及T#4執行線2處的指令。其餘執行緒執行線2處的指令,從而引發暫存器0及暫存器4處的資料值彼此相乘,並儲存於暫存器6中。已執行乘法,執行指令之執行緒中之各者的執行緒程式計數器前進到3。因此,全部執行緒具有相同程式計數器及實現收斂。線3處的「指令」僅為標籤,且因此執行行進至線4。此指令引發自主記憶體存取儲存於暫存器9中的記憶體位址且用於將彼位址處的資料值儲存於暫存器8處。如第2圖所示,由於執行緒中之各者在暫存器9中儲存不同記憶體位址值(例如,執行緒T#0儲存記憶體位址100,而執行緒T#5儲存記憶體位址200),執行緒中之各者將存取不同記憶體位址且因此在各別暫存器8中儲存不同值。可能將靶向相同快取記憶體線或記憶
體之相同頁的記憶體存取合併成單個記憶體存取,以節省功率及時間。
第3圖圖示在兩個執行緒上執行之程式碼,其中程式碼包含共享資源,經由鎖定控制對該共享資源之存取。此處,藉由線7與線9之間的程式碼之關鍵區段存取共享資源。共享資源可為程式碼之關鍵區段所需要且每次一個執行緒需要對該資源互斥存取的任何東西。舉例而言,資源可為共享資料結構或硬體單元或裝置之使用。或者,可將程式碼之關鍵區段本身視為共享資源。在此實施例中,選擇器110經配置以將通用程式計數器120設定為具有最高函數調用深度計數器186的執行緒之執行緒程式計數器184。在多個執行緒具有最高函數調用深度計數器186的情況下,將通用程式計數器120設定為在具有最高函數調用深度計數器186的執行緒中最低的程式計數器184。如先前所論述,在正常情況下,需要允許優先於具有較高程式計數器值執行具有最低程式計數器的執行緒,以便引發執行緒之收斂發生。然而,如將所示,當存在程式碼之關鍵區段時,此程式計數器選擇機制引發死鎖發生。
第3圖之若干指令指示暫存器x19中的位址。此位址可對應於一資料值,該資料值指示共享資源是否針對互斥存取由執行緒鎖定。在此實例中,當暫存器所指示之位址處的值為0時,則此指示未對線7至線9處的程式碼之關鍵區段所使用之資源設定鎖定,且當此位址處的值為
1,則已設定鎖定。然而,應瞭解,存在表示是否已對資源授權互斥存取之其他方式。應注意,當執行緒執行此程式碼實例時,執行線2及線5處的指令之不同執行緒可存取各別暫存器組182中的暫存器x19之不同版本,該等暫存器可含有不同記憶體位址。因此,執行緒設法存取的共享資源可在執行緒之間不同。另一方面,若存在暫存器x19含有相同位址的多個執行緒,則存在下文所論述之潛在衝突。
最初,將前後緊接地執行全部執行緒。線0包含標籤且因此對執行無效。線1引發在暫存器w1中儲存資料值1。線2處的指令被稱為載入互斥指令。此引發存取資料值及設定監視器。監視器偵測是否修改資料值。因此,在此實例中,在暫存器w0中存取、儲存暫存器x19中所指示之記憶體位址中所儲存之資料值,且針對彼記憶體位址設定監視器。在線3處,暫存器w0中所儲存之資料值與數字0相比較。換言之,除了設定監視器以外,線2及線3集體決定暫存器x19中所指示之記憶體位址中所儲存之資料值是否等於0。若資料值不等於0,則線4處的指令引發執行跳越至線0處的標籤retry_lock。換言之,若儲存於暫存器w0中的資料值不等於0(亦即,另一執行緒已對共享資源具有鎖定),則控制流程返回至標籤retry_lock,否則控制流程繼續線5。因此,線2至線4處的指令檢查在執行線2處的載入指令時另一執行緒是否已具有鎖定。
另一方面,在執行線2處的互斥載入指令之後,但在開始程式碼之關鍵區段之前,線5至線6處的指令檢查另一執行緒是否已在某點處獲得鎖定。此確保多個執行緒無法同時獲得鎖定。線5為儲存互斥指令,只要先前設定監視器指示尚未修改正在監視之記憶體位址,該儲存互斥指令引發儲存資料值。在此實例中,只要尚未修改暫存器x19所指示之記憶體位址中儲存的資料值,該指令引發在暫存器x19所指示之記憶體位置中儲存暫存器w1中所儲存之資料值(亦即,1),因為監視器由線2上的載入互斥指令建立。隨後在暫存器w2處儲存該儲存成功與否之結果。詳言之,若儲存成功,則在w2中儲存值0。否則,若儲存不成功,則在w2儲存非零值。當然,熟習此項技術者應瞭解,用於指示成就或失敗的特定數字並非重要,而且可易於對調該等數字。因為若另一執行緒尚未修改暫存器x19所指示之位址中所儲存之資料值,則僅實施儲存操作,所以若暫存器x19的值對於全部執行緒相同,則恰好一個執行緒將修改資料值。若不同執行緒需要不同鎖定資源,則可在暫存器x19中針對不同執行緒置放不同位址,使得一個以上執行緒可能成功執行線5處的儲存指令。針對每一執行緒之儲存互斥指令之結果因此表現出彼執行緒是否已獲取鎖定。在線6處,實行比較以決定暫存器w2中所儲存之資料值是否為0(亦即,儲存互斥指令是否為不成功)。若w2處所儲存之資料值不為0,則控
制流程返回至線0上的標籤retry_lock。否則,流程繼續在線7上。
線7至線9(第3圖中未圖示)表示關鍵區段。亦即,鑒於先前鎖定序列,僅可藉由每次每個共享資源單個執行緒執行關鍵區段(若使用不同資源,則多個執行緒可執行關鍵區段)。在需要相同資源的另一執行緒可進入之前,執行緒必須完成關鍵區段中的執行碼。關鍵區段可包括:利用共享資源的任何指令,諸如存取共享位置或共享資料結構的載入/儲存指令,對於該等指令需要互斥存取以維護資料一致性;或利用硬體裝置的指令,該等指令每次僅可由一個執行緒使用。
圖示解鎖序列,開始於線10處。在已執行關鍵區段之後執行此程式碼。在線10處,在暫存器w1中儲存資料值0。在線11處,將儲存於暫存器w1中的資料值(亦即,0)儲存在暫存器x19中所指示之記憶體位置中,以指示此執行緒不再具有鎖定。此意謂,到達線2至線4處的指令之另一執行緒現可成功獲取鎖定。
如前文所論及的,若多個執行緒試圖獲得相同鎖定(亦即,在暫存器組182中的暫存器x19之各別版本中對於不同執行緒指示相同記憶體位置),則用於將鎖定提供至關鍵區段的此程式碼可引發在SIMT資料處理設備中發生死鎖。舉例而言,如第3圖所示,執行緒T#0可為獲取對鎖定之存取且因此繼續程式碼之線7的執行緒。然而,執行緒T#1(及靶向相同資源的其他執行緒)
將無法獲取鎖定。因此,在程式碼之第一執行中,在無法獲得鎖定引發控制流程返回至線0之前,將執行除執行緒T#0以外的執行緒直至程式碼之線6。對於後續嘗試,可執行除執行緒T#0以外的執行緒直至線4,因為執行緒T#0現已將值#1儲存至暫存器x19中所指示之位址。全部執行緒具有相同函數調用深度計數器值1。因此,選擇器110將通用程式計數器120設定為與執行緒中之各者關聯的最低執行緒程式計數器184。除執行緒T#0以外的全部執行緒具有程式計數器值0,且因此通用程式計數器值120將被設定為0。因此,將允許執行除執行緒T#0以外的執行緒。然而,彼等執行緒將仍無法獲取對關鍵區段之鎖定,因為由T#0保持鎖定。在線4處,用於彼等執行緒的控制流程將因此傳到線0。又,當藉由選擇器110實行程式計數器值之選擇時,除執行緒T#0以外的執行緒具有程式計數器值(0),該程式計數器值比執行緒T#0的程式計數器值(7)低。因此,通用程式計數器值120將被設定為0且將允許執行除執行緒T#0以外的執行緒。此過程將繼續,可能永遠進行下去。僅執行緒T#0能夠解鎖對關鍵區段之存取,且執行緒T#0僅可在已執行關鍵區段之後解鎖對關鍵區段之存取。然而,執行緒T#0無法執行關鍵區段,因為該執行緒之程式計數器值比其他執行緒之程式計數器值高,且因此決不將通用程式計數器120設定為與執行緒T#0關聯的執行緒程式計數器。因此,在此實例中,發生死鎖。無執行緒可取得任何進展且因此系統暫停。
第4圖圖示對此死鎖問題之解決方案。在此實施例中,為每一執行緒提供鎖定計數器188,且選擇器110經配置以除了函數調用深度及執行緒程式計數器之外基於鎖定計數器選擇選定執行緒(將該選定執行緒之執行緒程式計數器設定為通用程式計數器)。將通用程式計數器120設定為與具有最高鎖定計數器188的執行緒關聯的執行緒程式計數器184。若多個執行緒具有最高鎖定計數器188,則在具有最高鎖定計數器188的執行緒中考慮具有最高函數調用深度計數器186的執行緒。若多個執行緒具有最高鎖定計數器188及最高函數調用深度計數器186,則在彼等執行緒中選擇具有最低程式計數器值的執行緒。隨後基於選定執行緒之執行緒程式計數器更新通用程式計數器,且隨後可針對具有匹配執行緒參數(至少一匹配執行緒程式計數器,且視情況亦匹配函數調用深度及鎖定參數)的任何執行緒執行由通用程式計數器所指示之指令。應瞭解,其他實施例可應用不同機制,其中直接選擇執行緒程式計數器之特定執行緒程式計數器或特定組合、函數調用參數及鎖定參數(而非選擇執行緒)。
第4圖之程式碼與第3圖之程式碼相同,其中在線6及線12處分別多了兩個新指令。該等指令引發與執行緒關聯的鎖定計數器188條件性遞增及遞減。詳言之,線6上的指令「cond_inc_lock_count w2」在w2值為零情況下引發與執行緒關聯的鎖定計數器188遞增。如參看第3圖所解釋的,將w2值設定為0或者1,其中值0
表示STXR指令成功(亦即,執行緒已成功獲取鎖定),而1表示STXR指令失敗(亦即,執行緒無法獲取鎖定)。因此,若彼執行緒已設法完成在線5上的行進指令中獲取鎖定,線6上的指令引發特定執行緒之鎖定計數器188遞增。線12處的指令「dec_lock_count」使特定執行緒之鎖定計數器188遞減。此指令為無條件的。此原因在於每次僅藉由單個執行緒執行線8至線12處的程式碼--特定而言,該執行緒當前保持鎖定且因此具有對關鍵區段之存取。因此,關於應使哪個執行緒之鎖定計數器遞減不存在歧義。
當程式碼執行時,作為線6處的指令之結果,獲取鎖定(T#0)的執行緒使得該執行緒之鎖定計數器遞增。反之,其他執行緒並未使自身的鎖定計數器遞增,因為該等執行緒之暫存器值w2將為非零(無法獲取鎖定)。在線7處,執行緒T#0將繼續至線8上,但其餘執行緒將返回至線0處的標籤「retry_lock」。如前文所解釋,在此實施例中,選擇器110經配置以將通用程式計數器120設定為具有最高鎖定計數器的執行緒之程式計數器。因此,當執行緒T#0之程式計數器為8時,彼執行緒將能夠鑒於自身的較高鎖定計數器188繼續執行,即便是該執行緒之程式計數器182比其他執行緒之程式計數器更高。因此,執行緒T#0能夠繼續執行且將最終執行線10至線11上的解鎖序列之程式碼,從而釋放鎖定。隨後,執行緒T#0繼續線12,在該線處使執行緒之鎖定計數器
遞減。在此點處,執行緒中之各者之鎖定計數器等於0,執行緒中之各者之函數調用深度等於1,且因此,將通用程式計數器120設定為全部執行緒中的最低執行緒程式計數器184。因此,容許除執行緒T#0外的執行緒執行,且該等執行緒執行線0與線7之間的程式碼。在此執行期間,執行緒中的一者將獲取鎖定並如前文所描述使得該執行緒之鎖定計數器188遞增。此序列將重複,直至全部執行緒已傳遞程式碼之關鍵區段。因此,儘管存在程式碼之關鍵區段,但避免了死鎖情形。
在第4圖之此實例中,cond_inc_lock_count及dec_lock_count指令僅影響與特定執行緒關聯的鎖定計數器188。然而,應瞭解,該等指令可執行額外操作。舉例而言,條件性遞增指令可與線5上的互斥儲存指令或者線7上的比較分支指令組合。在此情況中,在關於比較與分支指令的操作之前或與之並行及在關於互斥儲存指令的操作之後實施條件性遞增指令。類似地,遞減鎖定計數器指令可與其他操作組合。舉例而言,遞減鎖定計數器指令可與在由暫存器x19指向的位址中儲存數值0的指令組合。
亦存在實施鎖定序列之眾多方式。在第4圖之實例中,使用線2上的載入互斥指令與線5上的儲存互斥指令之組合。實施鎖定機制的另一方式可經由使用比較與交換指令(CMPXCHG)。比較與交換指令為原子基元。換言之,指令無法中斷中間執行,但實情為,一旦已開始,
便執行至完成。比較與交換指令採用三個參數。參數中的一者為記憶體中的位置。另一參數為比較值及又一參數為儲存值。比較與交換指令測試記憶體中的位置處的資料值是否等於比較值,且若是,則將儲存值寫入到記憶體位置中且回傳指示操作成功的結果。若記憶體位置處的資料值不等於比較值,則沒有東西被寫入至記憶體位置(記憶體位置保留原始值),且結果反而指示操作不成功。再次,此比較與交換指令可與其他操作組合並可與cond_inc_lock_count指令組合。
可在dec_lock_count指令之前及程式碼中的關鍵區段之後執行記憶體阻障操作。在資料處理設備中,可為了效率重新排序記憶體存取指令。然而,不可跨記憶體阻障發生此重新排序。因此,記憶體阻障可幫助確保先於在已完成關鍵區段之後發佈的記憶體存取操作處理作為程式碼之關鍵區段之一部分的記憶體存取操作。
cond_inc_lock_count指令及dec_lock_count指令可各自經編碼以使得在預定指令集中,cond_inc_lock_count指令及dec_lock_count指令之編碼對應於NOOP指令。舉例而言,資料處理設備100所使用之指令集可為將該等兩個指令編碼為NOOP指令的指令集之增強版本。因此,在除資料處理設備100以外的資料處理設備上,兩個指令可無效。因此,經設計用於資料處理設備100的程式碼可與其
他資料處理設備向後相容,且可與未使用SIMT的資料處理設備向後相容。
第5圖圖示選擇選定執行緒之方法,將該選定執行緒之執行緒程式計數器用作通用程式計數器120。方法從步驟s200處開始,其中將第一組及第二組兩者皆設定為空組。在步驟s205處,從全部執行緒中選擇下一執行緒。此步驟與步驟s210、s215及s220一起集體形成迭代通過全部執行緒的迴路。在步驟s210處,決定步驟s205處所選定之執行緒之鎖定參數(亦即,鎖定計數器188)是否等於全部執行緒中的最高鎖定參數。若此執行緒之鎖定參數等於全部執行緒中的最高鎖定參數,則流程行進至步驟s215,否則流程繼續步驟s220。假定在步驟s210中,資料處理設備知曉全部執行緒中的最高鎖定參數。若此資訊並不易於取得,可藉由首先迭代通過全部執行緒或藉由保持最高鎖定參數之運轉計數自先前執行緒可見且當遇到比先前最高鎖定參數更高的鎖定參數時刪除已添加至第一組中的執行緒來決定。在步驟s215處,將選定執行緒添加至第一組,且流程隨後行進至步驟s220。在步驟s220處,決定是否存在更多執行緒迭代通過。若存在更多執行緒,則流程返回到步驟s205,在該步驟處選擇下一執行緒。若不存在更多執行緒,則流程繼續步驟s225。因此,在步驟s220結束時,決定第一組執行緒,該組執行緒包含具有鎖定參數的執行緒,該鎖定參數等於任何執行緒之較高鎖定參數。步驟s225決定在第
一組中是否存在恰好一個項目。若在第一組中存在恰好一個項目,則流程繼續步驟s230,在該步驟處將第一組中的項目回傳作為選定執行緒。亦即,將通用程式計數器120設定成與第一組中的唯一執行緒關聯的執行緒程式計數器184。若在步驟s225處在第一組中不存在恰好一個項目,則流程繼續步驟s235。集體而言,步驟s205至s230試圖使執行緒程式計數器選擇之決定基於全部執行緒之鎖定計數參數。若執行緒中的一者具有比全部其他執行緒更高的鎖定計數器參數,則彼執行緒為選定執行緒且將通用程式計數器120設定為與具有較高鎖定計數器參數188的執行緒對應之執行緒程式計數器184。否則,如下文所解釋來實施執行緒之另一變窄。
在步驟s235處,自第一組選擇下一執行緒。步驟s235至s250集體形成迭代通過第一組中的全部執行緒之迴路。在步驟s240處,決定選定執行緒之函數調用深度是否等於第一組中的全部執行緒中的最高函數調用深度。再次,假定可能決定第一組中的全部執行緒中的最高函數調用深度。可決定此資訊的一種方式為先迭代通過第一組中的全部執行緒,或如上文所論述的藉由維護運轉計數值。若在步驟s240處選定執行緒之函數調用深度等於第一組中的全部執行緒中的最高函數調用深度,則流程繼續步驟s245。否則,流程繼續步驟s250。在步驟s245處,將選定執行緒添加至第二組,且流程繼續步驟s250。在步驟s250處,決定在第一組中是否存在更多執
行緒得以迭代通過。若在第一組中存在更多執行緒,則流程返回至步驟s235以繼續迴路。否則,流程繼續步驟s255,在該步驟處決定在第二組中是否存在恰好一個項目。若在步驟s255處在第二組中存在恰好一個項目,則流程繼續步驟s260。在步驟s260處,將第二組中的單個項目回傳作為選定執行緒。換言之,將通用程式計數器120設定成與第二組中的單個執行緒關聯的執行緒程式計數器184。舉例而言,若一個以上執行緒共享最高鎖定計數器參數188,但若彼等執行緒中的僅一者具有最高函數調用深度計數器186,則可出現此情形。因此,藉由將通用程式計數器120設定成與彼執行緒關聯的執行緒程式計數器184來允許執行此執行緒。集體而言,步驟s235至s260與用於決定通用程式計數器120的第二標準相關。
若在第二組中不存在恰好一個項目,則流程行進至步驟s265,在該步驟處將具有最低程式計數器184的第二組中的項目回傳作為選定執行緒。換言之,將通用程式計數器120設定成第二組中的全部執行緒中的執行緒程式計數器184中的最低者。因此,步驟s265提供第三標準以決定通用程式計數器120。
第6圖圖示如何選擇每一循環中執行之執行緒。在步驟s400處,基於鎖定參數(鎖定計數器)188、函數調用深度計數器186及執行緒程式計數器184選擇複數個執行緒中的一者(或等效地,對應於執行緒的執行
緒程式計數器中的一者)。關於第5圖圖示此過程之一實例。在步驟s410處,將通用程式計數器120設定為選定執行緒之執行緒程式計數器。換言之,通用程式計數器120經設定以匹配與步驟s400中所選定之執行緒對應的執行緒程式計數器184。最後,在步驟s420處,針對所關聯執行緒參數匹配選定執行緒之執行緒參數的全部執行緒執行藉由通用程式計數器120所識別之指令(執行緒參數可僅包含執行緒程式計數器184,或可包含執行緒程式計數器與鎖定計數器188及函數調用深度186中的一者或兩者之組合)。此過程可引發與每一執行緒關聯的執行緒程式計數器184改變,且因此隨後從步驟s400處開始重複該過程,從而引發決定不同通用程式計數器值120。
在關於第4圖所論述之實例中,處理器有利地嘗試為扭曲中的全部執行緒獲取鎖定且隨後基於哪些執行緒能夠獲取鎖定來分類執行偏好次序。
關於第7圖至第9圖描述第二實施例。在此實施例中,每次允許群組中的僅一個執行緒保持鎖定。又,儘管在第4圖中處理器有利地嘗試使用包括STXR指令的鎖定序列為全部執行緒獲取鎖定,且隨後只要使鎖定計數成功遞增至發出訊號指示執行緒獲得鎖定特權,在第7圖至第9圖中翻轉次序,使得首先執行指令以請求鎖定特權並因此更新鎖定參數。在此點處,處理器確保僅一個執行緒可成功執行請求鎖定特權的指令(對於其他執行緒,此
指令之執行失效,且因此彼執行緒之執行緒程式計數器並未遞增)。已獲得鎖定特權,成功的執行緒隨後執行鎖定序列以獲得鎖定。以此方式中,在任何時間點處允許群組中的僅一個執行緒保持鎖定。解鎖序列仍與第4圖相同,首先釋放鎖定,隨後釋放鎖定特權。在單個執行緒中可多次請求鎖定,同時保持鎖定特權,且可使用鎖定計數器追蹤由執行緒所保持之鎖定數目。儘管可能用與第一實施例相同的方式實施第二實施例,其中每個執行緒具有鎖定計數器並具有偏好較高鎖定計數的程式計數器選擇機制,因為每次將鎖定特權(執行偏好)給予每群組的單個執行緒,但是可能藉由為群組將群組中的任何執行緒是否具有鎖定特權之單個指示、此執行緒之識別及群組之單個鎖定計數器簡單儲存作為一個整體來簡化此方案。
因此,第7圖圖示暫存器檔案180及供此第二實施例使用的狀態資料之實例。第7圖與第1圖之暫存器檔案不同,原因在於並未向每一執行緒提供鎖定計數器188。實情為,除了執行緒之群組的通用程式計數器120之外,在執行緒之群組之間共享眾多鎖定參數:‧鎖定設定旗標500,指示群組中的任何執行緒是否已針對一或更多個共享資源鎖定;‧鎖定所有者參數502,指示群組中的哪個執行緒已鎖定一或更多個共享資源;及‧鎖定計數參數504,指示由鎖定所有者參數502所指示之鎖定自有執行緒已鎖定多少資源。
在一些實例中,可省略鎖定設定旗標500且實情為,可使用鎖定所有者參數502或鎖定計數參數504發出訊號指示執行緒是否保持鎖定。舉例而言,若鎖定計數參數504為零,則此可發出訊號指示無執行緒保持鎖定,且若鎖定計數參數504具有非零值,則此可發出訊號指示執行緒保持鎖定。或者,鎖定所有者參數502可在彼執行緒保持鎖定的情況下具有對應於執行緒中的一者的值,且在無執行緒保持鎖定的情況下具有並未對應於執行緒中的任何者的值,因此可有效指示是否已設定任何鎖定。然而,有時,提供指示是否已設定任何鎖定的獨立鎖定設定旗標500可為有用的,例如原因在於鎖定設定旗標500可包含單個位元,檢查該單個位元比檢查對應於鎖定所有者參數502或鎖定計數值504的多位元值更快且更有能量效率。
第8圖圖示用於第二實施例之程式碼實例,如下:
線0:表示鎖定序列開始之標籤,該標籤並未引發處理器處的任何特定動作。
線1:inc_lock_count為請求鎖定特權(用於執行緒為資源設定一或更多個鎖定的權利)的指令。僅可針對群組中的一個執行緒成功執行此指令。因此,在此指令之後,一個執行緒可行進至下一指令(其中使彼執行緒之程式計數器遞增至下一指令),而其他執行緒使此指令失效(且因此該等執行緒之執行緒程式計數器保留在相同指令
inc_lock_count處,直至可成功執行此指令)。若成功執行inc_lock_count,則設定鎖定設定旗標500以指示執行緒保持鎖定特權,設定鎖定所有者參數502以指示當前執行緒之識別符,且使鎖定計數504遞增。
線2:標籤retry_lock,用於在具有鎖定特權的執行緒無法獲得鎖定的情況下分支。
線3至線5:與第4圖之線1至線3相同,用於檢查另一過程(例如,執行緒之當前群組外部的執行緒,或例如在多處理器系統中的不同處理器上執行之過程)是否已為暫存器x19中的位址所識別之資源獲得鎖定。
線6:條件性分支,在另一過程為x19中所識別之位址保持鎖定的事件中分支至線10至線12處的「後退」序列。
線7至線8:與第4圖之線5及線7相同。為暫存器x19中的位址設定鎖定的儲存互斥指令,及條件性分支,若儲存互斥指令失效,則分支回到線2。與第4圖之線6不同,若成功獲取鎖定,則不存在條件性指令使鎖定計數遞增,因為在第8圖中,鎖定計數已在線1處遞增。
線9:若成功獲取鎖定,則分支至線13以使用已鎖定資源實行一些東西。
線10:標籤「backoff_lock」,表示已為暫存器x19中的位址所識別之資源設定鎖定情況下放棄鎖定特權的後退序列之開始。藉由放棄鎖定特權,在暫存器x19之自身版本中可具有不同位址的另一執行緒可能夠成功獲得自身的鎖定,並取得進展。
線11:使鎖定計數504遞減。若此導致鎖定計數504變成零,則亦清除鎖定設定旗標500,使得另一執行緒可獲得鎖定特權。在線11之後,執行緒可等待一些時間以允許相同群組中的其他執行緒有時間完成使用鎖定的處理及釋放該鎖定。
線12:分支回到線0處的鎖定序列之開始以再次努力獲得鎖定。
線13:標籤「lock_acquired」,表示成功獲取鎖定情況下執行之序列開始。在此之後,可使用已鎖定資源執行任何數目之指令。
線14:一旦完成使用已鎖定資源的處理,隨後便開始解鎖序列。
線15至線17:與第4圖之線10至線12相同以放棄鎖定,只是在此情況中若執行dec_lock_count指令及此導致鎖定計數504變成零,則清除鎖定設定旗標500。
因此,在此實例下,每次執行緒之相同群組內的僅一個執行緒可保持鎖定,以提供防止死鎖的額外保護。
第9圖圖示當使用第二實施例時選擇選定執行緒(且因此將哪個執行緒程式計數器設定為執行緒群組之通用程式計數器)之方法。由於群組內每次僅一個執行緒可保持鎖定,程式計數器選擇過程之初始部分變得更簡單。在步驟600處,選擇器110決定鎖定設定旗標500是否指示群組內的任何執行緒是否保持鎖定。若是,則在步
驟602處,選擇器110選擇由鎖定所有者參數502所指示之執行緒作為選定執行緒。
另一方面,若鎖定設定旗標指示群組中無執行緒當前保持鎖定,則在步驟604處,將群組(子集)中的全部執行緒視為執行緒之「第一組」中的一部分。方法隨後行進至第5圖之步驟S225,且之後,方法隨後以與第5圖相同的方式行進,以基於函數調用深度及執行緒程式計數器選擇選定執行緒。
已選擇選定執行緒,可如前所述應用第6圖之步驟S410及S420。
在本申請案中,用語「經配置以...」用於意謂設備之元件具有能夠實施所定義之操作的配置。在此上下文中,「配置」意謂硬體或軟體之互連之排列或方式。舉例而言,設備可具有提供所定義之操作的專用硬體,或處理器或其他處理裝置可經程式化以執行函數。「經配置以」並非暗指為了提供所界定之操作需要以任何方式改變設備元件。
儘管本文已參看隨附圖式詳細描述本發明之說明性實施例,但應將理解,本發明並不受限於彼等精確實施例,且在不脫離隨附申請專利範圍所定義之本發明之範疇及精神的情況下,可由熟習此項技術者實行各種變化及修改。
100‧‧‧資料處理設備
110‧‧‧選擇器
120‧‧‧通用程式計數器
130‧‧‧提取單元
140‧‧‧解碼單元
150‧‧‧發佈單元
160‧‧‧處理器
170‧‧‧記憶體
180‧‧‧暫存器檔案
182‧‧‧暫存器組/程式計數器
184‧‧‧程式計數器
186‧‧‧函數調用深度計數器
188‧‧‧鎖定計數器
Claims (27)
- 一種經配置以執行複數個執行緒的資料處理設備,該資料處理設備包含:一通用程式計數器,用於識別針對至少該複數個執行緒之一子集執行之一串指令中的一個指令,其中該子集中的每一執行緒具有用於識別該串指令中的一個指令之一關聯執行緒程式計數器;一選擇器,經配置以選擇執行緒之該子集中的一選定執行緒且將該通用程式計數器設定為與該選定執行緒關聯的該執行緒程式計數器;以及一處理器,經配置以針對包括該選定執行緒的執行緒之該子集中的一或更多者執行藉由該通用程式計數器所識別之一指令,其中執行緒之該子集與至少一個鎖定參數關聯以便追蹤執行緒之該子集中的何者具有對一共享資源之互斥存取;其中該處理器經配置以回應於針對彼執行緒執行之一第一指令而修改該至少一個鎖定參數來指示一執行緒已經獲得對該共享資源之互斥存取,且回應於針對彼執行緒執行之一第二指令而修改與該執行緒關聯的該至少一個鎖定參數來指示該執行緒不再具有對該共享資源之互斥存取;且 其中該選擇器經配置以基於該至少一個鎖定參數選擇該選定執行緒。
- 如請求項1所述之資料處理設備,其中該處理器經配置以回應於包含針對彼執行緒執行之至少一個鎖定指令的一鎖定序列授權對該共享資源之一執行緒互斥存取。
- 如請求項2所述之資料處理設備,其中該鎖定序列未包含該第一指令。
- 如請求項1所述之資料處理設備,其中該處理器經配置以回應於包含針對彼執行緒執行之至少一個解鎖指令的一解鎖序列向一執行緒放棄對該共享資源之互斥存取。
- 如請求項4所述之資料處理設備,其中該解鎖序列未包含該第二指令。
- 如請求項1所述之資料處理設備,其中該選擇器經配置以優先於由該至少一個鎖定參數指示為不具有對該共享資源之互斥存取的一第二執行緒而選擇由該至少一個鎖定參數指示為具有對該共享資源互斥存取的一第一執行緒來作為該選定執行緒。
- 如請求項1所述之資料處理設備,其中該選擇器經配置以基於與執行緒之該子集中的 每一執行緒關聯的一函數調用深度參數選擇該選定執行緒。
- 如請求項1所述之資料處理設備,其中該選擇器經配置以基於與執行緒之該子集中的每一執行緒關聯的該執行緒程式計數器選擇該選定執行緒。
- 如請求項1所述之資料處理設備,其中該子集中的每一執行緒具有一相應鎖定參數,其中該處理器經配置以回應於針對彼執行緒執行之一第一指令而修改對應於一執行緒的該鎖定參數來指示該執行緒已經獲得對該共享資源之互斥存取,且回應於針對彼執行緒執行之一第二指令而修改對應於該執行緒的該鎖定參數來指示該執行緒不再具有對該共享資源之互斥存取。
- 如請求項9所述之資料處理設備,其中該處理器經配置以容許一第一執行緒具有對一第一共享資源之互斥存取,同時一第二執行緒具有對一第二共享資源之互斥存取。
- 如請求項9所述之資料處理設備,其中該選擇器經配置以基於執行緒之該子集中的每一執行緒之該相應鎖定參數選擇一第一組執行緒;其中該選擇器經配置以基於一函數調用深度參數在 該第一組執行緒中選擇一第二組執行緒;其中該選擇器經配置以基於與該第二組執行緒中的該等執行緒關聯的該等執行緒程式計數器在該第二組執行緒中選擇該選定執行緒。
- 如請求項1中任一者所述之資料處理設備,其中該至少一個鎖定參數包含在執行緒之該子集之間共享的一共享鎖定參數,且指示執行緒之該子集中的何者具有對一共享資源之互斥存取的一鎖定所有者參數。
- 如請求項12所述之資料處理設備,其中該共享鎖定參數包含一鎖定旗標,該鎖定旗標指示執行緒之該子集中的任何者是否具有對一共享資源之互斥存取。
- 如請求項12所述之資料處理設備,其中該共享鎖定參數包含一鎖定計數,該鎖定計數指示由該鎖定所有者參數所指示之該執行緒具有互斥存取之一資源數目。
- 如請求項12所述之資料處理設備,其中若一第一執行緒具有對一第一共享資源之互斥存取,該處理器經配置以防止一第二執行緒具有對一第二共享資源之互斥存取。
- 如請求項12所述之資料處理設備,其中若 該至少一個鎖定參數指示一執行緒具有對一共享資源之互斥存取,則該選擇器經配置以選擇由該鎖定所有者參數所指示之該執行緒作為該選定執行緒;以及若該至少一個鎖定參數指示無執行緒具有對一共享資源之互斥存取,則該選擇器經配置以基於一函數調用深度參數在執行緒之該子集中選擇執行緒之另一子集,且基於與執行緒之該另一子集中的該等執行緒關聯的該等執行緒程式計數器在執行緒之該另一子集中選擇該選定執行緒。
- 如請求項1所述之資料處理設備,其中該處理器經配置以回應於該第一指令遞增該至少一個鎖定參數;以及其中該處理器經配置以回應於該第二指令遞減該至少一個鎖定參數。
- 如請求項17所述之資料處理設備,其中該至少一個鎖定參數指示一執行緒具有互斥存取之該共享資源數目。
- 如請求項1所述之資料處理設備,其中執行緒之該子集中的該一或更多者包含具有匹配該選定執行緒之相應執行緒參數的一或更多個關聯執行緒參數之該等執行緒,該一或更多個關聯執行緒參數包括至少該執行緒程式計數器。
- 如請求項1所述之資料處理設備,其中該等指令包含微操作。
- 如請求項1所述之資料處理設備,其中將該第一指令及該第二指令編碼為至少一個預定義指令集中的一NOOP指令。
- 如請求項1所述之資料處理設備,其中該處理器經配置以回應於該第一指令及該第二指令中的至少一者執行另一操作。
- 如請求項22所述之資料處理設備,其中該另一操作為以下之一或更多者:作為用於獲得對該共享資源之互斥存取的一鎖定序列的一部分的一操作;作為用於放棄對該共享資源之互斥存取的一解鎖序列的一部分的一操作;用於存取該共享資源的一操作;用於決定該執行緒是否具有對該共享資源之互斥存取的一操作;及一比較與交換操作。
- 如請求項1所述之資料處理設備,其中該共享資源包含一記憶體中的資料。
- 如請求項24所述之資料處理設備,其中該處理器經配置以在放棄對該共享資源之互斥存取之前發佈對該記憶體之一記憶體阻障操作。
- 一種用於針對複數個執行緒之一子集執行一串指令的資料處理方法,其中該子集中的每一執行 緒具有用於識別該串指令中的一個指令之一關聯執行緒程式計數器,該資料處理方法包含以下步驟:選擇執行緒之該子集中的一選定執行緒,且將一通用程式計數器設定為與該選定執行緒關聯的該執行緒程式計數器,其中該通用程式計數器識別針對執行緒之該子集執行之一串指令中的一個指令;以及針對包括該選定執行緒的執行緒之該子集中的一或更多者執行藉由該通用程式計數器所識別之一指令,其中執行緒之該子集與至少一個鎖定參數關聯以便追蹤執行緒之該子集中的何者具有對一共享資源之互斥存取;其中回應於針對彼執行緒執行之一第一指令而修改該至少一個鎖定參數來指示一執行緒已經獲得對該共享資源之互斥存取,且回應於針對彼執行緒執行之一第二指令而修改該至少一個鎖定參數來指示該執行緒不再具有對該共享資源之互斥存取;以及其中該選擇器經配置以基於該至少一個鎖定參數選擇該選定執行緒。
- 一種經配置以執行複數個執行緒的資料處理設備,該資料處理設備包含:一通用程式計數器手段,用於識別將針對該複數個執行緒之至少一子集執行之一串指令中的一個指令, 其中該子集中的每一執行緒具有用於識別該串指令中的一個指令之一關聯執行緒程式計數器手段;一選擇手段,用於選擇執行緒之該子集之一選定執行緒及用於將該通用程式計數器手段設定為與該選定執行緒關聯的該執行緒程式計數器手段;以及一處理器手段,用於針對包括該選定執行緒的執行緒之該子集中的一或更多者執行藉由該通用程式計數器手段所識別之一指令,其中執行緒之該子集與至少一個鎖定參數關聯以便追蹤執行緒之該子集中的何者具有對一共享資源之互斥存取;其中該處理器手段用於回應於針對彼執行緒執行之一第一指令而修改該至少一個鎖定參數來指示一執行緒已經獲得對該共享資源之互斥存取,且回應於針對彼執行緒執行之一第二指令而修改該至少一個鎖定參數來指示該執行緒不再具有對該共享資源之互斥存取;且其中該選擇手段用於基於該至少一個鎖定參數選擇該選定執行緒。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1415834.9A GB2529899B (en) | 2014-09-08 | 2014-09-08 | Shared Resources in a Data Processing Apparatus for Executing a Plurality of Threads |
GB1415834.9 | 2014-09-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201617859A true TW201617859A (zh) | 2016-05-16 |
TWI695319B TWI695319B (zh) | 2020-06-01 |
Family
ID=51796341
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104127210A TWI695319B (zh) | 2014-09-08 | 2015-08-20 | 用於執行複數個執行緒之資料處理設備中之共享資源 |
Country Status (11)
Country | Link |
---|---|
US (1) | US10528350B2 (zh) |
EP (1) | EP3191955B1 (zh) |
JP (1) | JP6563485B2 (zh) |
KR (1) | KR102449957B1 (zh) |
CN (1) | CN106716348B (zh) |
GB (1) | GB2529899B (zh) |
IL (1) | IL250301B (zh) |
RU (1) | RU2685021C2 (zh) |
SG (1) | SG11201701158XA (zh) |
TW (1) | TWI695319B (zh) |
WO (1) | WO2016038328A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108021339B (zh) * | 2017-11-03 | 2021-05-04 | 网宿科技股份有限公司 | 一种磁盘读写的方法、设备以及计算机可读存储介质 |
CN108037680B (zh) * | 2017-12-14 | 2020-05-19 | 北京霍因数字科技有限公司 | 一种指令处理方法及装置 |
EP3588280B1 (en) * | 2018-06-25 | 2021-09-08 | ARM Limited | Handling load-exclusive instructions in apparatus having support for transactional memory |
CN109271260A (zh) * | 2018-08-28 | 2019-01-25 | 百度在线网络技术(北京)有限公司 | 临界区加锁方法、装置、终端及存储介质 |
CN109831585B (zh) * | 2019-02-22 | 2021-06-25 | 维沃移动通信有限公司 | 一种运行参数调整方法及移动终端 |
CN111352762A (zh) * | 2020-03-04 | 2020-06-30 | 恒生电子股份有限公司 | 一种进程访问确定方法和相关装置 |
CN113377492B (zh) * | 2020-03-10 | 2022-05-24 | 阿里巴巴集团控股有限公司 | 内存管理方法、装置、电子设备及计算机可读存储介质 |
CN112000019B (zh) * | 2020-07-24 | 2024-04-26 | 青岛海尔空调器有限总公司 | 用于共享设备指令控制的方法、装置及设备 |
CN111913810B (zh) * | 2020-07-28 | 2024-03-19 | 阿波罗智能技术(北京)有限公司 | 多线程场景下的任务执行方法、装置、设备和存储介质 |
CN115408178B (zh) * | 2022-10-31 | 2023-02-21 | 北京登临科技有限公司 | 用于保护对片上资源的访问的方法、介质和电子设备 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6598068B1 (en) * | 1996-01-04 | 2003-07-22 | Sun Microsystems, Inc. | Method and apparatus for automatically managing concurrent access to a shared resource in a multi-threaded programming environment |
US6357016B1 (en) * | 1999-12-09 | 2002-03-12 | Intel Corporation | Method and apparatus for disabling a clock signal within a multithreaded processor |
US7363474B2 (en) * | 2001-12-31 | 2008-04-22 | Intel Corporation | Method and apparatus for suspending execution of a thread until a specified memory access occurs |
US7015913B1 (en) * | 2003-06-27 | 2006-03-21 | Nvidia Corporation | Method and apparatus for multithreaded processing of data in a programmable graphics processor |
US7496918B1 (en) * | 2004-06-01 | 2009-02-24 | Sun Microsystems, Inc. | System and methods for deadlock detection |
US7765547B2 (en) * | 2004-11-24 | 2010-07-27 | Maxim Integrated Products, Inc. | Hardware multithreading systems with state registers having thread profiling data |
US8566827B2 (en) | 2005-10-27 | 2013-10-22 | International Business Machines Corporation | System and method of arbitrating access of threads to shared resources within a data processing system |
US20070124545A1 (en) * | 2005-11-29 | 2007-05-31 | Anton Blanchard | Automatic yielding on lock contention for multi-threaded processors |
US8683143B2 (en) * | 2005-12-30 | 2014-03-25 | Intel Corporation | Unbounded transactional memory systems |
US8453147B2 (en) | 2006-06-05 | 2013-05-28 | Cisco Technology, Inc. | Techniques for reducing thread overhead for systems with multiple multi-threaded processors |
US20080270732A1 (en) * | 2007-04-27 | 2008-10-30 | Weidong Cai | Adaptive arena assignment based on arena contentions |
US8140823B2 (en) * | 2007-12-03 | 2012-03-20 | Qualcomm Incorporated | Multithreaded processor with lock indicator |
TWI462011B (zh) * | 2007-12-28 | 2014-11-21 | Accton Technology Corp | 程序之執行緒群組管理方法 |
US8055856B2 (en) | 2008-03-24 | 2011-11-08 | Nvidia Corporation | Lock mechanism to enable atomic updates to shared memory |
US8166480B2 (en) * | 2008-07-29 | 2012-04-24 | International Business Machines Corporation | Reducing lock contention by adding a time slice to an active thread holding a lock |
US8312470B2 (en) * | 2009-12-22 | 2012-11-13 | International Business Machines Corporation | Recursive locking of a thread-shared resource |
US20120054394A1 (en) * | 2010-09-01 | 2012-03-01 | Alcatel-Lucent Usa Inc. | Fast Biased Locks |
JP5725162B2 (ja) | 2011-03-31 | 2015-05-27 | 富士通株式会社 | 排他制御方法、および排他制御プログラム |
CN104583942B (zh) * | 2012-06-15 | 2018-02-13 | 英特尔公司 | 乱序加载的基于锁的和基于同步的方法 |
US9229721B2 (en) | 2012-09-10 | 2016-01-05 | Qualcomm Incorporated | Executing subroutines in a multi-threaded processing system |
US9678897B2 (en) | 2012-12-27 | 2017-06-13 | Nvidia Corporation | Approach for context switching of lock-bit protected memory |
US9304940B2 (en) * | 2013-03-15 | 2016-04-05 | Intel Corporation | Processors, methods, and systems to relax synchronization of accesses to shared memory |
-
2014
- 2014-09-08 GB GB1415834.9A patent/GB2529899B/en active Active
-
2015
- 2015-07-28 US US15/505,714 patent/US10528350B2/en active Active
- 2015-07-28 WO PCT/GB2015/052177 patent/WO2016038328A1/en active Application Filing
- 2015-07-28 CN CN201580046904.0A patent/CN106716348B/zh active Active
- 2015-07-28 JP JP2017512043A patent/JP6563485B2/ja active Active
- 2015-07-28 SG SG11201701158XA patent/SG11201701158XA/en unknown
- 2015-07-28 EP EP15744324.3A patent/EP3191955B1/en active Active
- 2015-07-28 KR KR1020177008698A patent/KR102449957B1/ko active IP Right Grant
- 2015-07-28 RU RU2017110464A patent/RU2685021C2/ru active
- 2015-08-20 TW TW104127210A patent/TWI695319B/zh active
-
2017
- 2017-01-26 IL IL250301A patent/IL250301B/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
GB2529899A (en) | 2016-03-09 |
CN106716348A (zh) | 2017-05-24 |
TWI695319B (zh) | 2020-06-01 |
JP6563485B2 (ja) | 2019-08-21 |
WO2016038328A1 (en) | 2016-03-17 |
RU2017110464A3 (zh) | 2019-02-07 |
US20170286107A1 (en) | 2017-10-05 |
KR20170051465A (ko) | 2017-05-11 |
SG11201701158XA (en) | 2017-03-30 |
IL250301A0 (en) | 2017-03-30 |
US10528350B2 (en) | 2020-01-07 |
GB201415834D0 (en) | 2014-10-22 |
KR102449957B1 (ko) | 2022-10-05 |
EP3191955A1 (en) | 2017-07-19 |
JP2017530455A (ja) | 2017-10-12 |
IL250301B (en) | 2020-08-31 |
RU2685021C2 (ru) | 2019-04-16 |
GB2529899B (en) | 2021-06-23 |
CN106716348B (zh) | 2021-05-18 |
EP3191955B1 (en) | 2021-09-22 |
RU2017110464A (ru) | 2018-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI695319B (zh) | 用於執行複數個執行緒之資料處理設備中之共享資源 | |
US8464261B2 (en) | System and method for executing a transaction using parallel co-transactions | |
EP3701377B1 (en) | Method and apparatus for updating shared data in a multi-core processor environment | |
JP2500101B2 (ja) | 共用変数の値を更新する方法 | |
US9727369B2 (en) | System and method for implementing reader-writer locks using hardware transactional memory | |
US8190859B2 (en) | Critical section detection and prediction mechanism for hardware lock elision | |
US7120762B2 (en) | Concurrent execution of critical sections by eliding ownership of locks | |
CN105511969B (zh) | 一种跨进程的线程间进行互斥的方法 | |
US10929201B2 (en) | Method and system for implementing generation locks | |
US9207967B2 (en) | Using nonspeculative operations for lock elision | |
CN110675255B (zh) | 在区块链中并发执行交易的方法和装置 | |
JP6568575B2 (ja) | トランザクション・データ処理実行モードのための呼出しスタック維持 | |
JP2017520857A5 (zh) | ||
US8893137B2 (en) | Transaction-based shared memory protection for high availability environments | |
US8108865B2 (en) | Process replication method and system | |
CN110689344B (zh) | 在区块链中并发执行交易的方法和装置 | |
Singh | On bounding Jayanti's distributed mutual exclusion algorithm | |
KR20170103153A (ko) | 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치 |