TWI776263B - 應用資料標籤在多計算單元平台上的資料共用方法 - Google Patents
應用資料標籤在多計算單元平台上的資料共用方法 Download PDFInfo
- Publication number
- TWI776263B TWI776263B TW109138094A TW109138094A TWI776263B TW I776263 B TWI776263 B TW I776263B TW 109138094 A TW109138094 A TW 109138094A TW 109138094 A TW109138094 A TW 109138094A TW I776263 B TWI776263 B TW I776263B
- Authority
- TW
- Taiwan
- Prior art keywords
- data
- execution
- access
- computing unit
- sharing method
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
- G06F12/0857—Overlapped cache accessing, e.g. pipeline by multiple requestors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/15—Use in a specific computing environment
- G06F2212/154—Networked environment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Multi Processors (AREA)
Abstract
本發明提供一種應用資料標籤在多計算單元平台上的資料共用方法,在多核心平台上具有多個核心,並有多個執行序利用資料標籤在核心上分別產生多個臨界區間,當第一執行序先進入該第一臨界區間中存取一共用資料時,會讓共用資料暫存在第一核心中;當第一線程離開臨界區間時,會將資料的控制權交給具有傳輸效率優勢的第二核心。
Description
本發明是關於一種資料共用方法,尤其是指一種利用資料標籤提高多計算單元平台上的資料共用方法。
在共用記憶體多核心環境中,資料通過核心之間的匯流排傳輸,若傳輸路徑很長,則資料傳輸延遲很長。近年來,隨著電子技術的快速發展,已經開發出各種高性能多核處理器系統,例如在2017年英特爾推出的Xeon®處理器中,每個處理器有28個核心,最多可連接8個處理器。在這樣的多核處理器系統中,如何存取和使記憶體中的資料同步是系統的瓶頸。
在統一記憶體存取(Uniform Memory Access,UMA)中,處理器連接到大的單一主記憶體,使得到記憶體位置的存取時間與哪個處理器發出請求無關,但UMA的主要問題是它不可擴展。為了解決UMA中的可擴展性問題,在非統一記憶體存取(Non-Uniform Memory Access,NUMA)中將該組處理器區分成多個節點,每一節點各自具有用於該組處理器的主記憶體。存取同一節點內的本地記憶體會比存取其他節點上的遠端記憶體要快。
而在快取一致性非統一記憶體存取(cache coherence NUMA,ccNUMA)系統中,NUMA的概念被擴展到晶片的內部快取記憶體(例如單一處理器),其中每一核心具有完整的快取記憶體層次結構,且所有核心的最後一層快取(Last Level Cache,LLC)皆通過內部通信網路連接。存取本地快取記憶體比
存取遠端快取更快,若請求的資料位於同一晶片上另一個核心的快取中,則存取延遲會取決於核心之間的通信距離,因為資料需要先傳輸到所請求的核心。
影響處理器性能的另一個因素是資料同步。在目前的軟體系統如POSIX Threads(Pthreads)中,執行序在存取與其他執行序共用的資料之前,會設置資料鎖定以保證資料的正確性。但此一做法會阻擋其他執行序,因為這些執行序也需要通過鎖定以存取資料,但資料已被前一個進入臨界區間的執行序鎖定。此做法嚴重降低執行序執行的並行度。目前已經提出了各種有效的技術:例如:2019版本的GNU’s POSIX spinlock,簡稱plock。在plock中,一執行序在進入臨界區間之前會連續測試全域鎖變數(global lock variable)。然而眾所周知的是,plock技術的可擴展性不佳,且個個執行序執行的順序並不公平。雖然目前已提出多種改良方法來解決其公平性問題,例如MCS和票證鎖(ticket lock),但在多核心處理器系統中,公平性和效率的問題將更加複雜,因為執行序執行中的並行度會高很多,且資料傳輸延遲在不同的核心之間也可能更加顯著。
本發明的主要目的在於提供一種利用資料標籤提高資料共用效率及公平性的多計算單元平台上的資料共用方法。該多計算單元平台包含宣告欲存取一共用資料的多個執行序,該資料共用方法包含以下步驟:標示該共用資料的一存取區間的一開始點及一結束點;當該多個執行序中的一第一執行序準備開始存取該共用資料時,該多個執行序中的其他第二執行序受該第一執行序的限制而無法同時存取該共用資料;以及
當正在存取該共用資料的該第一執行序結束現階段對該共用資料的存取時,依照欲存取該共用資料的該多個第二執行序存取該共用資料所需耗費的系統資源為依據,使該多個第二執行序中耗費較少資源者優先存取該共用資料。
在本發明的資料共用方法中,係根據欲存取該共用資料的每一執行序所需的系統資源將存取共用資料的優先權交給其中一執行序,因此產生一較佳的該共用資料的傳輸路徑,也因此確保多執行序程式的執行效率、公平性及整體表現。
本發明的其他功效、優勢及創新特徵將在以下的實施方式配合圖式說明中更加清晰。
102:鎖定區間
104:臨界區間
106:解鎖區間
108:剩餘區間
圖1係本發明應用資料標籤在多計算單元平台上的資料共用方法的流程圖。
圖2係本發明應用資料標籤在多計算單元平台上的資料共用方法的演算法程式碼的一方塊示意圖。
圖3係本發明應用的第一較佳實施例的多核心處理器的一方塊示意圖。
圖4係本發明應用的多核心處理器的多個虛擬核心的通訊效率示意圖。
圖5係本發明第第二較佳實施例的一演算法程式碼。
圖6係本發明的演算法程式碼具有多個臨界區間的一方塊示意圖。
圖7A~7G係利用本發明產生的多個優化路徑的示意圖。
圖8係本發明應用的多核心處理器的另一多個虛擬核心的通訊效率示意圖。
圖9係本發明第三較佳實施例的一演算法程式碼。
圖10係本發明第四較佳實施例中一虛擬核心中具有多個執行序的一方塊示意圖。
圖11係本發明第四較佳實施例的一演算法程式碼。
本發明提供一種應用資料標籤在多計算單元平台上的資料共用方法,其可大幅降低核心與核心之間資料傳輸的成本,並使執行序進入臨界區間中存取共用資料的順序更具公平性。該多計算單元平台包含宣告欲存取一共用資料的多個執行體,且各該執行體在存取該共用資料時皆具有一系統資源需求。請參閱圖1所示,該資料共用方法包含以下步驟:以一資料標籤標示該共用資料的一存取區間的一開始點及一結束點(S101);當該多個執行體中的一第一執行體在該存取區間的開始點且被允許進入該存取區間時,限制該多個執行體中的其他多個第二執行體進入該存取區間(S102);其中,該第二執行體係指該多個執行體中除了該第一執行體之外的其他執行體;以及當該第一執行體結束對該共用資料的存取並在該結束點時,將進入該存取區間以存取該共用資料的一優先權轉移給該多個第二執行體中具有最低系統資源需求的該第二執行體(S103)。
該多計算單元平台例如係一多核心處理器。各該執行體例如係欲存取該共用資料的一程序、一執行序、一處理器、一核心、一虛擬核心、一程式碼片段,一硬體、或一韌體等。
此外,在該開始點,該平台將宣告欲進入共用資料的存取區間的執行體全部標示出來,並預先依照所有欲存取共用資料的執行體中任二者存
取該共用資料所需的系統資源需求的多寡,計算出進入該存取區間的一排序。在結束點則依照所需的系統資源需求的多寡,決定下一個進入存取區間的執行體是何者。當第一執行體離開存取區間時,將進入存取區間的優先權轉移給依照該排序使下一個執行體,使其能夠進入存取區間。
共用資料的存取區間可以使用多種方法確保資料的一致性。資料標籤可以是:臨界區間(critical section)、使用返回機制(roll back)、讀取、複製、更新機制(read-copy-update,RCU)、自旋鎖(spinlock)、semaphore、mutex或condition variable等等。在本發明中,保證資料一致性的機制並非主要之改進目的,本發明的主要改進在於提出使用資料標籤標識存取共用資料區間的程式碼時,如何決定下一個存取共用資料的執行體之機制。
為了讓本發明更易於瞭解,以下將以「臨界區間」之實施例進行說明如何決定下一個存取共用資料的執行體。該臨界區間例如為自旋鎖(spinlock)、號誌物件(semaphore)、互斥鎖(mutex)等。
請參閱圖2所示,圖2係一鎖的程式碼之示意圖。一鎖的程式碼一般包含一鎖定區間102、臨界區間104、解鎖區間106及剩餘區間108。其中,臨界區間(critical section,CS)104係一執行體存取共用資料的程式碼;鎖定區間102在臨界區間104之前,係用於確保該共用資料的一致性及一次只有一執行體存取該共用資料;在該臨界區間104之後,當該執行體完成存取該共用資料,便會進入該解鎖區間106以解鎖該共用資料。在本實施例中,上述的鎖定區間102、解鎖區間106為本發明所稱的資料標籤。資料標籤的用途在於確保不能同時執行(即:互斥)的執行體會一個接著一個執行。因此,當正在存取該共用資料的執行體離開該臨界區間104,已宣告欲存取該共用資料的下一執行體則能夠進入臨界區間。在另一實施例中,若有多個執行體為非互斥執行,換言之為可平行執行者,則該些非互斥的執行體可同時進入存取區間(臨界區間)。
更詳細的說,當目前正在執行的第一執行體結束現階段對共用資料的存取時並離開臨界區間104,可讓多個耗費較少系統資源,或排序結果較前且非互斥執行的第二執行體同時進入該共用資料的存取區間中。
須注意的是,該多計算單元平台須確保該些須互斥執行的執行體的對該共用資料的單獨存取。
在本發明的一實施例中,該平台依照資料傳遞時該多個執行序所耗費的電力、時間、頻寬、或是否可以與其他程式平行傳輸為條件進行排序。
在本實施例中,當一執行體離開該臨界區間104,係選擇正在該鎖定區間102等待進入臨界區間104的多個執行體中具有最低系統需求者做為下一個進入臨界區間的執行體,且是依照上述排序結果進行選擇。
為了更容易說明本發明的特色,在本發明的第一較佳實施例中,只考慮所有的執行序只有一個臨界區間。請參閱圖3所示,圖3繪示目前AMD ThreadripperTM 3990WX處理器(ThreadripperTM處理器)的結構示意圖。該ThreadripperTM處理器包含4個晶粒(die),即die0~die3,而每一晶粒包含2個CPU complexs(CCX),且每一個CCX中包含8個虛擬核心(v-core)。在圖3中,每一CCX中的數字代表其中虛擬核心的編號。其中,該CCD中的虛擬核心係通過第三層快取記憶體連接。同一個晶粒上的CCX通過高速連接通道連接,而同一顆CPU上的不同晶粒則使用中速連接通道連接。
請參閱圖4所示,其中該橫軸(x)及縱軸(y)分別為代表該ThreadripperTM處理器中共64個虛擬核心,而其中的每一座標點(x,y)代表第x虛擬核心與第y虛擬核心的通訊效率。每一座標格中的顏色越深代表越低的交換支出。舉例而言,同樣在CCX0中的任二虛擬核心x及y,其對應的座標格顏色較深,代表該二虛擬核心的通訊成本較低。相對的,當一虛擬核心x在CCX0且
一虛擬核心y在CCX1,其對應的座標格顏色相對較淺,代表該二虛擬核心的通訊成本較高。
根據圖3的處理器結構及圖4的通訊效率圖表,並運用一最佳化自動規劃工具例如GOOGLETM的OR-Tools,可以產生一優化路徑。例如優化路徑為:{0,1,2,3,32,33,34,35,4,5,6,7,36,37,38,39,8,9,10,11,40,41,42,43,12,13,14,15,44,45,46,47,24,25,26,27,56,57,58,59,28,29,30,31,60,61,62,63,16,17,18,19,48,49,50,51,20,21,22,23,52,53,54,55}。
每一個數字代表虛擬核心的編號。此一優化路徑即可作為各該執行體存取該共用資料的一排序。該優化路徑可以進一步轉換為一路由編號(idCov)陣列如下:{0,1,2,3,8,9,10,11,16,17,18,19,24,25,26,27,48,49,50,51,56,57,58,59,32,33,34,35,40,41,42,43,4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,52,53,54,55,60,61,62,63,36,37,38,39,44,45,46,47}
舉例而言,根據該路由編號陣列,虛擬核心第9號(core 9)在該優化路徑中為第18個,因此其路由編號(routingID)為idCov[9]=17。
圖5係本發明的程序的一演算法。其中,變數idCov及routingID的設定方式如上所述。當沒有任何執行體在臨界區間時,設定全域鎖GlobalLock為0。此處所述的執行體例如為一宣告欲進入臨界區間104的虛擬核心,且每一虛擬核心至多有一執行序。如果執行序的總數超過64,則可以使用無鎖鏈結列表(lock-free linked list)實現本方法。本實施例中,平台對共用資料設定一存取佇列(waitArray),欲進入存取區間的執行體,依照排序的順序設定一等待位元waitArray[routingID]為1。當已在臨界區間104中的第一執行體要離開存取區間時,或平台將允許欲進入存取區間的其他執行體進入臨界區間104
時,該平台從該存取佇列中該第一執行體的下一個順位開始,搜尋等待位元為1的一第二執行體,做為下一個可進入該臨界區間104者。等待位元waitArray的長度等同於虛擬核心的數量,當第K個虛擬核心上的執行序想要進入臨界區間104,該執行序會將waitArray[K]設定為1。當在路由編號上前一個並且已經在臨界區間的執行序(稱為「前執行序」)離開臨界區間104時,前執行序將waitArray[K]設定為0。
在spin_init()中,所有變數初始化為0,並依照該執行序所在的核心定義路由編號變數routingID。所在核心之編號可以使用getcpu()取得。
在spin_lock()中,該執行序將waitArray[routingID]設定為1,以宣告欲進入臨界區間104,接著進入圖5中的程式碼第12~18行。程式碼第12~18行係一等待迴圈,只有當waitArray[routingID]為0(請參考第13~14行程式碼)才可進入臨界區間。或者當GlobalLock為0,並且compare_exchange()的回傳值為true時才可以進入臨界區間(請參考第15~17行程式碼)。
在spin_unlock()中,當一個執行序正要離開臨界區104間,則它挑選出具有較佳的傳輸路徑的下一個執行序進入臨界區間。因為所有的執行序通過idCov及routingID已依照優化路徑排序,因此只要根據正要離開臨界區間104的執行序在waitArray[]的位置,從下一個元素開始依序尋找第一個值為「1」的元素就是具有較佳傳輸路徑的下一執行序。設定該下一執行序在waitArray[]上的相對應元素為「0」,即可讓該下一個執行序進入臨界區間104(請參考第22~27行程式碼)。當waitArray[]中沒有任何執行序等待進入臨界區間,此時設定GlobalLock為0。
圖5所示的程式碼應當配合適當的原子性操作進行。例如:atomic_load()、atomic_store()、atomic_compare_exchange(),這些函數屬於C的
標準規範,例如:C11,因此並不在此詳述,且相關領域具通常知識者應當理解如何實現。
在本發明的一第二較佳實施例中,該spin_lock()中係以一無鎖鏈結列表實現。此時只需要加入額外的搜尋機制,依照路由編號routingID挑選加入點即可。由於spinlock()處已經進行排序,因此在spin_unlock處,直接設定正要離開臨界區間的下一個執行序對應的存取佇列(waitarray[])中的上鎖欄位為「0」即可。
在本發明的一實施例中,當下正在臨界區間104中的執行序與優化路徑中下一欲存取共用資料的執行序存取不相同的共用資料。舉例而言,該臨界區間中欲保護的該共用資料是一鏈結串列(Linked List)。在本實施例中,該鏈結串列中每一元素包含有其對應的執行序的編號(例如:執行序ID、程序ID)。當一執行序離開臨界區間104時,該執行序根據其存取的鏈結串列中將被存取的下一個元素的上一個存取該元素的執行序編號搜尋在較佳傳輸路徑中的下一執行序,並令其進入臨界區間。
在一實施例中,該優化路徑可通過一有序列表方式(環狀鏈結串列、陣列)儲存。該平台通過搜尋該有序列表中下一應進入臨界區基104的執行體以決定具有最佳處理效率的執行體。
進一步的,當該共用資料的資料結構是一容器式(Container-type),例如一佇列(Queue)或一堆疊(Stack),該佇列或堆疊也會包含一元素用用於紀錄將該筆資料推入該佇列或堆疊的執行序或CPU。當該元素由當下正在存取該共用資料的執行序或CPU推出該佇列或堆疊,則由距離該執行序或CPU的下一執行序或CPU進入臨界區間104。
請參閱圖6所示,當系統中有多個臨界區間104,例如4個,該多個臨界區間可以使用同一個路由編號(idCov)。當所有臨界區間共用同一組路由編號,進入各該臨界區間104的執行體具有相同的順序及優先權。
請參閱圖7A~7F所示,圖7A~7F顯示多種路由編號的圖形化示意圖,即7種不同路徑。其中,每一黑點代表了Threadripper處理器中的一個晶粒。由於該Threadripper處理器中的各該晶粒示完全連接的,因此可以產生如圖7A~7F之六種優化路徑。進一步的,根據晶粒die0與其他晶粒die1~die3之間較該等其他晶粒之間有較好的溝通效率,還能產生圖7G的優化路徑。根據上述產生的優化路徑及對應的存取佇列將列舉前三條路徑如下。
圖7A所示的優化路徑為{0,1,2,3,32,33,34,35,4,5,6,7,36,37,38,39,8,9,10,11,40,41,42,43,12,13,14,15,44,45,46,47,24,25,26,27,56,57,58,59,28,29,30,31,60,61,62,63,16,17,18,19,48,49,50,51,20,21,22,23,52,53,54,55}。而相對應的路徑編號為{0,1,2,3,8,9,10,11,16,17,18,19,24,25,26,27,48,49,50,51,56,57,58,59,32,33,34,35,40,41,42,43,4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,52,53,54,55,60,61,62,63,36,37,38,39,44,45,46,47,8,9,10,11}。
圖7B所示的優化路徑為{4,5,6,7,36,37,38,39,0,1,2,3,32,33,34,35,12,13,14,15,44,45,46,47,8,9,10,11,40,41,42,43,28,29,30,31,60,61,62,63,24,25,26,27,56,57,58,59,20,21,22,23,52,53,54,55,16,17,18,19,48,49,50,51}。而相對應的路徑編號為{0,1,2,3,24,25,26,27,16,17,18,19,56,57,58,59,48,49,50,51,40,41,42,43,32,33,34,35,12,13,14,15,4,5,6,7,28,29,30,31,20,21,22,23,60,61,62,63,52,53,54,55,44,45,46,47,36,37,38,39}。
圖7C所示的優化路徑為{0,1,2,3,32,33,34,35,4,5,6,7,36,37,38,39,16,17,18,19,48,49,50,51,20,21,22,23,52,53,54,55,24,25,26,27,56,57,58,59,28,29,30,31,60,61,62,63,8,9,10,11,40,41,42,43,12,13,14,15,44,45,46,47}。而相對應的路徑編號為{0,1,2,3,8,9,10,11,48,49,50,51,56,57,58,59,16,17,18,19,24,25,26,27,32,33,34,35,40,41,42,43,4,5,6,7,12,13,14,15,52,53,54,55,60,61,62,63,20,21,22,23,28,29,30,31,36,37,38,39,44,45,46,47}。
在系統中,各該臨界區間104也可以有不同的優化路徑及路由編號。根據不同路徑的條件(路徑的頻寬、延遲或交互影響等),或臨界區間104的情況(傳遞的資料的多寡、高速傳遞之需求等)以決定使用的優化路徑。在另一實施例中,一臨界區間104也可以使用多個優化路徑以達到負載平衡。
請參閱圖8所示,圖8繪示了該64個虛擬核心中任二個虛擬核心之間的通訊時間。其中,較淺的顏色代表通訊時間較短。在一實施例中,該系統根據較淺的顏色選擇下一進入臨界區間的執行序。
請參閱圖9所示,在本發明的一第三較佳實施例中,將解釋本發明藉由OracleTM MySQL實現的應用。在本較佳實施例中,將使用紀錄鎖定(Row lock),而非表單鎖定(Table lock),以使得MySQL在多核心的應用上更有效率。當spinlock過長時,使用os_thread_yield()以觸發一上下文交換(Context-switch),如程式碼第13行。在第11行,等待一隨機的短暫時間,以避免持續執行處理成本較高的指令compare_exchange()。使用rand()以避免該鎖不斷被交給同一核心上的鄰近的執行序。
在本發明的一第四較佳實施例中,假設一虛擬核心上有一個以上的執行序。請一併參閱圖10及11所示,在本實施例中,係將第一較佳實施例
的演算法與MCS spinlock演算法結合。如程式碼第1-4行之定義,SoA_array中每一元素的資料結構為MCS。在程式碼第5行,資料結構為MCS的waitArray[]被定義。
在spin_lock()中,首先,程式碼第7行處,mcs_node被加入至SoA_array[routingID]。接著,在程式碼第8-14行中,其等待持有鎖者(Lock holder)將GlobalLock或mcs_node->lock設定為0,以接著進入臨界區間104。
在spin_unlock()中,首先下一mcs_node被移動至SoA_array中MCS element的首位,以將下一執行序移到第一位並準備執行。當MCS節點中沒有接續的執行序要執行,則將mcs_node設為NULL。程式碼第21-27行的迴圈用於搜尋路由編號routingID中進入臨界區間104的下一執行序。若沒有執行序要進入臨界區間104,將GlobalLock設定為0。
在本發明的一第五較佳實施例中,系統計算並儲存一用於紀錄多個核心之間的傳輸成本的表單。該等傳輸成本可以使用一0至1之間的實數代表。在將存取共用資料的優先權交給多個第二執行體中具有最低系統資源需求的第二執行體的步驟中,具有最低系統資源需求的該第二執行體係通過查詢該表格中具有最低傳輸損耗的該第二執行體來決定。也就是說,當一執行體離開臨界區間104應進入解鎖區間106,具有最低傳輸成本的執行體被允許進入臨界區間。
在本實施例中,系統資源需求,即,傳輸成本,係以0至1之間的實數代表,而非二元的「0」或「1」作為指標。因此該等執行體的排序能夠以詳細的程度分列,使得資料的存取進一步被優化。
進一步的,該平台是根據該平台的多個核心之間的傳輸損耗計算該多個執行體的一排序;其中,當將進入該存取區間以存取該共用資料的優
先權轉移給該多個第二執行體中具有最低系統資源需求的該第二執行體時,該優先權是轉移給排序小於但最接近該第一執行體的該第二執行體。
在本實施例中,該執行體可以在該排序中出現多次。
在本實施例中,當該第二執行體在等待存取該共用資料,該第二執行體插入一等待進入該存取區間的一存取佇列。在另一實施例中,當第一執行體離開該臨界區間104,具有最低成本的執行體被選擇。
在另一實施例中,可以根據特定條件排除至少一執行體。舉例而言,可以根據該執行體所在之核心編號排除。當等待進入臨界區間的執行體所在之核心編號小於上一離開該臨界區間的執行體所在之核心編號,則該執行體被排除。此一作法用於確保有限等待及公平性。
綜上所述,本發明的在多計算單元平台上利用資料標籤進行資料供用的方法提供用於決定下一個存取共用資料的執行體。本發明的實施例則提供詳細的根據通訊成本用於產生多個執行體之間的優化路徑的演算法及方法。在計算機技術領域中具通常知識者可以選擇其他條件要素,例如電源消耗或平行能力等,作為優化計算之基礎。
以上所述僅是本發明的較佳實施例而已,並非對本發明做任何形式上的限制,雖然本發明已以實施例揭露如上,然而並非用以限定本發明,任何熟悉本專業的技術人員,在不脫離本發明技術方案的範圍內,當可利用上述揭示的技術內容做出些許更動或修飾為等同變化的等效實施例,但凡是未脫離本發明技術方案的內容,依據本發明的技術實質對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬於本發明技術方案的範圍內。
Claims (19)
- 一種應用資料標籤在多計算單元平台上的資料共用方法,該多計算單元平台包含宣告欲存取一共用資料的多個執行體,且各該執行體在存取該共用資料時皆具有一系統資源需求;該資料共用方法包含以下步驟: 以一資料標籤標示該共用資料的一存取區間的一開始點及一結束點; 當該多個執行體中的一第一執行體在該存取區間的開始點且被允許進入該存取區間時,限制該多個執行體中的其他多個第二執行體進入該存取區間; 以及當該第一執行體結束對該共用資料的存取並在該結束點時,將進入該存取區間以存取該共用資料的一優先權轉移給該多個第二執行體中具有最低系統資源需求的該第二執行體。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,其中各該執行體係存取該共用資料的程序、執行序、處理器、核心、虛擬核心、編碼、硬體或軔體。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,還包含以下步驟: 當該執行體在該存取區間的開始點時,根據各該執行體在存取該共用資料時的該系統資源需求計算一排序。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,其中, 各該執行體在該存取區間的開始點宣告欲進入該存取區間;且 各該執行體在該存取區間的結束點決定進入該存取區間的下一執行體。
- 如請求項3所述之應用資料標籤在多計算單元平台上的資料共用方法,其中,當該執行體在該存取區間的開始點時,該執行體宣告欲進入該存取區間以存取該共用資料,且該執行體係將自身插入根據該排序產生的一列表中。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,還進一步包含: 該平台根據該多個執行體中任二個執行體的系統資源需求預先計算一排序;且 當該第一執行體由該結束點離開該存取區間時,該排序中的下一執行體被允許進入該存取區間。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,其中該資料標籤係一臨界區間、使用返回機制、讀取-複製-更新機制、自旋鎖、號誌物件(semaphore)、互斥鎖(Mutex)、條件變數(Condition Variable)。
- 如請求項3所述之應用資料標籤在多計算單元平台上的資料共用方法,進一步包含: 當該第一執行體結束對該共用資料的存取,進一步允許多個第二執行體同時進入該存取區間;其中 該多個第二執行體係非互斥且具有低系統資源需求。
- 如請求項8所述之應用資料標籤在多計算單元平台上的資料共用方法,其中, 同時進入該存取區間的該多個第二執行體係具有較該排序中下一個互斥執行的該執行體高的排序。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,進一步包含: 當該第一執行體結束對該共用資料的存取,進一步允許多個非互斥的第二執行體同時進入該存取區間;且 確保多個互斥的第二執行體的執行排序維持相同。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,進一步包含: 建立一排序,使該多個執行體欲進入該存取區間時依照該排序依序進入。
- 如請求項11所述之應用資料標籤在多計算單元平台上的資料共用方法,進一步包含: 建立一存取佇列,且各該執行體根據該排序將該存取佇列中的一等待位元設定為「1」; 當該第一執行體結束對該共用資料的存取,或當該平台將要允許一第二執行體進入該存取區,係在該存取佇列中搜尋數值為「1」的下一等待位元,並允許對應該下一等待位元的第二執行體進入該存取區間。
- 如請求項12所述之應用資料標籤在多計算單元平台上的資料共用方法,其中,該存取佇列係以一陣列或一鏈結串列的資料格式建立。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,其中該系統資源需求的條件係根據該多計算單元平台的一優化目標決定。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,其中該共用資料的資料格式是一集合,且被存取的該共用資料是該集合的其中一元素。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,進一步包含: 儲存一紀錄多個核心之間的傳輸損耗的表格;其中, 當將進入該存取區間以存取該共用資料的優先權轉移給該多個第二執行體中具有最低系統資源需求的該第二執行體時,具有最低系統資源需求的該第二執行體係通過查詢該表格中具有最低傳輸損耗的該第二執行體來決定。
- 如請求項1所述之應用資料標籤在多計算單元平台上的資料共用方法,進一步包含: 根據該平台的多個核心之間的傳輸損耗計算該多個執行體的一排序;其中, 當將進入該存取區間以存取該共用資料的優先權轉移給該多個第二執行體中具有最低系統資源需求的該第二執行體時,該優先權是轉移給排序小於但最接近該第一執行體的該第二執行體。
- 如請求項17所述之應用資料標籤在多計算單元平台上的資料共用方法,進一步包含: 當該第二執行體尚未進入存取區間時,根據該排序將該第二執行體插入一等待進入該存取區間的一存取佇列。
- 如請求項17所述之應用資料標籤在多計算單元平台上的資料共用方法,當該第一執行體離開該存取區間時,該第一執行體根據該排序選擇其中一第二執行體進入該存取區間。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911067350.9 | 2019-11-04 | ||
CN201911067350.9A CN112765088A (zh) | 2019-11-04 | 2019-11-04 | 利用数据标签提高多计算单元平台上数据共享的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202131193A TW202131193A (zh) | 2021-08-16 |
TWI776263B true TWI776263B (zh) | 2022-09-01 |
Family
ID=75688639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109138094A TWI776263B (zh) | 2019-11-04 | 2020-11-02 | 應用資料標籤在多計算單元平台上的資料共用方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20210133184A1 (zh) |
CN (1) | CN112765088A (zh) |
TW (1) | TWI776263B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116010040A (zh) * | 2021-10-21 | 2023-04-25 | 华为技术有限公司 | 一种获取锁资源的方法、装置及设备 |
CN115934370A (zh) * | 2022-12-23 | 2023-04-07 | 科东(广州)软件科技有限公司 | 自旋锁的获取方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108509260A (zh) * | 2018-01-31 | 2018-09-07 | 深圳市万普拉斯科技有限公司 | 线程识别处理方法、装置、计算机设备和存储介质 |
CN109614220A (zh) * | 2018-10-26 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100122253A1 (en) * | 2008-11-09 | 2010-05-13 | Mccart Perry Benjamin | System, method and computer program product for programming a concurrent software application |
US20120155349A1 (en) * | 2010-11-16 | 2012-06-21 | Zeljko Bajic | Rfid applications |
CN103297456B (zh) * | 2012-02-24 | 2016-09-28 | 阿里巴巴集团控股有限公司 | 一种分布式系统下共享资源的访问方法及分布式系统 |
CN104834505B (zh) * | 2015-05-13 | 2017-04-26 | 华中科技大学 | 一种多核多线程环境下numa感知的同步方法 |
US10417056B2 (en) * | 2015-08-04 | 2019-09-17 | Oracle International Corporation | Systems and methods for performing concurrency restriction and throttling over contended locks |
CN105760216A (zh) * | 2016-02-29 | 2016-07-13 | 惠州市德赛西威汽车电子股份有限公司 | 一种多进程同步控制方法 |
US20190073243A1 (en) * | 2017-09-07 | 2019-03-07 | Alibaba Group Holding Limited | User-space spinlock efficiency using c-state and turbo boost |
-
2019
- 2019-11-04 CN CN201911067350.9A patent/CN112765088A/zh active Pending
-
2020
- 2020-10-30 US US17/085,736 patent/US20210133184A1/en active Pending
- 2020-11-02 TW TW109138094A patent/TWI776263B/zh active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108509260A (zh) * | 2018-01-31 | 2018-09-07 | 深圳市万普拉斯科技有限公司 | 线程识别处理方法、装置、计算机设备和存储介质 |
CN109614220A (zh) * | 2018-10-26 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
Also Published As
Publication number | Publication date |
---|---|
US20210133184A1 (en) | 2021-05-06 |
TW202131193A (zh) | 2021-08-16 |
CN112765088A (zh) | 2021-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11093526B2 (en) | Processing query to graph database | |
US8458721B2 (en) | System and method for implementing hierarchical queue-based locks using flat combining | |
US7861042B2 (en) | Processor acquisition of ownership of access coordinator for shared resource | |
US7475198B2 (en) | Asynchronous symmetric multiprocessing | |
Kishimoto et al. | Scalable, parallel best-first search for optimal sequential planning | |
US20120159495A1 (en) | Non-blocking wait-free data-parallel scheduler | |
TWI776263B (zh) | 應用資料標籤在多計算單元平台上的資料共用方法 | |
US20130290583A1 (en) | System and Method for NUMA-Aware Locking Using Lock Cohorts | |
US10678588B2 (en) | Reducing synchronization of tasks in latency-tolerant task-parallel systems | |
TW201820151A (zh) | 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行 | |
Barthels et al. | Designing Databases for Future High-Performance Networks. | |
CN104615445B (zh) | 一种基于原子操作的设备io队列方法 | |
JP5321691B2 (ja) | 並列計算装置、並列計算方法、および並列計算プログラム | |
Zhang et al. | Fast and scalable queue-based resource allocation lock on shared-memory multiprocessors | |
Peng et al. | FA-Stack: A fast array-based stack with wait-free progress guarantee | |
CN105988856A (zh) | 解释器访存优化方法及装置 | |
US9436503B2 (en) | Concurrency control mechanisms for highly multi-threaded systems | |
JP7346649B2 (ja) | 同期制御システムおよび同期制御方法 | |
CN112306703A (zh) | 一种numa系统中的临界区执行方法及装置 | |
TWI548994B (zh) | 以複數個引擎支援指令序列的執行之互連結構 | |
Bouhrour et al. | Towards leveraging collective performance with the support of MPI 4.0 features in MPC | |
Calciu et al. | How to implement any concurrent data structure | |
Nishioka et al. | Scalable task-parallel SGD on matrix factorization in multicore architectures | |
Busch et al. | Impossibility results for distributed transactional memory | |
US11947517B1 (en) | Stream-based transaction processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
GD4A | Issue of patent certificate for granted invention patent |