TWI715087B - 多核系統處理器和資料更新方法 - Google Patents
多核系統處理器和資料更新方法 Download PDFInfo
- Publication number
- TWI715087B TWI715087B TW108122771A TW108122771A TWI715087B TW I715087 B TWI715087 B TW I715087B TW 108122771 A TW108122771 A TW 108122771A TW 108122771 A TW108122771 A TW 108122771A TW I715087 B TWI715087 B TW I715087B
- Authority
- TW
- Taiwan
- Prior art keywords
- lock
- cpu
- memory
- key area
- function
- Prior art date
Links
Images
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Computing Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
Abstract
本說明書實施例提供一種多核系統處理器和資料更新方法,其中,所述方法應用於多核系統處理器,所述多核系統處理器用於處理多執行緒任務,並且,所述多核系統處理器包括多個CPU;待更新的資料是多個執行緒的共享資料;所述方法由任一CPU執行;該方法可以包括:在本CPU對應的執行緒將要執行對應的關鍵區域函數時,請求獲取鎖,所述鎖用於表示對所述多個執行緒的共享資料執行更新的權限;所述關鍵區域函數用於更新所述共享資料;若所述鎖已經被其他CPU佔用,則在鎖記憶體設置對應本CPU的記憶體索引,以使得擁有鎖的CPU根據記憶體索引執行本CPU對應執行緒的關鍵區域函數。
Description
本公開係關於電腦技術領域,特別關於一種多核系統處理器和資料更新方法。
多核系統處理器(Multiple Cores Processor)是指在一枚處理器中集成兩個或多個完整的計算引擎(CPU),由於多核系統處理器能夠在單位時間內處理更多的任務,處理能力更強,應用也越發廣泛。在利用多核系統處理器運行多執行緒任務時,該多個執行緒之間可以具有都能夠操作的共享資料(Shared_Data)。並且,在更新所述的共享資料時,同一時刻只能有一個執行緒更新,以避免執行緒衝突導致資料錯誤。當前技術中,各個執行緒之間可以申請鎖Lock,成功獲取到鎖的執行緒可以操作該共享資料,未獲取到鎖的執行緒只能等待。此外,成功獲取到鎖的執行緒會將鎖和共享資料移轉到對應CPU的私有快取中,這種不同執行緒執行時將鎖和共享資料在各個CPU之間來回遷移的行為影響了所有執行緒執行結束所需要的時間,使得多執行緒任務的執行效率較低。
有鑑於此,本說明書一個或多個實施例提供一種多核系統處理器和資料更新方法,以提高多執行緒對共享資料操作時的處理效率。
具體地,本說明書一個或多個實施例是透過如下技術方案實現的:
第一態樣,提供一種資料更新方法,所述方法應用於多核系統處理器,所述多核系統處理器用於處理多執行緒任務,並且,所述多核系統處理器包括多個CPU;待更新的資料是多個執行緒的共享資料;所述方法由任一CPU執行;該方法可以包括:
在本CPU對應的執行緒將要執行對應的關鍵區域函數時,請求獲取鎖,所述鎖用於表示對所述多個執行緒的共享資料執行更新的權限;所述關鍵區域函數用於更新所述共享資料;
若所述鎖已經被其他CPU佔用,則在鎖記憶體設置對應本CPU的記憶體索引,以使得擁有鎖的CPU根據記憶體索引執行本CPU對應執行緒的關鍵區域函數。
第二態樣,提供一種資料更新方法,所述方法應用於多核系統處理器,所述多核系統處理器用於處理多執行緒任務,並且,所述多核系統處理器包括多個CPU;待更新的資料是多個執行緒的共享資料;所述方法由任一CPU執行:該方法可以包括:
在本CPU對應的執行緒將要執行對應的關鍵區域函數時,請求獲取鎖,所述鎖用於表示對所述多個執行緒的共享資料執行更新的權限;
若所述鎖未被其他CPU佔用,則獲取到所述鎖,執行本CPU對應執行緒的關鍵區域函數,以透過所述關鍵區域函數更新所述共享資料;
在執行本CPU對應執行緒的關鍵區域函數後,若發現鎖記憶體中還設置有其他CPU的記憶體索引,則根據所述記憶體索引執行對應的關鍵區域函數,以透過所述關鍵區域函數更新所述共享資料。
第三態樣,提供一種多核系統處理器,所述多核系統處理器包括多個CPU,所述多核系統處理器用於處理多執行緒任務,該多個執行緒具有待更新的共享資料;
所述多核系統處理器中的每個CPU,用於執行可執行指令以實現如下操作:
在本CPU對應的執行緒將要執行對應的關鍵區域函數時,請求獲取鎖;所述鎖用於表示對所述多個執行緒的共享資料執行更新的權限;
判斷所述鎖是否已經被其他CPU佔用;
若所述鎖已經被其他CPU佔用,則在鎖記憶體設置對應本CPU的記憶體索引,以使得擁有鎖的CPU根據記憶體索引執行本CPU對應執行緒的關鍵區域函數;
若所述鎖未被其他CPU佔用,則獲取到所述鎖,執行本CPU對應執行緒的關鍵區域函數,以更新共享資料;並且,在執行本CPU對應執行緒的關鍵區域函數後,若發現鎖記憶體中還設置有其他CPU的記憶體索引,則根據所述記憶體索引執行對應的關鍵區域函數。
本說明書一個或多個實施例的多核系統處理器和資料更新方法,透過由鎖申請者CPU在鎖記憶體的位元位置位,使得鎖擁有者CPU可以根據記憶體索引直接調用執行鎖申請者對應的關鍵區域函數,從而鎖申請者不需要再將鎖和共享資料移轉到其本地私有快取,減少了鎖和共享資料的遷移,提高了多執行緒對共享資料操作時的處理效率。
為了使本技術領域的人員更好地理解本說明書一個或多個實施例中的技術方案,下面將結合本說明書一個或多個實施例中的附圖,對本說明書一個或多個實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本說明書一部分實施例,而不是全部的實施例。基於本說明書一個或多個實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都應當屬於本公開保護的範圍。
本說明書至少一個實施例提供的資料更新方法,應用於多核系統處理器。如下對多核系統處理器的結構進行說明:
請參見圖1,多核系統處理器包括多個CPU,例如,CPU1、CPU2、CPUn等n個CPU。每個CPU有自己的私有快取(private cache),各個CPU之間還可以具有共享快取(shared cache)。
當該多核系統處理器用於處理多執行緒任務時,例如,可以在該多核系統處理器並行啟動256個執行緒,並且這些執行緒之間具有全域共享資料Shared_Data,該共享資料能夠被各個執行緒操作更新,不過,同一時刻只能由一個執行緒更新,以防止出現資料錯誤。實際實施中,可以透過鎖Lock控制哪個執行緒能夠更新共享資料,成功獲取到鎖的執行緒才有權限更新共享資料。
如下簡單解釋資料更新方法中將涉及到的幾個特徵:
多核系統處理器中的各個CPU:例如,圖1中的多個CPU中的而每個CPU可以對應一個執行緒。如,CPU1用於運行執行緒1,CPU2用於運行執行緒2。當執行緒啟動運行時,該執行緒對應的CPU將為執行緒申請鎖Lock,如果成功獲取到鎖,則該執行緒可以對共享資料進行更新操作。例如,如果CPU1獲取到鎖,則對應的執行緒1可以對共享資料Shared_Data進行更新。
鎖記憶體:當某一個CPU獲取到鎖之後,該CPU成為鎖的擁有者,也可以稱為“擁有鎖的CPU”。該CPU可以將鎖遷移到自己的私有快取中,該鎖將至少佔用CPU的私有快取中的一條快取列(cache line)。例如,如圖1所示,假設CPU2成為鎖的擁有者,那麼鎖將遷移到CPU2的私有快取中,並至少佔用一條cache line。鎖佔用的這部分cache line區域可以稱為鎖記憶體。鎖記憶體預設是清零,當CPU2擁有了鎖之後,可以設置鎖內容非0,例如,可以將鎖記憶體中對應本CPU的記憶體索引的位元位設置為1。
關鍵區域函數:例如,請參見圖2所示,執行緒1、執行緒2、執行緒3等各個執行緒,在對共享資料Shared_Data進行更新時,可以依據不同的關鍵區域函數。該關鍵區域函數可以是用於對共享資料執行更新操作的一段代碼,透過執行該函數可以更新共享資料。多個執行緒都可以透過關鍵區域函數對共享資料進行更新,不同執行緒對應的關鍵區域函數可以是不同的。
記憶體索引:請繼續參見圖2,如上提到,各個執行緒可以分別使用不同的關鍵區域函數對共享資料進行更新操作,那麼,可以將該關鍵區域函數的函數指標和參數指標儲存在一段記憶體中,各個執行緒的關鍵區域函數可以分別儲存在不同的記憶體中。例如,執行緒1的關鍵區域函數的相關指標儲存在一段記憶體中,執行緒2的關鍵區域函數的相關指標儲存在另一段記憶體中。並且可以對各個記憶體進行編號。如圖2所示,示例性的,Memory[1]中儲存執行緒1的關鍵區域函數的相關指標,Memory[2]中儲存執行緒2的關鍵區域函數的相關指標,等。這裡對各個記憶體的編號即稱為“記憶體索引”,例如,Memory[2]中的“2”是一個記憶體索引。
舉例如下:假設執行緒0至執行緒100要對共享資料shared_data進行更新,對應的,例如,Memory[0]中儲存執行緒0的關鍵區域函數,Memory[8]中儲存執行緒8的關鍵區域函數。假設CPU5運行執行緒8,可以透過get_lock (&Lock, n)請求獲取鎖,其中的n即記憶體索引8,如,get_lock(&Lock, 8)。當CPU5發現鎖已經被其他CPU佔用後,可以在鎖記憶體的位元位8置1。後續鎖擁有者CPU發現位元位8置1,就可以去Memory[8]獲取關鍵區域函數進行執行。
還需要說明的是,在本說明書實施例的部分描述中,提到的在鎖記憶體對應的位元位設置對應本CPU的記憶體索引,指的是將鎖記憶體對應記憶體索引的位元位置1,比如,Memory[8]的記憶體索引是8,如果要執行其中的關鍵區域函數,則將鎖記憶體的位元位8置1。並且,所述的“本CPU對應的記憶體索引”,其實是本CPU上運行的執行緒對應的記憶體索引。比如上述的,CPU5運行執行緒8,該執行緒8對應要執行的是Memory[8]中的關鍵區域函數,那麼CPU5對應的記憶體索引就是Memory[8]中的8。
如圖3所示,每一個記憶體索引n對應的記憶體Memory[n]中,都儲存了關鍵區域函數的函數指標和參數指標,可以根據這些指標找到對應的關鍵區域函數以及在函數執行中使用到的參數,從而完成關鍵區域函數的調用執行。
critcal_section(*para):每個關鍵區域函數的地址,佔用8位元組。
Void*para中的para={void *ret,void *Shared_Data關鍵區域共享資料}。其中的void *ret中的參數ret初始可以是在執行緒本地記憶體中設置,後續執行過程中可以根據該參數的值確認關鍵區域函數是否調用完成。其中的void *Shared_Data表示關鍵區域要操作的共享資料指標。
每一個執行緒都對應著圖3所示的一塊記憶體區域。例如,假如並行啟動了256個執行緒,那麼共有256個所述的記憶體區域。在所述256個執行緒的多執行緒任務啟動的初始化階段,可以在圖1的每個CPU中都拷貝一份該256個記憶體區域,以加速後續的訪問。即,多核系統處理器的每個CPU的私有快取中都可以儲存一份圖3所示的記憶體區域(256個所述的區域),每個記憶體區域對應一個執行緒。不過,上述記憶體區域的所在位置不一定是CPU私有快取,不限制其位置,例如,還可以在共享快取或者記憶體中,當CPU要執行該記憶體區域中的關鍵區域函數時,可以將其移動到CPU的私有快取中。此外,對應每個執行緒的CPU可以知曉其對應的記憶體索引,例如,CPU2可以知曉對應的記憶體索引是2,即在Memory[2]中儲存了CPU2對應的執行緒2的關鍵區域函數。
在上述描述的特徵的基礎上,下面將說明本說明書至少一個實施例的多核系統處理器如何執行多執行緒任務,並且該任務中的多個執行緒可以對同一共享資料進行操作更新。本說明書實施例提供的資料更新方法,將實現多核系統處理器更快的完成多執行緒任務的執行,提升任務執行效率。
以圖1中的CPU1為例,假設CPU1對應的執行緒將要執行對應的關鍵區域函數,則CPU1可以開始執行圖4所示的流程:
在步驟400中,CPU1在本CPU的私有快取中設置標識參數。
在請求獲取鎖之前,CPU1可以先設置本地記憶體para->ret=1。該參數ret可以稱為標識參數。該標識參數的設置,是為了後續步驟中CPU1知曉鎖的擁有者是否已經調用執行本執行緒對應的關鍵區域函數。
在步驟402中,CPU1請求獲取鎖,並獲取到鎖所在的位置。
本步驟中,CPU1可以調用鎖請求指令get_lock (&Lock, n),請求獲取鎖Lock。該鎖請求指令將試圖獲取共享的記憶體鎖Lock的取值;並且,該指令中還攜帶本CPU1對應的記憶體索引n,即在Memorey[n]的記憶體區域中儲存了CPU1對應執行緒的關鍵區域函數的相關資訊。
其中,在CPU1試圖獲取鎖的過程中,可以根據快取一致性MESI(Modified Exclusive Shared Or Invalid)協定,獲取鎖記憶體的地址,即知曉當前鎖存放在哪裡。例如,CPU1可以在共享快取中發現該鎖的狀態M,並且地址是位於CPU2中。那麼,CPU1將去CPU2的私有快取中查詢鎖的值。不過,也可能當前鎖的存放位置是在共享快取等其他地方,不限制在私有快取。
在步驟404中,CPU1根據鎖的值,判斷鎖是否已經被其他CPU佔用。
例如,如果鎖的取值是0,表示該鎖未被其他CPU佔用,則後續執行的流程可以參見圖5所示,這裡不再詳述。如果鎖的取值是非0,那麼意味著該鎖已經被CPU2佔用。
在步驟406中,當CPU1確定鎖已被佔用時,在鎖記憶體對應的位元位設置對應本CPU1的記憶體索引。
本步驟中,當CPU1確定鎖已被佔用時,例如,鎖已經被CPU2佔用,鎖記憶體也在CPU2中,鎖的最新值也在該CPU2的私有快取中。那麼,CPU1可以將鎖請求指令get_lock(&Lock, n)中的記憶體索引n,設置在鎖記憶體中該記憶體索引對應的位元位。如,將1位元位置1。
此外,在記憶體對應的位元位設置對應本CPU1的記憶體索引後,CPU1只要等待即可,CPU1的執行緒對應的關鍵區域函數將被CPU2調用執行。
需要說明的是,本步驟中當鎖申請者CPU1確定鎖已被佔用時,在鎖記憶體對應的位元位設置對應本CPU1的記憶體索引,是在鎖原地設置即可,例如,鎖記憶體可以是在CPU2的私有快取,也可能是在共享快取等其他位置,根據快取一致性MESI協定找到鎖的存放位置後,在鎖原地的鎖記憶體對應的位元位設置即可,從而避免鎖的遷移。例如,若發現鎖在CPU2的私有快取,則在該私有快取中對應CPU1的位元位設置記憶體索引。
在步驟408中,CPU1輪詢本地的標識參數是否被清零,若標識參數已經被擁有鎖的CPU清除,則確定關鍵區域函數已經被擁有鎖的CPU調用執行結束,完成了本執行緒對共享資料的更新。
本步驟中,CPU1可以輪詢本地私有快取中的標識參數是否已經被CPU2清除,例如,可以執行指令while(para->ret==1)。一旦該標識參數ret被清除,表明CPU1的執行緒的關鍵區域函數已經被鎖擁有者CPU2執行完成,正常返回即可。CPU1的執行緒完成了對共享資料的更新操作。需要說明的是,CPU1可以是初始在本地私有快取中設置標識參數等於1,但是後續過程中也可能該標識參數的位置發生了變化,比如遷移到了共享快取和記憶體等位置,不論位置在哪裡,CPU2都可以根據MESI協定找到該標識參數的位置並原地清零,而CPU1也可以找到該標識參數的位置並查看是否被CPU2清零。
上述的圖4描述了CPU在申請鎖失敗時的處理流程,下面的圖5描述鎖擁有者的執行流程,如圖5所示,該流程以CPU2為例,當CPU2對應的執行緒將要執行對應的關鍵區域函數時,可以執行圖5所示的處理,包括:
在步驟500中,CPU2在本CPU的私有快取中設置標識參數。
在請求獲取鎖之前,CPU2可以先設置本地記憶體para->ret=1。該參數ret可以稱為標識參數。該標識參數的設置,是為了後續步驟中如果CPU2不能獲取到鎖時根據該參數知曉鎖的擁有者是否已經執行本執行緒對應的關鍵區域函數。
在步驟502中,CPU2請求獲取鎖,並獲取到鎖所在的位置。
本步驟中,CPU2可以調用鎖請求指令get_lock (&Lock, n),請求獲取鎖Lock。該鎖請求指令將試圖獲取共享的記憶體鎖Lock的取值;並且,該指令中還攜帶本CPU2對應的記憶體索引n,即在Memorey[n]的記憶體區域中儲存了CPU1對應執行緒的關鍵區域函數的相關資訊。
在步驟504中,CPU2根據鎖的值,確定鎖尚未被其他CPU佔用,CPU2獲取到鎖。
例如,如果鎖的取值是0,表示該鎖未被其他CPU佔用;如果鎖的取值是非0,那麼意味著該鎖已經被其他CPU佔用。本例子中假設CPU2發現鎖的取值是0,那麼CPU2獲取到鎖,並將鎖遷移到CPU2自己的私有快取中。
此外,CPU2在獲取到鎖後,可以將本地的鎖記憶體中對應get_lock(&Lock, n)中的n的bit位置1,使得鎖的取值是非0。由於CPU2自己是鎖擁有者,CPU2還可以將步驟500中設置的標識參數ret清除。CPU2對自己的標識參數的清除可以是在執行該CPU2對應的執行緒的關鍵區域函數結束之前,例如,後續步驟中將說明,每個關鍵區域函數的末尾都可以有一個remote_write指令,用於清除對應的標識參數ret。
在步驟506中,CPU2執行本CPU對應執行緒的關鍵區域函數,更新共享資料。
本步驟中,如上面提過的,示例性的,CPU2的本地私有快取中,可以儲存了256個執行緒的各個執行緒對應的關鍵區域函數相關資訊,CPU2自己的記憶體區域Memory也在本地私有快取中,執行即可。
在執行本CPU對應執行緒的關鍵區域函數後,CPU2可以判斷鎖記憶體中是否還有已經設置的其他CPU對應的記憶體索引。比如,如果CPU2發現在鎖記憶體的位元位3被置為1,則得到記憶體索引“3”。表明其他執行緒也請求了鎖,並且在等待執行該其他執行緒對應的關鍵區域函數。CPU2可以繼續執行步驟508。
在步驟508中,CPU2根據記憶體索引,執行該記憶體索引對應的記憶體區域中的關鍵區域函數。
本步驟中,例如,記憶體索引是3,CPU2可以查找到對應的記憶體區域Memory[3],根據該記憶體區域中儲存的函數指標和參數指標,執行關鍵區域函數對共享資料進行更新。例如,可以執行memory[3].critical_section (memory[3].para)。
此外,在執行關鍵區域函數對共享資料進行更新時,可以是使用共享資料寫指令Shared_write對共享資料執行寫操作。
在步驟510中,CPU2在執行關鍵區域函數結束之前,使用遠端寫指令,將其他CPU中的標識參數進行清零。
本步驟中,各個執行緒分別對應的關鍵區域函數的定義可以多種多樣,但是在關鍵區域函數的末尾可以包括遠端寫指令remote_write,以對標識參數進行清零操作。如下:
critical_section(void *para) {...., remote_write(para->ret, 0); return;}
如果CPU2在執行自己的關鍵區域函數,那麼可以發現標識參數在CPU2本地,可以本地清零即可。如果CPU2執行的CPU3對應的關鍵區域函數,那麼可以根據MESI協定獲取到該關鍵區域函數對應的標識參數的資料狀態和標識參數地址,並可以透過remote_write(para->ret, 0)原地對標識參數進行清零。
需要說明的是,CPU2在對CPU3的標識參數清零時,該標識參數ret可以是在CPU3的私有快取中,也可能是在共享快取等其他地方,CPU2可以根據快取一致性MESI協定獲取標識參數地址,即該標識參數的當前位置,並原地進行更新清零,而不會將參數ret遷移到CPU2的本地私有快取中。例如,CPU2可以根據MESI協定,在各個CPU的共享快取中查詢到標識參數ret的資料狀態M,並且該參數當前地址是在CPU3的私有快取,則CPU2直接在CPU3的私有快取中將該參數置為0。其中,CPU3可以稱為目標CPU。
而對於CPU3來說,如圖4中的步驟408所述,CPU3在將CPU2的鎖記憶體置位後,不斷輪詢其標識參數是否被清零。若標識參數已經被鎖擁有者CPU2清零,則CPU3可以確定其對應的關鍵區域函數已經被CPU2執行結束,完成了CPU3的執行緒對共享資料的更新。
CPU2在執行完CPU3對應的關鍵區域函數後,接著查詢是否還有其他等待執行的關鍵區域函數,過程同理,不再詳述。當CPU2發現已經執行完所有等待的關鍵區域函數後,可以繼續執行步驟512。
如下說明作為鎖的擁有者CPU2獲取其他CPU在鎖記憶體設置的記憶體索引的方式:例如,CPU2可以在執行本CPU對應執行緒的關鍵區域函數後,執行釋放鎖指令ret= put_lock(&Lock, 0x01),該釋放鎖指令的執行表示將要釋放鎖,並且,該釋放鎖指令put_lock可以具有一個返回值ret,可以根據該返回值ret確定是否可以釋放鎖了。該返回值ret可以是初始鎖記憶體與當前鎖記憶體之間的異或值。
舉例來說:CPU2在自己初始獲取到鎖後,設置鎖記憶體是0010。後續在CPU2執行自己的關鍵區域函數的過程中,有兩個其他CPU申請鎖,並在鎖記憶體對應的位元位設置了自己的記憶體索引,當前鎖記憶體是1110。透過將“0010”和“1110”進行異或運算,返回值是“1100”,表明“11”所在的那兩個位元位是新設置的。據此,CPU2可以根據返回值得到其他CPU的記憶體索引。
CPU2根據獲得的記憶體索引,執行對應的其他CPU的關鍵區域函數。同時,CPU2還將鎖記憶體重新置為初始鎖記憶體0010。當CPU2執行完了“11”所在的那兩個位元位對應的關鍵區域函數後,可以接著執行ret=put_lock (&Lock, 0x01),如果這期間又有新的CPU設置了記憶體索引,返回值ret將是非0,將可以透過返回值得到新的其他CPU設置的記憶體索引;如果這期間沒有其他CPU設置新記憶體索引,那麼返回值將是0000,則CPU2可以確認所有的關鍵區域函數均調用完成,可以繼續執行步驟512。
在步驟512中,CPU2釋放鎖,並將鎖和共享資料都放入到多個CPU的共享快取中。本步驟中,所有鎖請求者的關鍵區域函數都執行結束,該所有關鍵區域函數包括:鎖記憶體中所有設置的記憶體索引對應的關鍵區域函數,例如,本CPU對應的關鍵區域函數、以及其他CPU設置的記憶體索引對應的關鍵區域函數。
CPU2在所有關鍵區域函數都執行結束後,可以將鎖、以及使用共享資料寫指令更新的共享資料,都放入到多個CPU的共享快取中。當將鎖放入共享快取後,鎖記憶體將位於共享快取中。其中,放入共享快取的共享資料可以是採用共享資料寫指令操作過的所有共享資料,所述所有共享資料可以是各個執行緒對共享資料更新的地址不同,例如,共享資料shared_data可以共有四個cache line,而其中一個執行緒更新的是共享資料的其中一個cache line,另一個執行緒更新的是共享資料的另一個cache line中的內容,更新了哪個cache line,就將該cache line的共享資料放入共享快取。此外,在將鎖和共享資料放入共享快取後,可以將CPU2的私有快取中的鎖和共享資料置為無效,即invalidate Lock和shared_data的對應記憶體所在的本地私有快取,把更新的內容放到共享快取。
至此,鎖的擁有者CPU2已經釋放了鎖,將鎖放到了多個CPU的共享快取中,並且還將所有執行緒都更新後的最新的共享資料也放入到共享快取中,多核系統處理器完成了多執行緒任務對共享資料的所有更新操作。
在圖5的流程中,步驟506至步驟512是對共享資料進行更新的原子操作,一個CPU成功獲取到鎖之後,就會逐個執行所有的等待的關鍵區域函數,所有關鍵區域函數都執行完成後,該CPU才釋放鎖,並同時向共享快取中提交鎖和共享資料,以備下一個鎖擁有者由共享快取中獲取鎖和共享資料。
本說明書至少一個實施例提供的資料更新方法,可以實現如下效果:
第一、鎖的申請者例如CPU1,在發現鎖已經被CPU2佔有後,只需要在CPU2中的鎖記憶體設置CPU1對應的記憶體索引即可,CPU2根據該索引就可以執行CPU1對應的關鍵區域函數。而CPU1只需要等待該關鍵區域函數執行結束,CPU1並不會將鎖再遷移到本地私有快取。這種方式避免了鎖在各個CPU之間的來回遷移,提升了多執行緒任務的執行效率。並且,鎖申請者CPU1在鎖記憶體設置記憶體索引後,由鎖擁有者CPU2執行CPU1的關鍵區域函數,並可以在CPU2本地對共享資料進行更新,也同時避免了共享資料的遷移。
第二、鎖的擁有者在完成了鎖申請者的關鍵區域函數之後,可以對鎖申請者的標識參數進行清零,以通知鎖申請者其關鍵區域函數執行完成。該清零操作並未將鎖申請者的私有快取中的標識參數遷移到鎖擁有者本地,而是根據MESI協定找到標識參數的位置即申請鎖的CPU,並原地清零。該操作減少了資料在各個CPU之間的遷移,同樣提升了多執行緒任務的執行效率。
第三、鎖的擁有者在結束了所有關鍵區域函數的執行後,將鎖和共享資料都放入共享快取,而並未在鎖擁有者的私有快取放置,這可以加快下一次對鎖和共享資料的訪問操作,避免了下一次其他CPU訪問時需要進入到上次鎖擁有者的私有快取導致的資料移轉,也能夠加快下一次關鍵區域共享資料的存取速度,有助於提升多執行緒任務的執行效率。
第四、鎖的擁有者執行多個關鍵區域函數的操作,並且對共享資料的更新操作都是在鎖擁有者的本地私有快取完成,避免資料移轉,加快資料更新速度。
第五、該方案可以是基於一個完全平等隨機的物理CPU體系架構,採用了軟硬體結合最佳化的方案,減少了硬體開發複雜度,以盡可能少的硬體代價完成複雜的交互過程,提升整體性能。例如,在本方案中,鎖申請者只要將關鍵區域函數對應的記憶體索引設置在鎖記憶體對應的位元位即可,鎖擁有者就可以根據put_lock指令的返回值獲知該執行哪個關鍵區域函數,非常方便簡單的實現了CPU之間的交互。又例如,鎖擁有者透過根據MESI協定,就可以獲取到標識參數的所在地,並利用remote_write指令在原地對該參數進行清零,不用將標識參數遷移到鎖擁有者的私有快取進行操作,避免資料移轉。這種透過軟硬體結合最佳化的方案,既提升了多核系統處理器的性能,又避免了較大的硬體代價。
使用了本說明書至少一個實施例提供的資料更新方法的多核系統處理器,在執行多執行緒對共享資料更新的任務時,減少了對資料或鎖的爭搶和遷移,能夠大幅降低執行時間,提升了整體輸送量。
此外,資料更新方法不局限於本說明書實施例描述的方式,可以靈活變更。
例如,在圖4和圖5描述的流程中,鎖擁有者在執行完所有的關鍵區域函數後,可以將鎖和共享資料仍然放在鎖擁有者的私有快取中,下一次訪問者可以由該私有快取獲取。這種方式中,鎖申請者仍然不需要將鎖和共享資料移轉到自己的私有快取,而是由鎖擁有者直接調用執行鎖申請者的關鍵區域函數即可,因此仍然可以在一定程度上提升任務處理效率。
又例如,鎖擁有者可以使用清除標識參數之外的其他方式,通知鎖申請者其關鍵區域函數已經執行完成。此外,即使鎖擁有者不使用遠端寫指令,而是將鎖申請者的標識參數遷移到本地更新,同理,由於在關鍵區域函數執行時鎖申請者不需要遷移鎖到自己的私有快取,避免了鎖的遷移,仍然可以在一定程度上提升任務處理效率。
再例如,鎖的申請者CPU也可以在鎖記憶體對應的位元位設置對應的記憶體索引後,不再輪詢等待關鍵區域函數是否執行結束。當然,鎖擁有者會根據該記憶體索引執行對應的關鍵區域函數。
本領域技術人員可以理解,在實際實施中,圖4或圖5流程中的各個步驟的處理,有些是可以變更的,比如只執行其中的部分步驟,只要能達到減少了鎖或資料的遷移,實現了任務執行效率的提升即可。
上述圖中所示流程中的各個步驟,其執行順序不限制於流程圖中的順序。此外,各個步驟的描述,可以實現為軟體、硬體或者其結合的形式,例如,本領域技術人員可以將其實現為軟體代碼的形式,可以為能夠實現所述步驟對應的邏輯功能的電腦可執行指令。當其以軟體的方式實現時,所述的可執行指令可以儲存在記憶體中,並被設備中的處理器執行。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領域技術人員應明白,本說明書一個或多個實施例可提供為方法、系統或電腦程式產品。因此,本說明書一個或多個實施例可採用完全硬體實施例、完全軟體實施例或結合軟體和硬體方面的實施例的形式。而且,本說明書一個或多個實施例可採用在一個或多個其中包含有電腦可用程式碼的電腦可用儲存媒體(包括但不限於磁碟記憶體、CD-ROM、光學記憶體等)上實施的電腦程式產品的形式。
本說明書一個或多個實施例可以在由電腦執行的電腦可執行指令的一般上下文中描述,例如程式模組。一般地,程式模組包括執行特定任務或實現特定抽象資料類型的常式、程式、物件、元件、資料結構等等。也可以在分散式運算環境中實踐本說明書一個或多個實施例,在這些分散式運算環境中,由透過通信網路而被連接的遠端處理設備來執行任務。在分散式運算環境中,程式模組可以位於包括存放裝置在內的本地和遠端電腦儲存媒體中。
本說明書中的各個實施例均採用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於資料處理設備實施例而言,由於其基本相似於方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在附圖中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。
400~408:方法步驟
500~512:方法步驟
為了更清楚地說明本說明書一個或多個實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本說明書一個或多個實施例中記載的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本說明書一個或多個實施例提供的多核系統處理器的示意圖;
圖2為本說明書一個或多個實施例提供的多執行緒更新共享資料的原理示意圖;
圖3為本說明書一個或多個實施例提供的記憶體區域的示意圖;
圖4為本說明書一個或多個實施例提供的一種資料更新方法的流程示意圖;
圖5為本說明書一個或多個實施例提供的另一種資料更新方法的流程示意圖。
Claims (19)
- 一種資料更新方法,該方法應用於多核系統處理器,該多核系統處理器用於處理多執行緒任務,並且,該多核系統處理器包括多個CPU;待更新的資料是多個執行緒的共享資料;該方法由任一CPU執行;該方法包括:在第一CPU對應的執行緒將要執行對應的關鍵區域函數時,請求獲取鎖,該鎖用於表示對該多個執行緒的共享資料執行更新的權限;該關鍵區域函數用於更新該共享資料;若該鎖已經被其他CPU佔用,則在鎖記憶體設置對應該第一CPU的記憶體索引,以使得擁有鎖的CPU根據記憶體索引執行該第一CPU對應執行緒的關鍵區域函數。
- 根據請求項1所述的方法,所述請求獲取鎖,包括:透過鎖請求指令申請獲取鎖,該鎖請求指令攜帶本CPU對應的記憶體索引;根據快取一致性MESI協定,獲取到鎖記憶體的地址。
- 根據請求項2所述的方法,所述在鎖記憶體設置對應該第一CPU的記憶體索引,包括:根據該鎖請求指令中攜帶的記憶體索引,將該鎖記憶體中對應記憶體索引的位元 位置1。
- 根據請求項1所述的方法,該方法還包括:檢測到擁有鎖的CPU已經調用該關鍵區域函數結束時,確認完成該執行緒對共享資料的更新。
- 根據請求項4所述的方法,在所述請求獲取鎖之前,該方法還包括:在該第一CPU的私有快取中設置標識參數;所述檢測到擁有鎖的CPU已經調用該關鍵區域函數結束,包括:若該標識參數已經被擁有鎖的CPU清除,則確定該關鍵區域函數已經被擁有鎖的CPU調用執行結束。
- 一種資料更新方法,該方法應用於多核系統處理器,該多核系統處理器用於處理多執行緒任務,並且,該多核系統處理器包括多個CPU;待更新的資料是多個執行緒的共享資料;該方法由任一CPU執行;該方法包括:在第一CPU對應的執行緒將要執行對應的關鍵區域函數時,請求獲取鎖,該鎖用於表示對該多個執行緒的共享資料執行更新的權限;若該鎖未被其他CPU佔用,則獲取到該鎖,執行該第一CPU對應執行緒的關鍵區域函數,以透過該關鍵區域函 數更新該共享資料;在執行該第一CPU對應執行緒的關鍵區域函數後,若發現鎖記憶體中還設置有其他CPU的記憶體索引,則根據該記憶體索引執行對應的關鍵區域函數,以透過該關鍵區域函數更新該共享資料。
- 根據請求項6所述的方法,所述根據該記憶體索引執行對應的關鍵區域函數,包括:根據該記憶體索引,獲取到對應記憶體索引的記憶體區域,該記憶體區域中儲存有關鍵區域函數的函數指標和參數指標;根據該函數指標和參數指標,調用執行對應的關鍵區域函數對共享資料進行更新,在執行關鍵區域函數中使用共享資料寫指令對共享資料執行寫操作;該方法還包括:在調用執行完所有的關鍵區域函數之後,將使用該共享資料寫指令更新的共享資料放入到多個CPU的共享快取中;該所有的關鍵區域函數包括:鎖記憶體中所有設置的記憶體索引對應的關鍵區域函數。
- 根據請求項7所述的方法,該對應記憶體索引的記憶體區域,屬於該第一CPU的私有快取中的一塊記憶體區域。
- 根據請求項7所述的方法,該方法還包括:在調用執 行完所有的關鍵區域函數之後,將該鎖放入到多個CPU的共享快取中。
- 根據請求項6所述的方法,所述發現鎖記憶體中還設置有其他CPU的記憶體索引,包括:在執行該第一CPU對應執行緒的關鍵區域函數後,執行一次釋放鎖指令獲得返回值,該釋放鎖指令的返回值用於表示初始鎖記憶體與當前鎖記憶體之間的異或值;根據該返回值得到其他CPU的記憶體索引,並將鎖記憶體置為初始鎖記憶體;將該記憶體索引對應的關鍵區域函數調用執行後,接著執行該鎖指令獲取該返回值,得到新的其他CPU的記憶體索引。
- 根據請求項6所述的方法,該方法還包括:在執行一個關鍵區域函數後,根據快取一致性MESI協定,獲取該關鍵區域函數對應的標識參數的資料狀態以及標識參數地址;該標識參數是關鍵區域函數對應的目標CPU預先設置;使用遠端寫指令,在該標識參數地址中將該標識參數清除,以通知該目標CPU關鍵區域函數調用完成。
- 一種多核系統處理器,該多核系統處理器包括多個CPU,該多核系統處理器用於處理多執行緒任務,該多個 執行緒具有待更新的共享資料;該多核系統處理器中的每個CPU,用於執行可執行指令以實現如下操作:在第一CPU對應的執行緒將要執行對應的關鍵區域函數時,請求獲取鎖;該鎖用於表示對該多個執行緒的共享資料執行更新的權限;判斷該鎖是否已經被其他CPU佔用;若該鎖已經被其他CPU佔用,則在鎖記憶體設置對應該第一CPU的記憶體索引,以使得擁有鎖的CPU根據記憶體索引執行該第一CPU對應執行緒的關鍵區域函數;若該鎖未被其他CPU佔用,則獲取到該鎖,執行該第一CPU對應執行緒的關鍵區域函數,以更新共享資料;並且,在執行該第一CPU對應執行緒的關鍵區域函數後,若發現鎖記憶體中還設置有其他CPU的記憶體索引,則根據該記憶體索引執行對應的關鍵區域函數。
- 根據請求項12所述的多核系統處理器,該第一CPU,用於根據該記憶體索引執行對應的關鍵區域函數時,包括:根據該記憶體索引,確定對應的記憶體區域,並根據該記憶體區域中儲存的關鍵區域函數的函數指標和參數指標執行對應的關鍵區域函數。
- 根據請求項12所述的多核系統處理器,該第一CPU,還用於:在該請求獲取鎖之前,在該第 一CPU的私有快取中設置標識參數;並且,在檢測到該標識參數被擁有鎖的CPU清除時,確定該第一CPU的執行緒對應的關鍵區域函數已經被擁有鎖的CPU執行結束。
- 根據請求項12所述的多核系統處理器,在獲取到鎖的情況下,該第一CPU,還用於:在執行完一個目標CPU對應的關鍵區域函數後,根據快取一致性MESI協定,獲取該關鍵區域函數對應的標識參數的資料狀態以及標識參數地址;該標識參數是關鍵區域函數對應的目標CPU預先設置;使用遠端寫指令,在該標識參數地址中將該標識參數清除,以通知該目標CPU關鍵區域函數調用完成。
- 根據請求項12所述的多核系統處理器,該第一CPU,在用於執行關鍵區域函數以更新共享資料時,包括:使用共享資料寫指令對共享資料進行更新;該第一CPU還用於在調用執行完所有的關鍵區域函數之後,將使用該共享資料寫指令更新的共享資料放入到多個CPU的共享快取中;該所有的關鍵區域函數包括:該第一CPU對應的關鍵區域函數、以及其他CPU在鎖記憶體中設置的記憶體索引對應的關鍵區域函數。
- 根據請求項16所述的多核系統處理器,在該第一CPU獲取到鎖的情況下,該第一CPU,還用 於:在確認該所有的關鍵區域函數都執行完成後,將鎖放入到多個CPU的共享快取中。
- 根據請求項12所述的多核系統處理器,該第一CPU,在用於請求獲取鎖時,包括:使用鎖請求指令申請獲取鎖,該鎖請求指令中攜帶該第一CPU對應的記憶體索引;並且,若獲取到鎖,將鎖遷移到該第一CPU的私有快取,並在鎖記憶體對應的位元位設置該記憶體索引;若未獲取到該鎖,直至該第一CPU對應的關鍵區域函數結束,均不將鎖遷移到該第一CPU的私有快取。
- 根據請求項12所述的多核系統處理器,在該第一CPU獲取到鎖的情況下,該第一CPU,還用於:在執行該第一CPU對應執行緒的關鍵區域函數後,執行一次釋放鎖指令獲得返回值,該釋放鎖指令的返回值用於表示初始鎖記憶體與當前鎖記憶體之間的異或值;若該返回值是非0,則根據該返回值得到其他CPU的記憶體索引,並將鎖記憶體置為初始鎖記憶體;將該記憶體索引對應的關鍵區域函數調用執行後,接著執行該釋放鎖指令獲取該返回值,以得到新的其他CPU的記憶體索引;若該返回值是0,則表示所有關鍵區域函數都已經執行結束;該所有關鍵區域函數包括:鎖記憶體中所有設置 的記憶體索引對應的關鍵區域函數。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811258200.1 | 2018-10-26 | ||
CN201811258200.1A CN109614220B (zh) | 2018-10-26 | 2018-10-26 | 一种多核系统处理器和数据更新方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202016735A TW202016735A (zh) | 2020-05-01 |
TWI715087B true TWI715087B (zh) | 2021-01-01 |
Family
ID=66002132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW108122771A TWI715087B (zh) | 2018-10-26 | 2019-06-28 | 多核系統處理器和資料更新方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11106795B2 (zh) |
EP (1) | EP3701377B1 (zh) |
CN (1) | CN109614220B (zh) |
TW (1) | TWI715087B (zh) |
WO (1) | WO2020086609A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7386706B2 (ja) * | 2018-06-08 | 2023-11-27 | シャンハイ カンブリコン インフォメーション テクノロジー カンパニー リミテッド | 汎用機械学習モデル、モデルファイルの生成および解析方法 |
US11372649B2 (en) * | 2019-06-24 | 2022-06-28 | Microsoft Technology Licensing, Llc | Flow control for multi-threaded access to contentious resource(s) |
US11216278B2 (en) | 2019-08-12 | 2022-01-04 | Advanced New Technologies Co., Ltd. | Multi-thread processing |
CN110569067B (zh) * | 2019-08-12 | 2021-07-13 | 创新先进技术有限公司 | 用于多线程处理的方法、装置及系统 |
CN112905365B (zh) * | 2019-10-30 | 2024-02-13 | 支付宝(杭州)信息技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN112765088A (zh) * | 2019-11-04 | 2021-05-07 | 罗习五 | 利用数据标签提高多计算单元平台上数据共享的方法 |
CN111930527B (zh) * | 2020-06-28 | 2023-12-08 | 绵阳慧视光电技术有限责任公司 | 一种多核异构平台维护cache一致性的方法 |
CN118227055A (zh) * | 2020-11-06 | 2024-06-21 | 支付宝(杭州)信息技术有限公司 | 一种数据处理方法及装置 |
CN113836209A (zh) * | 2021-09-02 | 2021-12-24 | 深圳市道通智能汽车有限公司 | 多核处理器的共享资源访问方法、处理器及多核系统 |
CN113986778B (zh) * | 2021-11-17 | 2023-03-24 | 海光信息技术股份有限公司 | 一种数据处理方法、共享缓存、芯片系统及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2175368A1 (en) * | 2008-10-13 | 2010-04-14 | Alcatel Lucent | Method for synchronizing access to a shared resource, corresponding device, storage means, and software program therefore |
US20110113221A1 (en) * | 2008-08-18 | 2011-05-12 | Telefonaktiebolaget L M Ericsson (Publ) | Data Sharing in Chip Multi-Processor Systems |
CN104424142A (zh) * | 2013-08-26 | 2015-03-18 | 中兴通讯股份有限公司 | 一种多核处理器系统中访问共享资源的方法与装置 |
TW201729574A (zh) * | 2015-11-30 | 2017-08-16 | 耶是好公司 | 用來藉由相關、分類及或標註來透明存取控制物聯網(ioe)目的地的跨硬體平台 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5050072A (en) * | 1988-06-17 | 1991-09-17 | Modular Computer Systems, Inc. | Semaphore memory to reduce common bus contention to global memory with localized semaphores in a multiprocessor system |
US5537574A (en) * | 1990-12-14 | 1996-07-16 | International Business Machines Corporation | Sysplex shared data coherency method |
US6651145B1 (en) | 2000-09-29 | 2003-11-18 | Intel Corporation | Method and apparatus for scalable disambiguated coherence in shared storage hierarchies |
US7076609B2 (en) | 2002-09-20 | 2006-07-11 | Intel Corporation | Cache sharing for a chip multiprocessor or multiprocessing system |
JP4028444B2 (ja) | 2003-06-27 | 2007-12-26 | 株式会社東芝 | スケジューリング方法およびリアルタイム処理システム |
US7984248B2 (en) | 2004-12-29 | 2011-07-19 | Intel Corporation | Transaction based shared data operations in a multiprocessor environment |
US7937709B2 (en) | 2004-12-29 | 2011-05-03 | Intel Corporation | Synchronizing multiple threads efficiently |
US20080024489A1 (en) | 2006-07-28 | 2008-01-31 | Robert Allen Shearer | Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements |
US7853755B1 (en) | 2006-09-29 | 2010-12-14 | Tilera Corporation | Caching in multicore and multiprocessor architectures |
US7761485B2 (en) * | 2006-10-25 | 2010-07-20 | Zeugma Systems Inc. | Distributed database |
US8504791B2 (en) | 2007-01-26 | 2013-08-06 | Hicamp Systems, Inc. | Hierarchical immutable content-addressable memory coprocessor |
US8407428B2 (en) | 2010-05-20 | 2013-03-26 | Hicamp Systems, Inc. | Structured memory coprocessor |
US8285670B2 (en) | 2008-07-22 | 2012-10-09 | International Business Machines Corporation | Dynamically maintaining coherency within live ranges of direct buffers |
US8578483B2 (en) * | 2008-07-31 | 2013-11-05 | Carnegie Mellon University | Systems and methods for preventing unauthorized modification of an operating system |
CN101504618B (zh) * | 2009-02-26 | 2011-04-27 | 浙江大学 | 面向多核处理器的实时线程迁移方法 |
US8145817B2 (en) * | 2009-04-28 | 2012-03-27 | Microsoft Corporation | Reader/writer lock with reduced cache contention |
US9086973B2 (en) | 2009-06-09 | 2015-07-21 | Hyperion Core, Inc. | System and method for a cache in a multi-core processor |
US20120227045A1 (en) | 2009-12-26 | 2012-09-06 | Knauth Laura A | Method, apparatus, and system for speculative execution event counter checkpointing and restoring |
CN101833476B (zh) * | 2010-05-28 | 2013-08-14 | 西安交通大学 | 基于cmp的推测多线程机制下的独立栈函数调用方法 |
US8412689B2 (en) | 2010-07-07 | 2013-04-02 | Microsoft Corporation | Shared log-structured multi-version transactional datastore with metadata to enable melding trees |
US8738860B1 (en) * | 2010-10-25 | 2014-05-27 | Tilera Corporation | Computing in parallel processing environments |
CN102331923B (zh) * | 2011-10-13 | 2015-04-22 | 西安电子科技大学 | 一种基于多核多线程处理器的功能宏流水线实现方法 |
US9274960B2 (en) | 2012-03-20 | 2016-03-01 | Stefanos Kaxiras | System and method for simplifying cache coherence using multiple write policies |
US9417935B2 (en) | 2012-05-01 | 2016-08-16 | Microsoft Technology Licensing, Llc | Many-core process scheduling to maximize cache usage |
CN103577158B (zh) * | 2012-07-18 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 数据处理方法与装置 |
CN104216684B (zh) * | 2013-06-04 | 2017-05-31 | 阿里巴巴集团控股有限公司 | 一种多核并行系统及其数据处理方法 |
US9298626B2 (en) * | 2013-09-26 | 2016-03-29 | Globalfoundries Inc. | Managing high-conflict cache lines in transactional memory computing environments |
US9304935B2 (en) * | 2014-01-24 | 2016-04-05 | International Business Machines Corporation | Enhancing reliability of transaction execution by using transaction digests |
CN104951240B (zh) | 2014-03-26 | 2018-08-24 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及处理器 |
FR3019921B1 (fr) * | 2014-04-10 | 2017-08-11 | Commissariat Energie Atomique | Systeme de calcul distribue mettant en œuvre une memoire transactionnelle materielle de type non-speculatif et son procede d'utilisation pour le calcul distribue |
US9336047B2 (en) * | 2014-06-30 | 2016-05-10 | International Business Machines Corporation | Prefetching of discontiguous storage locations in anticipation of transactional execution |
CN104216767B (zh) * | 2014-09-18 | 2017-10-31 | 东软集团股份有限公司 | 多线程之间访问共享数据的方法及装置 |
US10360063B2 (en) * | 2015-09-23 | 2019-07-23 | Qualcomm Incorporated | Proactive resource management for parallel work-stealing processing systems |
CN108345452B (zh) * | 2017-01-23 | 2021-07-23 | 斑马智行网络(香港)有限公司 | 一种线程管理方法及装置 |
-
2018
- 2018-10-26 CN CN201811258200.1A patent/CN109614220B/zh active Active
-
2019
- 2019-06-28 TW TW108122771A patent/TWI715087B/zh active
- 2019-10-22 EP EP19802403.6A patent/EP3701377B1/en active Active
- 2019-10-22 WO PCT/US2019/057475 patent/WO2020086609A1/en unknown
- 2019-10-22 US US16/660,563 patent/US11106795B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110113221A1 (en) * | 2008-08-18 | 2011-05-12 | Telefonaktiebolaget L M Ericsson (Publ) | Data Sharing in Chip Multi-Processor Systems |
EP2175368A1 (en) * | 2008-10-13 | 2010-04-14 | Alcatel Lucent | Method for synchronizing access to a shared resource, corresponding device, storage means, and software program therefore |
CN104424142A (zh) * | 2013-08-26 | 2015-03-18 | 中兴通讯股份有限公司 | 一种多核处理器系统中访问共享资源的方法与装置 |
TW201729574A (zh) * | 2015-11-30 | 2017-08-16 | 耶是好公司 | 用來藉由相關、分類及或標註來透明存取控制物聯網(ioe)目的地的跨硬體平台 |
Also Published As
Publication number | Publication date |
---|---|
US20200134182A1 (en) | 2020-04-30 |
WO2020086609A1 (en) | 2020-04-30 |
EP3701377A1 (en) | 2020-09-02 |
US11106795B2 (en) | 2021-08-31 |
TW202016735A (zh) | 2020-05-01 |
CN109614220B (zh) | 2020-06-30 |
EP3701377B1 (en) | 2021-09-15 |
CN109614220A (zh) | 2019-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI715087B (zh) | 多核系統處理器和資料更新方法 | |
JP4730742B2 (ja) | 共有メモリの直接メモリ・アクセスのアトミック更新のための装置、及びその方法 | |
US8438568B2 (en) | Speculative thread execution with hardware transactional memory | |
EP0323013B1 (en) | Method of operating a multiprocessor system employing a shared virtual memory | |
JP5137971B2 (ja) | スピン・ロックによりロッキング公平性及びロッキング性能の両方を達成する方法及びシステム | |
US7721068B2 (en) | Relocation of active DMA pages | |
CA3070006C (en) | Method for reading data stored in a non-volatile cache using rdma | |
US10579413B2 (en) | Efficient task scheduling using a locking mechanism | |
JPH06222936A (ja) | 共用変数の値を更新する方法 | |
US10031697B2 (en) | Random-access disjoint concurrent sparse writes to heterogeneous buffers | |
US10908944B2 (en) | Apparatus with shared transactional processing resource, and data processing method | |
JPH1115793A (ja) | 資源の保全性を保護する方法 | |
US10929293B2 (en) | Atomic operations for fabric shared memories | |
US8954969B2 (en) | File system object node management | |
Zhang et al. | Scalable adaptive NUMA-aware lock | |
KR20230121884A (ko) | 어드레스 매핑 인식 태스킹 메커니즘 | |
JP3093609B2 (ja) | キャッシュメモリの記憶一致制御装置及び方法 | |
WO2022246769A1 (zh) | 一种访问数据的方法和装置 | |
US11880304B2 (en) | Cache management using cache scope designation | |
JP2023091314A (ja) | 半導体装置、半導体装置の制御方法及びプログラム | |
CN118260051A (zh) | 线程访问控制设备、方法与计算设备 | |
CN113806031A (zh) | 通过对象锁保护资源的方法和装置 | |
JPH0831038B2 (ja) | 割込みマネジャおよび割込み処理方法 | |
JPH02260043A (ja) | 資源ロック管理装置 |