TW201439907A - 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 - Google Patents
轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 Download PDFInfo
- Publication number
- TW201439907A TW201439907A TW102140063A TW102140063A TW201439907A TW 201439907 A TW201439907 A TW 201439907A TW 102140063 A TW102140063 A TW 102140063A TW 102140063 A TW102140063 A TW 102140063A TW 201439907 A TW201439907 A TW 201439907A
- Authority
- TW
- Taiwan
- Prior art keywords
- thread
- local
- local range
- function
- range variable
- Prior art date
Links
- 230000006870 function Effects 0.000 title claims abstract description 112
- 238000000034 method Methods 0.000 title claims abstract description 45
- 230000015654 memory Effects 0.000 claims abstract description 83
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical group C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- 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
-
- 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/0853—Cache with multiport tag or data arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- 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
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- 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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
- 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/522—Barrier synchronisation
-
- 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/45—Caching of specific data in cache memory
- G06F2212/451—Stack data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
- Stored Programmes (AREA)
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
用以轉譯一程式之函數的系統及方法。在一具體實施例中,系統包含:(1)一本地範圍變數識別符,可操作以識別在函數之至少某些部份中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數,以及(2)一函數轉譯器,關聯於本地範圍變數識別符且可操作以轉譯函數之至少某些部份,使得執行緒共享記憶體用以儲存執行緒共享本地範圍變數且執行緒私用記憶體用以儲存執行緒私用本地範圍變數。
Description
本申請案係主張美國專利臨時申請案案號61/722,661之優先權,其由Lin等人於2012年11月5日提出申請,標題為「使用一群組的執行緒執行循序碼(EXECUTING SEQUENTIAL CODE USING A GROUP OF THREADS)」,以及主張美國專利申請案案號13/724,202之優先權,其由Lin等人於2012年12月21日提出申請,標題為「轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統(SYSTEM AND METHOD FOR TRANSLATING PROGRAM FUNCTIONS FOR CORRECT HANDLING OF LOCAL-SCOPE VARIABLES AND COMPUTING SYSTEM INCORPORATING THE SAME)」,兩案皆與本申請案共同讓與且併入本文作為參考。
本發明一般係有關計算系統,特別是關於用以轉譯程式碼函數以正確處理本地範圍變數的系統及方法和應用其之計算系統。
如熟此技藝者所熟知,軟體程式利用變數,為此需分配儲存空間於記憶體中。儲存空間通常以堆疊的形式分配。
某些程式將其變數組織為層級以簡化其資料結構。舉例來說,某些變數(稱作本地範圍變數)可僅用於程式的一函數中(函數範圍)或一敘述區塊中(區塊範圍)。其他變數(稱作通用範圍變數)可由全部程式所使用。舉例來說,以下的表格1提出描述本地範圍變數之兩層級的偽碼:陣列a[]為函數範圍變數,而陣列b[]為區塊範圍變數。
為了理解表格1及本發明揭露內容的其餘部份,術語「foo」及「bar」為函數的任意名稱。因此,任何函數可代替「foo」或「bar」。
某些程式為平行程式,其能夠在平行處理器中平行地執行,例如圖形處理單元(GPU)。平行程式具有無法在執行緒中平行執行之程式碼的循序區域以及可以在執行緒中平行執行之程式碼的平行區域。在平行程式中,多個執行緒需要獲得對某些本地範圍變數(其由程式化模組根據所開發的程式而定義)的存取。OpenMP及OpenACC為用以開發平行程式之傳統程式化模組的兩個範例。以下的表格2及3提出分別描述OpenMP及OpenACC範例的偽碼。
一態樣提供一種用以轉譯一程式之函數的系統。在一具體實施例中,系統包含:(1)一本地範圍變數識別符,可操作以識別在函數之至少某些部份中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數,以及(2)一函數轉譯器,關聯於本地範圍變數識別符且可操作以轉譯函數之至少某些部份,使得執行緒共享記憶體用以儲存執行緒共享本地範圍變數且執行緒私用記憶體用以儲存執行緒私用本地範圍變數
另一態樣提供一種用以轉譯一程式之函數的方法。在一具體實施例中,方法包含:(1)識別函數之至少某些部份為在程式的循序區域期間執行或在程式的平行區域期間執行,(2)識別在函數之至少某些部份中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍
變數,以及(3)分配執行緒私用記憶體用於在程式之平行區域期間執行之函數中所使用之執行緒私用本地範圍變數及執行緒共享本地範圍變數的儲存,以及分配執行緒共享記憶體用於在程式之循序區域期間執行之函數中所使用之執行緒共享本地範圍變數的儲存。
在另一具體實施例中,方法包含:(1)產生函數之至少某些部份之對應的共享複製及私用複製,以及(2)在程式之循序區域的執行過程中引用共享複製以代替對應函數以及在程式之平行區域的執行過程中引用私用複製以代替對應函數。
100‧‧‧計算系統
102‧‧‧執行緒區塊
104-1~104-J‧‧‧執行緒群組
106-1~106-K‧‧‧核心
108‧‧‧管線控制單元
110‧‧‧共享記憶體
112-1~112-J‧‧‧本地記憶體
114‧‧‧資料匯流排
116‧‧‧記憶體匯流排
118-J‧‧‧本地匯流排
200‧‧‧系統
202‧‧‧本地範圍變數識別符
204‧‧‧執行緒共享本地範圍變數識別符
206‧‧‧執行緒私用本地範圍變數識別符
208‧‧‧函數轉譯器
210‧‧‧程式
212‧‧‧函數
214‧‧‧循序區域
216‧‧‧平行區域
218‧‧‧程式核
220‧‧‧計算系統
222‧‧‧處理器核心
224‧‧‧執行緒私用記憶體
226‧‧‧執行緒共享記憶體
現在將參照以下描述並連同所附隨圖式,其中:圖1為能夠平行處理且可操作以包含或實現用以轉譯函數以正確處理本地範圍變數之系統及方法的一計算系統的方塊圖;圖2為用以轉譯函數以正確處理本地範圍變數之系統的一具體實施例的方塊圖;圖3為用以轉譯函數以正確處理本地範圍變數之方法的一具體實施例的流程圖;以及圖4為用以轉譯函數以正確處理本地範圍變數之方法的另一具體實施例的流程圖。
某些計算架構(包含以通用中央處理單元(CPUs)為中心者)
一般提供一記憶體結構,其係預設為由全部的給定程式所共享,使得程式中的所有區塊、及區塊中的所有函數具有對所有變數的存取。在此架構中分配儲存空間很簡單;其係分配在共享記憶體結構中。
然而,某些計算系統(如GPUs)使用階層型的記憶體架構,其中某些記憶體為執行緒私用(僅可由一給定的執行緒存取),而其他記憶體為執行緒共享(可由在例如程式的一給定區塊或其整體中的多個執行緒存取)。
將理解到,在某些程式中所定義的本地範圍變數係專用於一執行緒中,而其他的則需在執行緒之間共享。然而,更將理解到,在許多程式化模型(例如OpenMP或OpenACC)中的程式並不區別執行緒私用及執行緒共享本地範圍變數。
一個保守但簡單的解決方法可能為針對所有的本地範圍變數而分配執行緒共享記憶體中的儲存空間。然而本文中將理解到,執行緒共享記憶體通常太小而無法包含所有的本地範圍變數。另一方法可能為針對所有的本地範圍變數而分配執行緒私用記憶體中的儲存空間。然而,本地範圍變數接著將無法以簡單的方式在執行緒之間共享。相反地,本地範圍變數將必須在執行緒私用記憶體之間複製以實現共享,其係冗長且將減慢程式執行。另一方法可能為重寫程式本體,以將所呼叫函數併入對其呼叫的函數中,此技術稱作插入(inlining)。然而,這將模糊化程式的結構,使其難以理解及修改。另一方法可能為手動地分析程式,手動地指定本地範圍變數儲存於執行緒私用或執行緒共享記憶體中。然而,此方法費力且容易出錯。
本文中將理解到,需要自動機制用以轉譯程式的函數,以識別需要執行緒共享記憶體的本地範圍變數(執行緒共享本地範圍變數)。一旦識別,可接著正確地處理本地範圍變數。更特別地,執行緒共享記憶體中的儲存空間可針對執行緒共享本地範圍變數而分配,而執行緒本地記憶體中的儲存空間可針對不需要共享記憶體的本地範圍變數(執行緒私用本地範圍變數)而分配。
因此,本文介紹用以轉譯函數以正確處理在執行緒共享及私用前後文中之本地範圍變數之系統及方法的各種具體實施例。一般而言,系統及方法具體實施例識別本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數,並基於其識別及使用其之函數所被執行的區域(循序區域或平行區域)而分配執行緒私用或執行緒共享記憶體用以儲存本地範圍變數。
在更詳細地描述新穎系統及方法之各種具體實施例之前,現在將描述代表性的計算系統。
圖1為可實施本發明一或多個態樣於其中之計算系統100的方塊圖。計算系統100包含多個執行緒處理器或核心106,其組織為執行緒群組104或「執行包(warps)」。計算系統100包含J個執行緒群組104-1到104-J,其每一者具有K個核心106-1到106-K。在某些具體實施例中,執行緒群組104-1到104-J可更組織為一或多個執行緒區塊102。在一特定具體實施例中,每一執行緒群組104具有三十二個核心106。其他具體實施例可包含少至四個核心於一執行緒群組中以及多達數萬個。某些具體實施例將核心106組織為單一執行緒群組104,而其他具體實施例可具有數百甚至數千個
執行緒群組104。計算系統100的其他具體實施例可僅將核心106組織為執行緒群組104,省略了執行緒區塊組織等級。
計算系統100更包含管線控制單元108、共享記憶體110、及關聯於執行緒群組104-1到104-J的本地記憶體112-1到112-J之陣列。管線控制單元108經由資料匯流排114將任務分配給不同的執行緒群組104-1到104-J。管線控制單元108產生、管理、排程、執行、並提供一機制以同步化執行緒群組104-1到104-J。
一執行緒群組內的核心106係彼此平行的執行。執行緒群組104-1到104-J經由記憶體匯流排116與共享記憶體110通訊。執行緒群組104-1到104-J經由本地匯流排118-1到118-J分別與本地記憶體112-1到112-J通訊。舉例來說,執行緒群組104-J藉由經本地匯流排118-J通訊而利用本地記憶體112-J。計算系統100的某些具體實施例分配共享記憶體110的共享部份給每一執行緒區塊102並允許執行緒區塊102內的所有執行緒群組104對共享記憶體110的共享部份進行存取。某些具體實施例包含僅使用本地記憶體112的執行緒群組104。許多其他具體實施例包含平衡本地記憶體112及共享記憶體110之使用的執行緒群組104。
圖1的具體實施例包含主執行緒群組104-1。剩餘執行緒群組104-2到104-J的每一者係視為「背景工作(worker)」執行緒群組。主執行緒群組104-1包含許多核心,其中一者為主核心106-1,其基本上執行主執行緒。在計算系統100上執行的程式係建構為一序列的核(kernels)。一般而言,每一核在下一核開始前完成執行。在某些具體實施例中,計算系統100可平行地執行多個核,其取決於核的尺寸。每一核係組織為在要核心106上執行
之執行緒的一階層。
已描述了代表性的計算系統,現在將更詳細地描述用以轉譯函數以正確處理在執行緒共享及私用前後文中之本地範圍變數的新穎系統及方法的各種具體實施例。
圖2為用以轉譯函數以正確處理本地範圍變數之系統200的一具體實施例的方塊圖。系統200包含本地範圍變數識別符202及函數轉譯器208。程式210的函數212由本地範圍變數識別符202及函數轉譯器208所處理以產生可在計算系統220上執行的程式核218。計算系統220包含處理器核心222、執行緒私用記憶體224及執行緒共享記憶體226。所有處理器核心222可獲得對執行緒共享記憶體226的存取。每一處理器核心222可獲得其對執行緒私用記憶體224之相關區塊的存取。
程式210可分配為循序區域214及平行區域216。程式210內的函數212可從循序區域214及平行區域216的任一者執行,且通常在程式210之序列中不同點從兩者執行。函數212使用有關函數212之一特定函數的通用範圍或本地範圍變數。特定函數內的本地範圍變數有執行緒共享及執行緒私用變數。執行緒共享本地範圍變數可由程式核218內的所有平行執行緒所存取且在計算系統220上執行。執行緒私用本地範圍變數僅可由將變數實例化的執行緒所存取。
本地範圍變數識別符202包含執行緒共享本地範圍變數識別符204及執行緒私用本地範圍變數識別符206。執行緒共享本地範圍變數識別符204藉由判定以下而在函數212的單一函數上操作:(1)單一函數是否含有平行結構,其中平行結構內的不同執行緒可具有對本地範圍變數的存
取,或(2)單一函數內的本地範圍變數是否脫離至執行的其他執行緒(在脫離分析下)。若這些條件的任一者為真,本地範圍變數為一執行緒共享本地範圍變數。否則,執行緒私用本地範圍變數識別符206係識別本地範圍變數為執行緒私用本地範圍。
函數轉譯器208藉由在程式核218中產生有關應如何針對在單一函數中的每一本地範圍變數分配記憶體之指令而在函數212的單一函數上操作。針對執行緒共享本地範圍變數,分配執行緒共享記憶體226的區塊。針對執行緒私用本地範圍變數,分配執行緒私用記憶體224的區塊。當程式核218在計算系統220內的處理器核心222上執行時,即在執行時間,針對變數而分配記憶體的程序將根據由函數轉譯器208所產生的指令而開始。
本文實現用以轉譯一函數的兩種方法,使得本地範圍變數選擇性地分配在執行緒共享記憶體或執行緒私用記憶體。本文所實現的方法並不需要「插入(inlining)」所有函數呼叫或整體程式分析。本文所實現的方法為通用且支援個別的編譯與鏈接,其為建立大型模組軟體的基礎。
本文所述的兩個方法利用平行程式化模型(如OpenMP及OpenACC)的兩個特性。第一為不是所有本地範圍變數都需要被共享。本文所實現的方法承認此事實且識別必要的執行緒共享本地範圍變數。第二個特性為當一函數在程式的平行區域內被呼叫,執行緒無法獲得對其他執行緒之本地範圍變數的存取。本文所實現的方法係認定當函數內實例化在程式的平行區域內被呼叫,本地範圍變數不需被共享。
本文中所揭露之兩方法中的第一者的一特定具體實施例包含以下程序:
1.執行緒共享記憶體的區塊係針對一共享堆疊而預先分配。執行緒私用記憶體的區塊係針對關聯於每一執行緒的私用堆疊而預先分配。
2.函數內的執行緒共享本地範圍變數及執行緒私用本地範圍變數係識別如下:
a.若函數包含平行結構且平行結構內的不同執行緒可根據程式化模型而具有對本地範圍變數的存取,則本地範圍變數係識別為一執行緒共享本地範圍變數。
b.若本地範圍變數脫離,則變數係識別為一執行緒共享本地範圍變數。
c.所有其他的本地範圍變數係識別為執行緒私用本地範圍變數。
3.函數foo()係複製為兩個額外的函數:共享複製foo_shared()及私用複製foo_private()。
a.在foo_shared()中,
i.在程序2中所識別的執行緒共享本地範圍變數係分配於執行緒共享記憶體中。在程序2中所識別的執行緒私用本地範圍變數係分配於執行緒私用記憶體中。
ii.若foo()含有對另一函數bar()的直接呼叫且bar()在平行結構內被呼叫,則對bar()的呼叫係轉譯為對在foo_shared()中之bar_private()的呼叫。若bar()在平行結
構外被呼叫,則對bar()的呼叫係轉譯為對在foo_shared()中之bar_shared()的呼叫。
iii.若foo()不含有任何平行區域,則對另一函數bar()的直接呼叫係轉譯為對在foo_shared()中之bar_shared()的呼叫。
b.在foo_private()中,
i.所有本地範圍變數(不論其在程序2中被識別為什麼)係分配於執行緒私用記憶體中。
ii.對另一函數bar()的呼叫係轉譯為對其私用複製bar_private()的呼叫,因為私用複製將僅從平行區域內被呼叫。
4.原始函數foo()係轉譯為以下形式:
其中「in_parallel_flag」為以下程序6中所描述的每一執行緒旗標。當定址函數,將使用轉譯形式的位址。
5.在程序3及4之後,只有私用複製直接在任何平行區域內呼叫。只有共享複製直接在任何平行區域外呼叫。對來自程序4的轉譯版本做出間接呼叫。只有執行緒共享或可能的執行緒共享本地範圍變被放入執行緒共享記憶體中。
6.每一執行緒旗標係用以標示執行緒的狀態。旗標的數值為「真」或「假」。當執行緒進入平行區域,旗標設定為「真」。當執行緒離開平行區域,旗標設定為「假」。
圖3為用以轉譯函數以正確處理本地範圍變數之方法的一具體實施例的流程圖。方法開始於開始步驟310。在步驟320中,執行緒共享記憶體及執行緒私用記憶體係針對本地範圍變數而預先分配。在一具體實施例中,執行緒共享記憶體為區塊範圍記憶體。
在步驟330中,產生函數之至少某些部份的對應共享複製及私用複製。在步驟340中,在函數中所使用的本地範圍變數係識別為執行緒共享本地範圍變數或執行緒私用本地範圍變數。在步驟350中,針對共享複製之其中至少一者,分配執行緒共享記憶體用於執行緒共享本地範圍變數的儲存以及分配執行緒私用記憶體用於執行緒私用本地範圍變數的儲存。在步驟360中,針對私用複製之其中至少一者,分配執行緒私用記憶體用於所有本地範圍變數的儲存。在判斷步驟370中,判定程式的平行區域是否被執行。若是,在步驟380中,在執行過程中引用私用複製以代替對應的函數。若否,在步驟390中,引用共享複製以代替對應的函數。
在一具體實施例中,步驟380、390的引用係藉由以下而實現:(1)在共享複製的至少一者中,(1a)將在平行結構中所做出之函數的呼叫轉譯為函數之私用複製的呼叫,以及(1b)將在循序結構中所做出之函數的呼叫轉譯為函數之共享複製的呼叫,以及(2)在私用複製的至少一者中,將函數的呼叫轉譯為函數之私用複製的呼叫。在一相關的具體實施例中,步驟
380、390的引用係藉由使用在執行程式中之函數的至少某些部份的位址而實現。在另一相關的具體實施例中,步驟380、390的引用係藉由轉譯函數的至少某些部份以使引用被執行而實現。在一相關的具體實施例中,分配包含使用一旗標,其在循序區域的執行過程中具有第一狀態且在平行區域的執行過程中具有第二狀態。方法結束於結束步驟395。
本文中所揭露之兩方法中的第二者的一特定具體實施例包含以下程序:
1.執行緒共享記憶體的區塊係針對一共享堆疊而預先分配。執行緒私用記憶體的區塊係針對關聯於每一執行緒的私用堆疊而預先分配。
2.函數內的執行緒共享本地範圍變數及執行緒私用本地範圍變數係識別如下:
a.若函數包含平行結構且平行結構內的不同執行緒可根據程式化模型而具有對本地範圍變數的存取,則本地範圍變數係識別為一執行緒共享本地範圍變數。
b.若本地範圍變數脫離,則變數係識別為一執行緒共享本地範圍變數。
c.所有其他的本地範圍變數係識別為執行緒私用本地範圍變數。
3.在一函數foo()中,在程序2中所識別的所有執行緒私用本地範圍變數係分配於執行緒私用記憶體中。在程序2中所識別
的執行緒共享本地範圍變數的每一者係基於函數是否在串行或平行前後文內被呼叫而有條件地分配。
4.每一執行緒旗標係用以標示執行緒的狀態。旗標的數值為「真」或「假」。當執行緒進入平行區域,旗標設定為「真」。當執行緒離開平行區域,旗標設定為「假」。
圖4為用以轉譯函數以正確處理本地範圍變數之方法的另一具體實施例的流程圖。方法開始於開始步驟410。在步驟420中,執行緒共享記憶體及執行緒私用記憶體係針對本地範圍變數的儲存而預先分配。在一具體實施例中,執行緒共享記憶體為區塊範圍記憶體。
在步驟430中,函數之至少某些部份係識別為在程式的循序區域期間執行或在程式的平行區域期間執行。在步驟440中,在函數之至少某些部份中所使用的本地範圍變數係識別為執行緒共享本地範圍變數或執行緒私用本地範圍變數。在一具體實施例中,識別本地範圍變數包含:若一函數包含一平行結構且多個執行緒可根據一程式化模型獲得對平行結構內之本地範圍變數的存取或本地範圍變數脫離函數時,識別一本地範圍變
數為一執行緒共享本地範圍變數,且識別剩餘的本地範圍變數為執行緒私用本地範圍變數。
在步驟450中,執行緒私用記憶體係分配為用於在程式之平行區域期間執行之函數中所使用之執行緒私用本地範圍變數及執行緒共享本地範圍變數的儲存。在步驟460中,執行緒共享記憶體係分配為用於在程式之循序區域期間執行之函數中所使用之執行緒共享本地範圍變數的儲存。在一具體實施例中,轉譯函數的至少某些部份,以使分配被執行。在一相關的具體實施例中,分配包含使用一旗標,其在循序區域的執行過程中具有第一狀態且在平行區域的執行過程中具有第二狀態。方法結束於結束步驟470。
熟習本申請案相關技藝者將理解到,可對所述具體實施例做出其他及更多添加、刪減、替換或修改。
200‧‧‧系統
202‧‧‧本地範圍變數識別符
204‧‧‧執行緒共享本地範圍變數識別符
206‧‧‧執行緒私用本地範圍變數識別符
208‧‧‧函數轉譯器
210‧‧‧程式
212‧‧‧函數
214‧‧‧循序區域
216‧‧‧平行區域
218‧‧‧程式核
220‧‧‧計算系統
222‧‧‧處理器核心
224‧‧‧執行緒私用記憶體
226‧‧‧執行緒共享記憶體
Claims (10)
- 一種用以轉譯一程式之函數的系統,包含:一本地範圍變數識別符,可操作以識別在該函數之至少某些部份中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數;以及一函數轉譯器,關聯於該本地範圍變數識別符且可操作以轉譯該函數之該至少某些部份,使得執行緒共享記憶體用以儲存該執行緒共享本地範圍變數且執行緒私用記憶體用以儲存該執行緒私用本地範圍變數。
- 如申請專利範圍第1項所述之系統,其中該本地範圍變數識別符包含:一執行緒共享本地範圍變數識別符,可操作以在若一函數包含一平行結構且多個執行緒可根據一程式化模型獲得對該平行結構內之該本地範圍變數的存取或該本地範圍變數脫離該函數時,識別一本地範圍變數為一執行緒共享本地範圍變數;以及一執行緒私用本地範圍變數識別符,關聯於該執行緒共享本地範圍變數識別符且可操作以識別剩餘的本地範圍變數為執行緒私用本地範圍變數。
- 如申請專利範圍第2項所述之系統,其中該程式化模型係選自由以下所組成之群組:一OpenMP程式化模型;以及 一OpenACC程式化模型。
- 如申請專利範圍第1項所述之系統,其中該函數轉譯器更可操作以使用一旗標,該旗標在該程式之循序區域的執行過程中具有一第一狀態且在該程式之平行區域的執行過程中具有一第二狀態。
- 如申請專利範圍第1項所述之系統,其中該執行緒共享記憶體為區塊範圍記憶體。
- 如申請專利範圍第1項所述之系統,更包含組態以預先分配該執行緒共享記憶體及執行緒私用記憶體的一記憶體預先分配器。
- 一種用以轉譯一程式之函數的方法,包含:產生該函數之至少某些部份的對應共享複製及私用複製;以及在該程式之循序區域的執行過程中引用該共享複製以代替該對應函數以及在該程式之平行區域的執行過程中引用該私用複製以代替該對應函數。
- 如申請專利範圍第7項所述之方法,更包含:識別在該函數中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數; 針對該共享複製之其中至少一者,分配執行緒共享記憶體用於該執行緒共享本地範圍變數的儲存以及分配執行緒私用記憶體用於該執行緒私用本地範圍變數的儲存;以及針對該私用複製之其中至少一者,分配執行緒私用記憶體用於所有本地範圍變數的儲存。
- 一種用以轉譯一程式之函數的方法,包含:識別該函數之至少某些部份為在該程式的循序區域期間執行或在該程式的平行區域期間執行;識別在該函數之該至少某些部份中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數;以及分配執行緒私用記憶體用於在該程式之該平行區域期間執行之函數中所使用之該執行緒私用本地範圍變數及執行緒共享本地範圍變數的儲存,以及分配執行緒共享記憶體用於在該程式之該循序區域期間執行之函數中所使用之執行緒共享本地範圍變數的儲存。
- 如申請專利範圍第9項所述之方法,其中識別該本地範圍變數之該步驟包含:若一函數包含一平行結構且多個執行緒可根據一程式化模型獲得對該平行結構內之該本地範圍變數的存取或該本地範圍變數脫離該函數時,識別一本地範圍變數為一執行緒共享本地範圍變數;以及識別剩餘的本地範圍變數為執行緒私用本地範圍變數。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261722661P | 2012-11-05 | 2012-11-05 | |
US13/724,202 US9727338B2 (en) | 2012-11-05 | 2012-12-21 | System and method for translating program functions for correct handling of local-scope variables and computing system incorporating the same |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201439907A true TW201439907A (zh) | 2014-10-16 |
TWI488111B TWI488111B (zh) | 2015-06-11 |
Family
ID=50623483
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102140063A TWI488111B (zh) | 2012-11-05 | 2013-11-05 | 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 |
TW102140064A TW201443783A (zh) | 2012-11-05 | 2013-11-05 | 在單一指令多執行緒處理器上以函數呼叫編譯或執行時間執行一分叉-會合資料平行程式的系統及方法 |
TW102140061A TWI510919B (zh) | 2012-11-05 | 2013-11-05 | 分配不同特性的記憶體給共享資料物件的系統及方法 |
TW102140062A TWI494853B (zh) | 2012-11-05 | 2013-11-05 | 使用一群組的執行緒執行循序碼的系統及方法和應用其之單一指令多執行緒處理器 |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102140064A TW201443783A (zh) | 2012-11-05 | 2013-11-05 | 在單一指令多執行緒處理器上以函數呼叫編譯或執行時間執行一分叉-會合資料平行程式的系統及方法 |
TW102140061A TWI510919B (zh) | 2012-11-05 | 2013-11-05 | 分配不同特性的記憶體給共享資料物件的系統及方法 |
TW102140062A TWI494853B (zh) | 2012-11-05 | 2013-11-05 | 使用一群組的執行緒執行循序碼的系統及方法和應用其之單一指令多執行緒處理器 |
Country Status (3)
Country | Link |
---|---|
US (4) | US9710275B2 (zh) |
CN (4) | CN103809936A (zh) |
TW (4) | TWI488111B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI647619B (zh) * | 2017-08-29 | 2019-01-11 | 智微科技股份有限公司 | 用來於一電子裝置中進行硬體資源管理之方法以及對應的電子裝置 |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9710275B2 (en) | 2012-11-05 | 2017-07-18 | Nvidia Corporation | System and method for allocating memory of differing properties to shared data objects |
US9519668B2 (en) * | 2013-05-06 | 2016-12-13 | International Business Machines Corporation | Lock-free creation of hash tables in parallel |
US9250877B2 (en) * | 2013-09-20 | 2016-02-02 | Cray Inc. | Assisting parallelization of a computer program |
US9207979B1 (en) * | 2014-05-28 | 2015-12-08 | Freescale Semiconductor, Inc. | Explicit barrier scheduling mechanism for pipelining of stream processing algorithms |
US10061592B2 (en) | 2014-06-27 | 2018-08-28 | Samsung Electronics Co., Ltd. | Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices |
US10061591B2 (en) | 2014-06-27 | 2018-08-28 | Samsung Electronics Company, Ltd. | Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing |
US9804883B2 (en) * | 2014-11-14 | 2017-10-31 | Advanced Micro Devices, Inc. | Remote scoped synchronization for work stealing and sharing |
US9886317B2 (en) * | 2015-02-02 | 2018-02-06 | Oracle International Corporation | Fine-grained scheduling of work in runtime systems |
US10318307B2 (en) | 2015-06-17 | 2019-06-11 | Mediatek, Inc. | Scalarization of vector processing |
US9594512B1 (en) | 2015-06-19 | 2017-03-14 | Pure Storage, Inc. | Attributing consumed storage capacity among entities storing data in a storage array |
GB2539958B (en) * | 2015-07-03 | 2019-09-25 | Advanced Risc Mach Ltd | Data processing systems |
GB2540937B (en) * | 2015-07-30 | 2019-04-03 | Advanced Risc Mach Ltd | Graphics processing systems |
US10996989B2 (en) * | 2016-06-13 | 2021-05-04 | International Business Machines Corporation | Flexible optimized data handling in systems with multiple memories |
US10255132B2 (en) | 2016-06-22 | 2019-04-09 | Advanced Micro Devices, Inc. | System and method for protecting GPU memory instructions against faults |
US10310861B2 (en) | 2017-04-01 | 2019-06-04 | Intel Corporation | Mechanism for scheduling threads on a multiprocessor |
GB2560059B (en) * | 2017-06-16 | 2019-03-06 | Imagination Tech Ltd | Scheduling tasks |
CN109471673B (zh) * | 2017-09-07 | 2022-02-01 | 智微科技股份有限公司 | 用来于电子装置中进行硬件资源管理的方法及电子装置 |
US10990394B2 (en) * | 2017-09-28 | 2021-04-27 | Intel Corporation | Systems and methods for mixed instruction multiple data (xIMD) computing |
US11068247B2 (en) | 2018-02-06 | 2021-07-20 | Microsoft Technology Licensing, Llc | Vectorizing conditional min-max sequence reduction loops |
US10606595B2 (en) * | 2018-03-23 | 2020-03-31 | Arm Limited | Data processing systems |
CN108804311B (zh) * | 2018-05-07 | 2022-06-03 | 微梦创科网络科技(中国)有限公司 | 一种执行测试文件的方法及装置 |
US11061742B2 (en) * | 2018-06-27 | 2021-07-13 | Intel Corporation | System, apparatus and method for barrier synchronization in a multi-threaded processor |
CN110032407B (zh) | 2019-03-08 | 2020-12-22 | 创新先进技术有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
CN110990151A (zh) * | 2019-11-24 | 2020-04-10 | 浪潮电子信息产业股份有限公司 | 一种基于异构计算平台的业务处理方法 |
US20210294673A1 (en) * | 2020-03-19 | 2021-09-23 | Nvidia Corporation | Techniques for orchestrating stages of thread synchronization |
CN112114877B (zh) * | 2020-09-28 | 2023-03-14 | 西安芯瞳半导体技术有限公司 | 一种动态补偿线程束warp的方法、处理器及计算机存储介质 |
US11861403B2 (en) | 2020-10-15 | 2024-01-02 | Nxp Usa, Inc. | Method and system for accelerator thread management |
CN114968358A (zh) * | 2020-10-21 | 2022-08-30 | 上海壁仞智能科技有限公司 | 配置向量运算系统中的协作线程束的装置和方法 |
CN112579164B (zh) * | 2020-12-05 | 2022-10-25 | 西安翔腾微电子科技有限公司 | 一种simt条件分支处理装置及方法 |
US11361400B1 (en) | 2021-05-06 | 2022-06-14 | Arm Limited | Full tile primitives in tile-based graphics processing |
CN117009054B (zh) * | 2023-07-27 | 2024-06-28 | 北京登临科技有限公司 | 一种simt装置、线程组动态构建方法及处理器 |
Family Cites Families (83)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5875464A (en) * | 1991-12-10 | 1999-02-23 | International Business Machines Corporation | Computer system with private and shared partitions in cache |
US6058465A (en) * | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
JP3849951B2 (ja) | 1997-02-27 | 2006-11-22 | 株式会社日立製作所 | 主記憶共有型マルチプロセッサ |
US6009517A (en) * | 1997-10-06 | 1999-12-28 | Sun Microsystems, Inc. | Mixed execution stack and exception handling |
GB9825102D0 (en) | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6389449B1 (en) * | 1998-12-16 | 2002-05-14 | Clearwater Networks, Inc. | Interstream control and communications for multi-streaming digital processors |
US7020879B1 (en) * | 1998-12-16 | 2006-03-28 | Mips Technologies, Inc. | Interrupt and exception handling for multi-streaming digital processors |
US6574725B1 (en) * | 1999-11-01 | 2003-06-03 | Advanced Micro Devices, Inc. | Method and mechanism for speculatively executing threads of instructions |
US6609193B1 (en) | 1999-12-30 | 2003-08-19 | Intel Corporation | Method and apparatus for multi-thread pipelined instruction decoder |
JP3632635B2 (ja) | 2001-07-18 | 2005-03-23 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
TWI245221B (en) * | 2002-08-22 | 2005-12-11 | Ip First Llc | Apparatus and method for selective memory attribute control |
US7159211B2 (en) * | 2002-08-29 | 2007-01-02 | Indian Institute Of Information Technology | Method for executing a sequential program in parallel with automatic fault tolerance |
US7086063B1 (en) * | 2003-03-25 | 2006-08-01 | Electric Cloud, Inc. | System and method for file caching in a distributed program build environment |
US8683132B1 (en) | 2003-09-29 | 2014-03-25 | Nvidia Corporation | Memory controller for sequentially prefetching data for a processor of a computer system |
US7464370B2 (en) * | 2003-12-04 | 2008-12-09 | International Business Machines Corporation | Creating a method from a block of code |
US7380086B2 (en) * | 2003-12-12 | 2008-05-27 | International Business Machines Corporation | Scalable runtime system for global address space languages on shared and distributed memory machines |
WO2005096136A1 (en) * | 2004-03-31 | 2005-10-13 | Intel Corporation | Stack caching using code sharing |
US7822779B2 (en) | 2004-04-23 | 2010-10-26 | Wal-Mart Stores, Inc. | Method and apparatus for scalable transport processing fulfillment system |
US20060095675A1 (en) | 2004-08-23 | 2006-05-04 | Rongzhen Yang | Three stage hybrid stack model |
US7469318B2 (en) | 2005-02-10 | 2008-12-23 | International Business Machines Corporation | System bus structure for large L2 cache array topology with different latency domains |
US7574702B2 (en) * | 2005-03-18 | 2009-08-11 | Microsoft Corporation | Method and apparatus for hybrid stack walking |
US8516483B2 (en) | 2005-05-13 | 2013-08-20 | Intel Corporation | Transparent support for operating system services for a sequestered sequencer |
US8397013B1 (en) * | 2006-10-05 | 2013-03-12 | Google Inc. | Hybrid memory module |
KR101257848B1 (ko) * | 2005-07-13 | 2013-04-24 | 삼성전자주식회사 | 복합 메모리를 구비하는 데이터 저장 시스템 및 그 동작방법 |
US20070136523A1 (en) * | 2005-12-08 | 2007-06-14 | Bonella Randy M | Advanced dynamic disk memory module special operations |
US20070143582A1 (en) | 2005-12-16 | 2007-06-21 | Nvidia Corporation | System and method for grouping execution threads |
US7478190B2 (en) | 2006-02-10 | 2009-01-13 | University Of Utah Technology Commercialization Office | Microarchitectural wire management for performance and power in partitioned architectures |
JP4900784B2 (ja) | 2006-04-13 | 2012-03-21 | 株式会社日立製作所 | ストレージシステム及びストレージシステムのデータ移行方法 |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8606998B2 (en) * | 2006-08-24 | 2013-12-10 | Advanced Micro Devices, Inc. | System and method for instruction-based cache allocation policies |
US20080109795A1 (en) * | 2006-11-02 | 2008-05-08 | Nvidia Corporation | C/c++ language extensions for general-purpose graphics processing unit |
US7584335B2 (en) | 2006-11-02 | 2009-09-01 | International Business Machines Corporation | Methods and arrangements for hybrid data storage |
US7593263B2 (en) * | 2006-12-17 | 2009-09-22 | Anobit Technologies Ltd. | Memory device with reduced reading latency |
US8250556B1 (en) | 2007-02-07 | 2012-08-21 | Tilera Corporation | Distributing parallelism for parallel processing architectures |
CN101030152A (zh) * | 2007-03-20 | 2007-09-05 | 华为技术有限公司 | 基于伪同步方式的操作控制方法及装置 |
US8095782B1 (en) * | 2007-04-05 | 2012-01-10 | Nvidia Corporation | Multiple simultaneous context architecture for rebalancing contexts on multithreaded processing cores upon a context change |
US8286196B2 (en) * | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US7856541B2 (en) | 2007-04-18 | 2010-12-21 | Hitachi, Ltd. | Latency aligned volume provisioning methods for interconnected multiple storage controller configuration |
KR101458028B1 (ko) * | 2007-05-30 | 2014-11-04 | 삼성전자 주식회사 | 병렬 처리 장치 및 방법 |
DE102007025397B4 (de) * | 2007-05-31 | 2010-07-15 | Advanced Micro Devices, Inc., Sunnyvale | System mit mehreren Prozessoren und Verfahren zu seinem Betrieb |
CN101329638B (zh) | 2007-06-18 | 2011-11-09 | 国际商业机器公司 | 程序代码的并行性的分析方法和系统 |
US8966488B2 (en) | 2007-07-06 | 2015-02-24 | XMOS Ltd. | Synchronising groups of threads with dedicated hardware logic |
TW200917277A (en) * | 2007-10-15 | 2009-04-16 | A Data Technology Co Ltd | Adaptive hybrid density memory storage device and control method thereof |
US20090240930A1 (en) * | 2008-03-24 | 2009-09-24 | International Business Machines Corporation | Executing An Application On A Parallel Computer |
US9477587B2 (en) * | 2008-04-11 | 2016-10-25 | Micron Technology, Inc. | Method and apparatus for a volume management system in a non-volatile memory device |
US8161483B2 (en) * | 2008-04-24 | 2012-04-17 | International Business Machines Corporation | Configuring a parallel computer based on an interleave rate of an application containing serial and parallel segments |
US8291427B2 (en) * | 2008-06-09 | 2012-10-16 | International Business Machines Corporation | Scheduling applications for execution on a plurality of compute nodes of a parallel computer to manage temperature of the nodes during execution |
US20100079454A1 (en) | 2008-09-29 | 2010-04-01 | Legakis Justin S | Single Pass Tessellation |
US9672019B2 (en) * | 2008-11-24 | 2017-06-06 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
US8528001B2 (en) * | 2008-12-15 | 2013-09-03 | Oracle America, Inc. | Controlling and dynamically varying automatic parallelization |
US20100169540A1 (en) * | 2008-12-30 | 2010-07-01 | Sinclair Alan W | Method and apparatus for relocating selected data between flash partitions in a memory device |
US8321645B2 (en) * | 2009-04-29 | 2012-11-27 | Netapp, Inc. | Mechanisms for moving data in a hybrid aggregate |
US8914799B2 (en) * | 2009-06-30 | 2014-12-16 | Oracle America Inc. | High performance implementation of the OpenMP tasking feature |
US8561046B2 (en) * | 2009-09-14 | 2013-10-15 | Oracle America, Inc. | Pipelined parallelization with localized self-helper threading |
US8271729B2 (en) | 2009-09-18 | 2012-09-18 | International Business Machines Corporation | Read and write aware cache storing cache lines in a read-often portion and a write-often portion |
US9798543B2 (en) | 2009-09-24 | 2017-10-24 | Nvidia Corporation | Fast mapping table register file allocation algorithm for SIMT processors |
US8677106B2 (en) | 2009-09-24 | 2014-03-18 | Nvidia Corporation | Unanimous branch instructions in a parallel thread processor |
US8335892B1 (en) | 2009-09-28 | 2012-12-18 | Nvidia Corporation | Cache arbitration between multiple clients |
EP2499576A2 (en) | 2009-11-13 | 2012-09-19 | Richard S. Anderson | Distributed symmetric multiprocessing computing architecture |
US8612978B2 (en) * | 2009-12-10 | 2013-12-17 | Oracle America, Inc. | Code execution utilizing single or multiple threads |
US9696995B2 (en) | 2009-12-30 | 2017-07-04 | International Business Machines Corporation | Parallel execution unit that extracts data parallelism at runtime |
US20110191522A1 (en) | 2010-02-02 | 2011-08-04 | Condict Michael N | Managing Metadata and Page Replacement in a Persistent Cache in Flash Memory |
US9235531B2 (en) | 2010-03-04 | 2016-01-12 | Microsoft Technology Licensing, Llc | Multi-level buffer pool extensions |
CN101819675B (zh) | 2010-04-19 | 2011-08-10 | 浙江大学 | 一种基于gpu的层次包围盒的快速构造方法 |
US8650554B2 (en) | 2010-04-27 | 2014-02-11 | International Business Machines Corporation | Single thread performance in an in-order multi-threaded processor |
US8898324B2 (en) * | 2010-06-24 | 2014-11-25 | International Business Machines Corporation | Data access management in a hybrid memory server |
US8751771B2 (en) | 2010-09-29 | 2014-06-10 | Nvidia Corporation | Efficient implementation of arrays of structures on SIMT and SIMD architectures |
US8499305B2 (en) * | 2010-10-15 | 2013-07-30 | Via Technologies, Inc. | Systems and methods for performing multi-program general purpose shader kickoff |
US8547385B2 (en) | 2010-10-15 | 2013-10-01 | Via Technologies, Inc. | Systems and methods for performing shared memory accesses |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
KR101713051B1 (ko) * | 2010-11-29 | 2017-03-07 | 삼성전자주식회사 | 하이브리드 메모리 시스템, 및 그 관리 방법 |
US8996842B2 (en) | 2010-12-09 | 2015-03-31 | Seagate Technology Llc | Memory stacks management |
KR20120082218A (ko) * | 2011-01-13 | 2012-07-23 | (주)인디링스 | 파티션 정보를 기초로 호스트의 요청에 대한 처리 기법을 적응적으로 결정하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법 |
JP5576305B2 (ja) * | 2011-01-20 | 2014-08-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータの動作制御方法、プログラム及びシステム |
US9195550B2 (en) | 2011-02-03 | 2015-11-24 | International Business Machines Corporation | Method for guaranteeing program correctness using fine-grained hardware speculative execution |
JP5668573B2 (ja) | 2011-03-30 | 2015-02-12 | 日本電気株式会社 | マイクロプロセッサ、メモリアクセス方法 |
US8769537B1 (en) * | 2011-06-08 | 2014-07-01 | Workday, Inc. | System for partitioning batch processes |
KR101895605B1 (ko) * | 2011-11-21 | 2018-10-25 | 삼성전자주식회사 | 플래시 메모리 장치 및 그것의 프로그램 방법 |
US9921873B2 (en) * | 2012-01-31 | 2018-03-20 | Nvidia Corporation | Controlling work distribution for processing tasks |
US9063759B2 (en) | 2012-03-28 | 2015-06-23 | International Business Machines Corporation | Optimizing subroutine calls based on architecture level of called subroutine |
US9575806B2 (en) | 2012-06-29 | 2017-02-21 | Intel Corporation | Monitoring accesses of a thread to multiple memory controllers and selecting a thread processor for the thread based on the monitoring |
TWI479314B (zh) * | 2012-08-30 | 2015-04-01 | Phison Electronics Corp | 系統資料儲存方法、記憶體控制器與記憶體儲存裝置 |
US9710275B2 (en) | 2012-11-05 | 2017-07-18 | Nvidia Corporation | System and method for allocating memory of differing properties to shared data objects |
-
2012
- 2012-12-21 US US13/724,089 patent/US9710275B2/en active Active
- 2012-12-21 US US13/724,202 patent/US9727338B2/en active Active
- 2012-12-21 US US13/724,359 patent/US9747107B2/en active Active
- 2012-12-21 US US13/723,981 patent/US9436475B2/en active Active
-
2013
- 2013-11-04 CN CN201310538671.9A patent/CN103809936A/zh active Pending
- 2013-11-04 CN CN201310538409.4A patent/CN103885751A/zh active Pending
- 2013-11-04 CN CN201310538631.4A patent/CN103809964B/zh active Active
- 2013-11-04 CN CN201310538507.8A patent/CN103809963A/zh active Pending
- 2013-11-05 TW TW102140063A patent/TWI488111B/zh not_active IP Right Cessation
- 2013-11-05 TW TW102140064A patent/TW201443783A/zh unknown
- 2013-11-05 TW TW102140061A patent/TWI510919B/zh active
- 2013-11-05 TW TW102140062A patent/TWI494853B/zh not_active IP Right Cessation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI647619B (zh) * | 2017-08-29 | 2019-01-11 | 智微科技股份有限公司 | 用來於一電子裝置中進行硬體資源管理之方法以及對應的電子裝置 |
Also Published As
Publication number | Publication date |
---|---|
TW201439905A (zh) | 2014-10-16 |
CN103885751A (zh) | 2014-06-25 |
US20140130021A1 (en) | 2014-05-08 |
US9436475B2 (en) | 2016-09-06 |
TW201443639A (zh) | 2014-11-16 |
US20140129812A1 (en) | 2014-05-08 |
TWI488111B (zh) | 2015-06-11 |
CN103809936A (zh) | 2014-05-21 |
US9710275B2 (en) | 2017-07-18 |
US20140130052A1 (en) | 2014-05-08 |
CN103809964A (zh) | 2014-05-21 |
TWI510919B (zh) | 2015-12-01 |
US20140129783A1 (en) | 2014-05-08 |
US9747107B2 (en) | 2017-08-29 |
TWI494853B (zh) | 2015-08-01 |
CN103809963A (zh) | 2014-05-21 |
US9727338B2 (en) | 2017-08-08 |
TW201443783A (zh) | 2014-11-16 |
CN103809964B (zh) | 2017-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI488111B (zh) | 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 | |
US9959337B2 (en) | Independent data processing environments within a big data cluster system | |
CN106407156B (zh) | 一个bootrom引导多核cpu启动的方法及系统 | |
US8516461B2 (en) | Method to dynamically distribute a multi-dimensional work set across a multi-core system | |
TWI498819B (zh) | 執行成型記憶體存取作業的系統和方法 | |
TWI488118B (zh) | 處理系統中動態產生任務的傳訊、排序和執行 | |
US10430327B2 (en) | Virtual machine based huge page balloon support | |
TW201430566A (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
CN103365631A (zh) | 用于存储器访问的动态库模式寻址 | |
US9875132B2 (en) | Input output memory management unit based zero copy virtual machine to virtual machine communication | |
CN103870309A (zh) | 用于集群多级寄存器堆的寄存器分配 | |
US10853259B2 (en) | Exitless extended page table switching for nested hypervisors | |
TW201407482A (zh) | 多個應用程式分享的圖形處理單元 | |
JP7126136B2 (ja) | 再構成可能なキャッシュアーキテクチャおよびキャッシュコヒーレンシの方法 | |
US10437736B2 (en) | Single instruction multiple data page table walk scheduling at input output memory management unit | |
EP4121855A1 (en) | Cooperative work-stealing scheduler | |
CN103218259A (zh) | 计算任务的调度和执行 | |
CN109582461A (zh) | 一种针对Linux容器的资源部署方法及系统 | |
US8914778B2 (en) | Data placement for execution of an executable | |
US10545670B2 (en) | Scalable page migration after memory de-duplication | |
CN110447019B (zh) | 存储器分配管理器及由其执行的用于管理存储器分配的方法 | |
US11574087B2 (en) | Multi-processor simulation on a multi-core machine | |
JP2780662B2 (ja) | マルチプロセッサシステム | |
JPWO2021070016A5 (zh) | ||
KR102275181B1 (ko) | 멀티코어 프로세서 시스템에서 메모리 할당 방법 및 장치, 이를 위한 기록매체 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |