TWI488111B - 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 - Google Patents

轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 Download PDF

Info

Publication number
TWI488111B
TWI488111B TW102140063A TW102140063A TWI488111B TW I488111 B TWI488111 B TW I488111B TW 102140063 A TW102140063 A TW 102140063A TW 102140063 A TW102140063 A TW 102140063A TW I488111 B TWI488111 B TW I488111B
Authority
TW
Taiwan
Prior art keywords
thread
local range
local
function
range variable
Prior art date
Application number
TW102140063A
Other languages
English (en)
Other versions
TW201439907A (zh
Inventor
Yuan Lin
Gautam Chakrabarti
Jaydeep Marathe
Okwan Kwon
Amit Sabne
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of TW201439907A publication Critical patent/TW201439907A/zh
Application granted granted Critical
Publication of TWI488111B publication Critical patent/TWI488111B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0853Cache with multiport tag or data arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/451Stack data

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. 如申請專利範圍第1項所述之系統,其中該本地範圍變數識別符包含:一執行緒共享本地範圍變數識別符,可操作以在若一函數包含一平行結構且多個執行緒可根據一程式化模型獲得對該平行結構內之該本地範圍變數的存取或該本地範圍變數脫離該函數時,識別一本地範圍變數為一執行緒共享本地範圍變數;以及一執行緒私用本地範圍變數識別符,關聯於該執行緒共享本地範圍變數識別符且可操作以識別剩餘的本地範圍變數為執行緒私用本地範圍變數。
  3. 如申請專利範圍第2項所述之系統,其中該程式化模型係選自由以下所組成之群組:一OpenMP程式化模型;以及 一OpenACC程式化模型。
  4. 如申請專利範圍第1項所述之系統,其中該函數轉譯器更可操作以使用一旗標,該旗標在該程式之循序區域的執行過程中具有一第一狀態且在該程式之平行區域的執行過程中具有一第二狀態。
  5. 如申請專利範圍第1項所述之系統,其中該執行緒共享記憶體為區塊範圍記憶體。
  6. 如申請專利範圍第1項所述之系統,更包含組態以預先分配該執行緒共享記憶體及執行緒私用記憶體的一記憶體預先分配器。
  7. 一種用以轉譯一程式之函數的方法,包含:產生該函數之至少某些部份的對應共享複製及私用複製;以及在該程式之循序區域的執行過程中引用該共享複製以代替該對應函數以及在該程式之平行區域的執行過程中引用該私用複製以代替該對應函數。
  8. 如申請專利範圍第7項所述之方法,更包含:識別在該函數中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數; 針對該共享複製之其中至少一者,分配執行緒共享記憶體用於該執行緒共享本地範圍變數的儲存以及分配執行緒私用記憶體用於該執行緒私用本地範圍變數的儲存;以及針對該私用複製之其中至少一者,分配執行緒私用記憶體用於所有本地範圍變數的儲存。
  9. 一種用以轉譯一程式之函數的方法,包含:識別該函數之至少某些部份為在該程式的循序區域期間執行或在該程式的平行區域期間執行;識別在該函數之該至少某些部份中所使用的本地範圍變數為執行緒共享本地範圍變數或執行緒私用本地範圍變數;以及分配執行緒私用記憶體用於在該程式之該平行區域期間執行之函數中所使用之該執行緒私用本地範圍變數及執行緒共享本地範圍變數的儲存,以及分配執行緒共享記憶體用於在該程式之該循序區域期間執行之函數中所使用之執行緒共享本地範圍變數的儲存。
  10. 如申請專利範圍第9項所述之方法,其中識別該本地範圍變數之該步驟包含:若一函數包含一平行結構且多個執行緒可根據一程式化模型獲得對該平行結構內之該本地範圍變數的存取或該本地範圍變數脫離該函數時,識別一本地範圍變數為一執行緒共享本地範圍變數;以及識別剩餘的本地範圍變數為執行緒私用本地範圍變數。
TW102140063A 2012-11-05 2013-11-05 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統 TWI488111B (zh)

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 TW201439907A (zh) 2014-10-16
TWI488111B true TWI488111B (zh) 2015-06-11

Family

ID=50623483

Family Applications (4)

Application Number Title Priority Date Filing Date
TW102140061A TWI510919B (zh) 2012-11-05 2013-11-05 分配不同特性的記憶體給共享資料物件的系統及方法
TW102140064A TW201443783A (zh) 2012-11-05 2013-11-05 在單一指令多執行緒處理器上以函數呼叫編譯或執行時間執行一分叉-會合資料平行程式的系統及方法
TW102140063A TWI488111B (zh) 2012-11-05 2013-11-05 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統
TW102140062A TWI494853B (zh) 2012-11-05 2013-11-05 使用一群組的執行緒執行循序碼的系統及方法和應用其之單一指令多執行緒處理器

Family Applications Before (2)

Application Number Title Priority Date Filing Date
TW102140061A TWI510919B (zh) 2012-11-05 2013-11-05 分配不同特性的記憶體給共享資料物件的系統及方法
TW102140064A TW201443783A (zh) 2012-11-05 2013-11-05 在單一指令多執行緒處理器上以函數呼叫編譯或執行時間執行一分叉-會合資料平行程式的系統及方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
TW102140062A TWI494853B (zh) 2012-11-05 2013-11-05 使用一群組的執行緒執行循序碼的系統及方法和應用其之單一指令多執行緒處理器

Country Status (3)

Country Link
US (4) US9727338B2 (zh)
CN (4) CN103809936A (zh)
TW (4) TWI510919B (zh)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9727338B2 (en) 2012-11-05 2017-08-08 Nvidia Corporation System and method for translating program functions for correct handling of local-scope variables and computing system incorporating the same
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
TWI647619B (zh) * 2017-08-29 2019-01-11 智微科技股份有限公司 用來於一電子裝置中進行硬體資源管理之方法以及對應的電子裝置
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 浪潮电子信息产业股份有限公司 一种基于异构计算平台的业务处理方法
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
CN114816529A (zh) * 2020-10-21 2022-07-29 上海壁仞智能科技有限公司 配置向量运算系统中的协作线程束的装置和方法
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
CN117009054A (zh) * 2023-07-27 2023-11-07 北京登临科技有限公司 一种simt装置、线程组动态构建方法及处理器

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050125774A1 (en) * 2003-12-04 2005-06-09 International Business Machines Corporation Creating a method from a block of code
US20090031290A1 (en) * 2007-06-18 2009-01-29 International Business Machines Corporation Method and system for analyzing parallelism of program code
US20110022672A1 (en) * 2004-04-23 2011-01-27 Wal-Mart Stores, Inc. Method and Apparatus for Scalable Transport Processing Fulfillment System
US20120131309A1 (en) * 2010-11-18 2012-05-24 Texas Instruments Incorporated High-performance, scalable mutlicore hardware and software system

Family Cites Families (79)

* Cited by examiner, † Cited by third party
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
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
CN100461090C (zh) * 2004-03-31 2009-02-11 英特尔公司 利用代码共享进行堆栈高速缓存的系统、方法和设备
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
US7584335B2 (en) 2006-11-02 2009-09-01 International Business Machines Corporation Methods and arrangements for hybrid data storage
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
US7593263B2 (en) * 2006-12-17 2009-09-22 Anobit Technologies Ltd. Memory device with reduced reading latency
US8291400B1 (en) 2007-02-07 2012-10-16 Tilera Corporation Communication scheduling 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
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
US8615646B2 (en) 2009-09-24 2013-12-24 Nvidia Corporation Unanimous branch instructions in a parallel thread processor
US9798543B2 (en) 2009-09-24 2017-10-24 Nvidia Corporation Fast mapping table register file allocation algorithm for SIMT processors
US8335892B1 (en) * 2009-09-28 2012-12-18 Nvidia Corporation Cache arbitration between multiple clients
WO2011060366A2 (en) * 2009-11-13 2011-05-19 Anderson Richard S 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
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 系統資料儲存方法、記憶體控制器與記憶體儲存裝置
US9727338B2 (en) 2012-11-05 2017-08-08 Nvidia Corporation System and method for translating program functions for correct handling of local-scope variables and computing system incorporating the same

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050125774A1 (en) * 2003-12-04 2005-06-09 International Business Machines Corporation Creating a method from a block of code
US20110022672A1 (en) * 2004-04-23 2011-01-27 Wal-Mart Stores, Inc. Method and Apparatus for Scalable Transport Processing Fulfillment System
US20090031290A1 (en) * 2007-06-18 2009-01-29 International Business Machines Corporation Method and system for analyzing parallelism of program code
US20120131309A1 (en) * 2010-11-18 2012-05-24 Texas Instruments Incorporated High-performance, scalable mutlicore hardware and software system

Also Published As

Publication number Publication date
TW201443639A (zh) 2014-11-16
TW201443783A (zh) 2014-11-16
CN103809964B (zh) 2017-06-16
CN103809936A (zh) 2014-05-21
US20140130021A1 (en) 2014-05-08
TW201439907A (zh) 2014-10-16
US9710275B2 (en) 2017-07-18
US20140129783A1 (en) 2014-05-08
CN103809963A (zh) 2014-05-21
CN103885751A (zh) 2014-06-25
CN103809964A (zh) 2014-05-21
US9747107B2 (en) 2017-08-29
TW201439905A (zh) 2014-10-16
US9727338B2 (en) 2017-08-08
US20140130052A1 (en) 2014-05-08
US9436475B2 (en) 2016-09-06
TWI494853B (zh) 2015-08-01
TWI510919B (zh) 2015-12-01
US20140129812A1 (en) 2014-05-08

Similar Documents

Publication Publication Date Title
TWI488111B (zh) 轉譯程式函數以正確處理本地範圍變數的系統及方法和應用其之計算系統
CN106407156B (zh) 一个bootrom引导多核cpu启动的方法及系统
US8516461B2 (en) Method to dynamically distribute a multi-dimensional work set across a multi-core system
TWI498819B (zh) 執行成型記憶體存取作業的系統和方法
US11099982B2 (en) NUMA-aware garbage collection
TWI488118B (zh) 處理系統中動態產生任務的傳訊、排序和執行
TW201430566A (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
CN103365631A (zh) 用于存储器访问的动态库模式寻址
US9875132B2 (en) Input output memory management unit based zero copy virtual machine to virtual machine communication
US10853259B2 (en) Exitless extended page table switching for nested hypervisors
US10430327B2 (en) Virtual machine based huge page balloon support
US20170075706A1 (en) Using emulated input/output devices in virtual machine migration
CN103870309A (zh) 用于集群多级寄存器堆的寄存器分配
CN103996216A (zh) 用于曲面细分和几何着色器的电力高效属性处置
US9779050B2 (en) Allocating virtual resources to root PCI bus
CN103197918B (zh) 多通道时间片组
CN103218259A (zh) 计算任务的调度和执行
WO2021188287A1 (en) Cooperative work-stealing scheduler
US10545670B2 (en) Scalable page migration after memory de-duplication
US20140130027A1 (en) Data placement for execution of an executable
CN110447019B (zh) 存储器分配管理器及由其执行的用于管理存储器分配的方法
CN109582461A (zh) 一种针对Linux容器的资源部署方法及系统
US20190196978A1 (en) Single instruction multiple data page table walk scheduling at input output memory management unit
WO2009064420A1 (en) Multiprocessing apparatus, system and method
US11574087B2 (en) Multi-processor simulation on a multi-core machine

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees