TWI437491B - 經組態以轉譯一應用程式來由一通用處理器執行的運算裝置 - Google Patents

經組態以轉譯一應用程式來由一通用處理器執行的運算裝置 Download PDF

Info

Publication number
TWI437491B
TWI437491B TW098110979A TW98110979A TWI437491B TW I437491 B TWI437491 B TW I437491B TW 098110979 A TW098110979 A TW 098110979A TW 98110979 A TW98110979 A TW 98110979A TW I437491 B TWI437491 B TW I437491B
Authority
TW
Taiwan
Prior art keywords
application
code
translator
thread
execution
Prior art date
Application number
TW098110979A
Other languages
English (en)
Other versions
TW200947302A (en
Inventor
Vinod Grover
Bastiaan Joannes Matheus Aarts
Michael Murphy
Boris Beylin
Jayant B Kolhe
Douglas Saylor
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 TW200947302A publication Critical patent/TW200947302A/zh
Application granted granted Critical
Publication of TWI437491B publication Critical patent/TWI437491B/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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/261Functional testing by simulating additional hardware, e.g. fault simulation
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Description

經組態以轉譯一應用程式來由一通用處理器執行的運算裝置
本發明之具體實施例概言之關於編譯器程式,尤指一種轉譯器,其將撰寫成由一多核心繪圖處理器執行的一應用程式重新指向由具有共享記憶體之通用處理器執行。
現今的繪圖處理系統基本上包括一經組態以以一多重執行緒方式執行應用程式之一多核心繪圖處理單元(GPU,“Graphics processing unit”)。該繪圖處理系統亦包括記憶體,記憶體其中一部份由執行緒之間共享,且專屬於每個執行緒。
NVIDIA的運算統一裝置架構(CUDATM ,“Compute Unified Device Architecture”)技術提供一種C語言環境,其可使得程式師與開發者撰寫軟體應用來解決複雜的運算問題,例如視訊及音訊編碼、油氣探勘模式模擬及醫療顯像。該等應用係經組態以由一多核心GPU平行執行,且基本上依靠該多核心GPU之特定特徵。因為在一通用中央處理單元(CPU,“Central processing unit”)中未提供相同的特定特徵,使用CUDA撰寫的軟體應用無法移至一通用CPU上運行。
如前所述,本技藝中需要一種技術使得使用一平行程式化模式所撰寫要在多核心GPU上執行的應用程式可在通用CPU上運行,而不需要程式師修改該應用程式。
本發明一具體實施例提供一種使用轉譯一平行程式模式撰寫的程式由一通用CPU執行的方法。該方法包括以下步驟:接收使用一平行程式化模式所撰寫在一多核心繪圖處理單元上執行的應用程式,且區隔該應用程式成為同步化獨立指令的區域而產生一區隔的應用程式。一迴圈被插入在環繞該區隔的應用程式之至少一個區域,以產生一轉譯的應用程式來由該通用處理器執行。該迴圈遞迴在對應於目前同時由該多核心繪圖處理單元內一平行處理器所執行的一些執行緒之一協同執行緒陣列維度之上。
所揭示方法的一種好處為使用一平行程式化模式所撰寫在多核心GPU上執行的應用程式可以移至通用CPU而不需要修改。依賴該多核心GPU之特定特徵的該應用中的部份由一轉譯器轉換而由一通用CPU執行。該應用程式被區隔成同步化獨立指令的區域。該等指令被分類成收斂或發散,並複製在區域之間共享的發散記憶體參照。執行緒迴圈被插入以確保在由該通用CPU執行期間多個執行緒之間正確地共享記憶體。
在以下的說明中,許多特定細節即被提出來提供對於本發明之更為完整的瞭解。但是本技藝專業人士將可瞭解到本發明可不利用一或多個這些特定細節來實施。在其它實例中,並未說明熟知的特徵,藉以避免混淆本發明。
第一圖所示為經組態以執行使用運算統一裝置架構(computed unified device architecture,CUDA)撰寫的碼之電腦系統100的區塊圖。電腦系統100包括一CPU 102與一系統記憶體104,其經由包括一記憶體橋接器105的匯流排路徑進行通訊。記憶體橋接器105(例如可為一北橋晶片)經由一匯流排或其它通訊路徑106(例如HyperTransport鏈結)到一I/O(輸入/輸出)橋接器107連接。I/O橋接器107(例如可為一南橋晶片)接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並經由路徑106及記憶體橋接器105轉送該輸入到CPU 102。一多重執行緒化處理子系統112經由一匯流排或其它通訊路徑113(例如PCI Express(PCIE),加速繪圖埠Accelerated Graphics Port(AGP)、或HyperTransport鏈結)耦合至記憶體橋接器105。在一具體實施例中,多執行緒化處理子系統112為傳遞像素到一顯示裝置110(例如習用的CRT或LCD式螢幕)的繪圖子系統。一系統碟114亦連接至I/O橋接器107。一開關116提供I/O橋接器107與其它像是網路轉接器118與多種嵌入卡120,121之其它組件之間的連接。其它組件(未明確顯示),包括有USB或其它埠連接、光碟機、DVD機、影片錄製裝置及類似者,亦可連接至I/O橋接器107。互連接於第一圖中多種組件的通訊路徑可使用任何適當的協定來實施,例如PCI(Peripheral Component Interconnect)、PCI-E、AGP、HyperTransport,或任何其他匯流排或點對點通訊協定及不同裝置之間的連接,皆可使用如本技藝中所知的不同協定。
CPU 102操作成電腦系統100之控制處理器,其管理及協調其它系統組件之作業。特別是CPU 102發出命令來控制多執行緒化處理子系統112內平行處理器134的作業。在一些具體實施例中,CPU 102為平行處理器134寫入一串流的指令到一命令緩衝器(未示出),其可存在於系統記憶體104、子系統記憶體138或同時可由CPU 102與平行處理器134存取的其它儲存位置。平行處理器134自該命令緩衝器讀取該命令串流,並與CPU 102之作業非同步地執行命令。
系統記憶體104包括一作業系統、一裝置驅動程式103及經組態以由多執行緒化處理子系統112所執行之CUDA碼101。CUDA碼101加入想要在多執行緒化處理子系統112上執行的程式化指令。在本說明內容中,碼可代表可以使用一處理器執行的任何電腦碼、指令及/或函數。例如在多種具體實施例中,該碼可以包括C碼、C++碼等。在一具體實施例中,該碼可以包括一電腦語言的語言延伸(例如C,C++等的延伸)。
該作業系統提供細部的指令來管理及協調電腦系統100之運作。裝置驅動程式103提供細部的指令來管理及協調多執行緒化處理子系統112之運作,特別是平行處理器134。再者,裝置驅動程式103可以提供編譯能力來產生對於平行處理器134特別最佳化的機器碼。裝置驅動程式103可配合NVIDIA公司提供的CUDATM 架構來提供。
在一具體實施例中,多執行緒化處理子系統112加入一或多個平行處理器134,平行處理器134可使用例如一或多個積體電路裝置來實施,例如可程式化處理器、特定應用積體電路(ASIC,“Application specific integrated circuit”)。平行處理器134可以包括對於繪圖及視訊處理最佳化的電路,其包括例如視訊輸出電路及一繪圖處理單元(GPU)。在另一具體實施例中,多執行緒化處理子系統112可整合一或多個其它系統元件,例如記憶體橋接器105、CPU 102、及I/O橋接器107而形成一晶片上系統(SoC,“System on chip”)。一或多個平行處理器134可以輸出資料到顯示裝置110,或每個平行處理器134可以輸出資料到一或多個顯示裝置110。
平行處理器134較佳地是實施一包括一或多個處理核心之高度平行處理器,每一核心能夠同步執行大量的執行緒,其中每一執行緒為一程式的實例,例如碼101。平行處理器134可被程式化來執行關於許多種應用之處理工作,其包括但不限於線性及非線性資料轉換、視訊及/或音訊資料的過濾、模擬作業(例如應用物理定律來決定物體的位置、速度及其它屬性)、影像呈現作業(例如棋盤式遮影器、頂點遮影器、幾何遮影器及/或像素遮影器程式)等等。平行處理器134可將來自系統記憶體104及/或本地子系統記憶體138之資料轉移到本地(晶片上)記憶體、處理該資料及將結果資料寫回到系統記憶體104及/或子系統記憶體138,其中這些資料可由其它系統組件存取,其中包括CPU 102或另一個多執行緒化處理子系統112。
一平行處理器134可具有任何數量的子系統記憶體138,亦可不包括子系統記憶體138,且可用任何組合使用子系統記憶體138及系統記憶體104。例如,一平行處理器134在一統一記憶體架構(UMA,“Unified memory architecture”)具體實施例中的一繪圖處理器。在這些具體實施例中,將可提供少數或沒有專屬的子系統記憶體138,且平行處理器134將專有地或大致專有地使用系統記憶體104。在UMA具體實施例中,一平行處理器134可被整合到一橋接器晶片中,或處理器晶片中,或提供成具有一高速鏈結(例如PCI-E)之離散晶片,其透過橋接器晶片或其它通訊手段連接平行處理器134到系統記憶體104。
如上所述,在一多執行緒化處理子系統112中可以包括任何數目的平行處理器134。例如,多個平行處理器134可被提供在一單一嵌入卡,或多個嵌入卡可被連接至通訊路徑113,或一或多個平行處理器134可被整合到一橋接器晶片中。當存在有多個平行處理器134時,那些平行處理器134可平行地作業而以高於一單一平行處理器134所可能的流量來處理資料。加入有一或多個平行處理器134之系統可用多種組態及形式因子來實施,其中包括桌上型、膝上型、或掌上型個人電腦、伺服器、工作站、遊戲主機、嵌入式系統及類似者。
在平行處理器134的一些具體實施例中,使用單一指令、多重資料(SIMD,“Single-instruction,multiple-data”)指令發行技術來支援大量執行緒之平行執行,而不需要提供多個獨立指令單元。在其它具體實施例中,使用單一指令、多重執行緒(SIMT,“Single-instruction,multiple-thread”)技術來支援大量概略同步化的執行緒之平行執行。不像是SIMD執行規範,其中所有處理引擎基本上執行相同的指令,SIMT執行允許不同的執行緒更立即地經由一給定的執行緒程式依循發散的執行路徑。本技藝專業人士將可瞭解到一SIMD處理規範代表一SIMT處理規範的一功能子集合。在平行處理器134內的功能單元支援多種運算,其中包括整數及浮點數算術(例如加法及乘法)、比較運算、布林運算(AND,OR,XOR)、位元偏位,及多種代數函數的運算(例如平面內插、三角函數、指數及對數函數等)。
傳送到平行處理器134之一處理核心(未示出)內一特定處理單元(未示出)之該系列的指令構成一執行緒,如先前此處所定義者,以及橫跨一處理核心內該等處理單元中一些並行執行之執行緒的集合即在此處稱之為「執行緒群組」。如此處所使用者,一「執行緒群組」代表對於不同輸入資料執行相同程式的一群組之執行緒,其將該群組的每個執行緒指定到一處理核心中一不同的處理單元。一執行緒群組可以包括比處理器單元之數目要少的執行緒,其中一些處理單元在當該執行緒群組正在被處理時的循環期間將為閒置。一執行緒群組亦可包括比處理單元之數目要更多的執行緒,其中處理將發生於多個時脈循環中。
因為每個處理核心可以並行支援最高到G個執行緒群組,接著最高到G x M個執行緒群組可在任何給定時間時在一處理核心中執行,其中M為在一平行處理器134中處理核心的數目。此外,在一處理核心內相同時間可以啟動複數相關的執行緒群組(在不同的執行階段)。此執行緒群組的集合在此稱之為「協同執行緒陣列(CTA,“Cooperative thread array”)」。一CTA的大小概略由程式師與CTA可以使用的硬體資源之數量所決定,例如記憶體或暫存器。CUDA程式化模式反應出GPU加速器的系統架構。一專屬本地位址空間可用於每個執行緒,且使用一共享的每個CTA位址空間來在一CTA內執行緒之間傳送資料。處理核心亦可存取到晶片外「通用」記憶體,其可包括例如子系統記憶體138及/或系統記憶體104。
一CUDA應用程式之主控部份使用習用的方法與工具編譯,而核心函數指定CTA處理。在最高階處,該CUDA記憶體模式隔開該主控與裝置記憶體空間,使得主控碼與核心碼僅可直接存取它們個別的記憶體空間。應用程式化介面(API,“application programming interface”)功能允許在該主機與裝置記憶體空間之間資料的複製。在CUDA程式化模式之共享記憶體的CPU執行當中,一控制CPU執行緒可以與該等平行CTA平行地執行,而不會有可能的資料競賽。該主機記憶體空間由C程式化語言定義,而該裝置記憶體空間被指定成通用、常數、本地、共享及結構(texture)。所有執行緒皆可存取該通用、常數及結構記憶體空間。如前所述,存取到該本地空間係限制於一單一執行緒,而存取到該共享空間係限制於在一CTA中的執行緒。此記憶體模式鼓勵使用低遲滯存取,並鼓勵基本上具有較長遲滯之大記憶空間能更具智慧地被使用。
一CUDA程式,例如碼101,其基本上組織成一維、二維或三維(例如x,y及z)中CTA的一組同步或非同步執行。一三變數組合索引獨特地辨識一執行緒區塊內的執行緒。執行緒區塊本身由一隱含定義的二變數組合變數所區別。這些索引之範圍係在運轉時間(run time)階段定義,且該運轉時間環境檢查該等索引是否符合任何硬體限制。每個CTA可由一平行處理器134與其它CTA平行地執行。許多CTA可與執行一或多個CTA之每個平行處理器134平行地運轉。該運轉時間環境負責視需要同步或非同步地管理CUDA碼101之執行。在一CTA內的執行緒藉由使用共享的記憶體,及與稱之為synchthreads()之一障礙同步化基元進行溝通與同步。CUDA保證在一執行緒區塊內的執行緒將同時活躍,並提供在一執行緒區塊內執行緒之結構來執行快速障礙同步化及當地資料共享。 對在一CTA內不同的執行緒區塊(由一或多維度所定義)的產生、執行或解除不會強加順序。此外,平行的CTA並不允許存取到系統呼叫,包括I/O。該CUDA程式化模式僅在平行CTA之間實行通用同步化,並提供在一CTA內區塊之間有限的通訊之固有原子作業。
每個執行緒的主體,稱之為核心,其使用CUDA所指定,其可使用記憶體模式註解及該障礙同步化基元由標準的C語言所表示。一CUDA程式的語義為每個核心由一CTA中所有執行緒執行,執行順序為尊重由該障礙同步化基元所暗指的記憶體順序。特別是,在一CTA內於一障礙同步化基元之前發生的所有共享記憶體參照必須在於該障礙同步化基元之後發生的任何共享記憶體參照之前完成。
在核心碼中一障礙同步化基元之每個實例概念上代表一獨立邏輯障礙,且必須視為靜態。當CUDA執行緒可以採用該結構的不同分支時,在一if-else結構之兩路徑中引發一障礙同步化基元係不合法的。雖然在一執行緒區塊內的所有執行緒將到達該等同步化基元之一,它們代表獨立的障礙,每一障礙需要該等執行緒之所有或是無執行緒到達它。因此,這種核心將不會正確地執行。更概言之,在如果一同步化基元包含在對於一執行緒區塊內不同執行緒有不同行為的任何控制流程結構內時,CUDA碼無法保證正確地執行。
第二圖為根據本發明一具體實施例的一電腦系統200之區塊圖。電腦系統100包括一CPU 202及一系統記憶體204,系統記憶體204與CPU202經由包括一記憶體橋接器205之一匯流排路徑進行通訊。記憶體橋接器205(例如可為一北橋晶片)經由一匯流排或其它通訊路徑106(例如HyperTransport鏈結)連接到一I/O(輸入/輸出)橋接器107。CPU 202產生在顯示裝置210(例如一習用CRT或LCD螢幕)上顯示的輸出。
多執行緒化處理子系統112未包括在電腦系統200中,且CUDA碼101並未轉換成由一通用處理器執行,例如CPU 202。CUDA碼101被轉換成由多執行緒化處理子系統112執行,並使用轉譯器(translator)220轉譯來產生轉譯的程式碼201,轉譯程式碼201並不包括該障礙同步化基元。為了CPU 202運轉由碼101代表的該程式,碼101必須先被轉譯成轉譯程式碼201。然後該轉譯的碼可由編譯器225編譯來由CPU 202執行。編譯器(compiler)225可執行為CPU 202所特定的最佳化。轉譯該碼代表轉換以一第一電腦語言撰寫的程式碼成為一第二電腦語言。編譯該碼代表轉換以一電腦語言撰寫的程式碼(例如原始碼)成為另一種電腦語言(例如物件碼)。轉譯器220係配合第三A圖說明,而編譯器225配合第四圖說明。編譯器225可包括在一裝置驅動程式203之內,其經組態以為碼101、碼201與CPU 202之間的介面。一運轉時間環境227係經組態以實施該編譯碼的功能,例如輸入及輸出、記憶體管理等等。運轉時間環境227亦啟動編譯碼以由CPU 202執行。轉譯器220執行最佳化轉換來橫跨一CUDA執行緒群組之微細粒度(fine-grained)的執行緒來序列化作業成為一單一CPU執行緒,而運轉時間環境227排程執行緒群組,成為由CPU 202之平行處理之工作單元。
被設計成在GPU上運轉的CUDA應用程式移轉由通用CPU執行之主要障礙係為平行化的粒度。習用CPU並不支援一單一CUDA CTA所需要的數百個硬體執行緒內容。因此,在一通用CPU上實施該CUDA程式化模式之一系統的主要目標係要分散該工作層次平行化到該等可使用的CPU核心。同時,該系統必須整合在一工作內該等微執行緒成為一單一CPU執行緒來防止過度的排程管理負擔,以及頻繁的核心間同步化。
第三A圖為根據本發明一具體實施例中用於轉譯被撰寫成由一多核心繪圖處理單元(如多執行緒化處理子系統112)來執行的碼101成為由一通用處理器來執行的碼201之方法步驟的流程圖。轉譯器220係經組態以執行在第三A圖中所示的一或多個步驟,藉以保持在碼101中使用的該障礙同步化基元語義。轉譯器220藉由區隔環繞該障礙同步化基元的碼101來「展現(unroll)」該等平行執行緒,降低使用共享的狀態,改善記憶體存取之參照的本地性,並插入執行緒迴圈來轉換CUDA特定碼來由一通用處理器執行。其有可能達成良好的執行效能由CPU202來執行碼201,而不需要改變目標在於由一多執行緒化處理子系統112執行的CUDA碼101。當編譯碼201以供執行時,編譯器225可利用CPU 202所提供的向量指令能力並實施最佳化。
在步驟300中,轉譯器220接收被撰寫成由一多核心GPU執行的碼101(例如CUDA碼101),例如多執行緒化處理子系統112或一包括一或多個平行處理器134的處理器。在步驟300中接收的碼可表示成由邊緣連接的基本區塊節點所構成的一控制流程圖。每個基本區塊指定由目標環境(如CPU 202)執行的該等作業。在步驟305中,轉譯器220區隔環繞該障礙同步化基元的CUDA碼101來產生區隔的碼。該區隔的碼係顯示在第三B圖及第三C圖中,且該區隔處理配合那些圖面來說明。一同步化隔間為一碼的區域,在其中該等作業的順序完全由該隔間內該等基本區塊之控制流程與資料流程特性所決定。一隔間之性質為一執行緒迴圈可被插入成環繞一隔間來運轉該等平行執行緒。該控制流程圖可被用於藉由取代具有一邊緣之每個synchthreads基元、分開一基本區塊碼成為不同隔間而產生一同步化隔間控制流程圖。
在步驟310中,該區隔的碼被分類使得每個敘述被辨識成收斂或發散。該區隔的碼可包括表式及敘述。一表式為可以包含常數、隱含threadID、及由該程式師產生的有名稱之變數的運算,但不具有副作用或指定。一簡單敘述係定義成造成一單一指定的一運算表式。一般性敘述亦可代表一障礙,控制流程條件化或迴圈結構,或一敘述的序列區塊。該等CTA維度x,y及z經由該碼傳遞來決定每個作業是否根據一或多個該等CTA維度。參照維度x,y及/或z之threadID(執行緒識別)之作業可視為發散,因為參照一CTA維度的一執行緒可在執行期間由相同CTA中其它執行緒所背離。例如,根據threadID.x之作業對於x維度為發散。另一個不根據threadID.x之作業在x維度上為收斂。發散敘述需要它們所參照之每個CTA維度的執行緒迴圈。
在步驟315中,該區隔的碼使用該分類資訊來最佳化效能以產生最佳化的碼。例如,在一隔間內的指令可被重新排序來融合作業,所以具有相同分類的那些作業被群組在一起,並可落在步驟325中所插入的相同執行緒迴圈內。作業被排序使得那些在它們變量向量中具有較低threadID維度的作業會在依據更多threadID維度的該等作業之前。此重新排序為有效,因為一敘述必須具有一變量向量,其為所依據的該等敘述之變量向量的超集合。因此在它們的變量向量中僅具有一個維度之敘述不能夠根據具有一不同維度或在它們的變量向量中超過一個維度之任何敘述。
在步驟320中,在該最佳化的碼中執行緒-本地記憶體參照可視需要被升級到陣列參照,以確保一物件的每個實例具有一獨特位置,在該位置儲存一數值。特別是,由一隔間承載到另一個隔間之資料需要被複製,所以其可在每個隔間中使用。滿足以下條件之一的變數被升級到一陣列參照:具有一跨隔間的依賴性(被指定在一個隔間中,而在另一個隔間中被參照)之本地變數。
在步驟320中,轉譯器220升級執行緒-本地記憶體參照到陣列參照。表1中所示的程式包括一同步化障礙基元及發散參照。
表1中所示的程式被區隔到在該synchthreads基元之前的一第一隔間及在該synchthreads基元之後一第二隔間當中。該第二隔間包括在該第一隔間中運算且依據一CTA維度的參照(leftIndex及rightIndex)。如果該等發散參照並未被升級,該第二隔間將錯誤地使用由該第一隔間的最後遞迴所運算出的該等數值。該第二隔間應該使用該第一隔間的threadID.x之每個相對應遞迴所運算的數值。為了確保該運算為正確,該等發散參照被升級,如表2中所示。
在步驟325中,該等執行緒迴圈對於包含threadID維度在它們的變量向量中之那些敘述來產生。可適性迴圈巢套係用於同時評估同等於迴圈相互改變、迴圈分裂及迴圈不變量移除的轉換來達成最佳的冗餘移除。該巢化迴圈係在該threadID三變數組之每個維度的數值之上動態地產生來最佳地配合該應用程式,而非假設一特定迴圈巢套,並基於該巢套評估該應用程式。在該等敘述於步驟315中被排序之後,迴圈可對於僅環繞那些敘述的threadID維度來產生,其包含該維度在它們的變量向量中。為了移除迴圈管理負擔,轉譯器220可融合相鄰的敘述群組,其中之一具有為另一個之子集合的一變量向量。
第三B圖為根據本發明一具體實施例中被轉譯成區隔的碼350的輸入碼101之概念圖。輸入碼330係經組態以由多執行緒化處理子系統112執行,並包括由同步化障礙指令336所隔開的碼序列331及332。在一CTA中所有執行緒將在該等執行緒之任一者開始執行碼序列332之前完成執行碼序列331。轉譯器220區隔輸入碼330來產生區隔的碼350,其中隔間351包括由碼序列331所代表的該等指令,且隔間352包括由碼序列332代表的該等指令。一執行緒迴圈353被插入環繞隔間352來確保該同步化語義在當區隔的碼350由一本身並不支援該同步化障礙指令之通用處理器執行時可被維持。在此範例中,碼隔間351包括收斂參照,且隔間352可包括發散參照。因此,執行緒迴圈353被插入環繞隔間352。
在第三A圖的步驟325中,轉譯器220插入執行緒迴圈(例如執行緒迴圈353)到該最佳化的碼當中,藉此產生被轉譯成由CPU 202執行之碼201。每個隔間可具有對於每個CTA維度插入的一執行緒迴圈。一同步化區隔與執行緒迴圈插入的範例顯示在表3及4中。表3中所示的程式被轉譯成表4所示的程式。
表3
表3中的程式使用明確同步化來確保一CTA中多個執行緒之間正確的記憶體共享。轉譯器220區隔該程式成為兩個隔間,其每一者係依據x CTA維度。因此,一執行緒迴圈被插入環繞該等兩個隔間之每一者來確保該轉譯的程式以正確的順序執行該等作業。
用於轉譯一程式來由一通用處理器執行之較簡單的技術對於每個CTA維度插入明確的執行緒迴圈,所以其不需要決定在該相同隔間內用於參照的維度依賴性。例如,表5中所示的程式被轉譯成表6中所示的程式。請注意到插入在表5中的一或多個執行緒可不需要,因為該程式被產生而不需要決定該維度依賴性。
第三C圖為根據本發明一具體實施例中被轉譯成最佳化的碼360之輸入碼333的概念圖。輸入碼333係經組態以由多執行緒化處理子系統112執行,並包括由同步化障礙指令335所分開的碼序列334及338。在一CTA中所有的執行緒將在該等執行緒中任一者開始執行碼序列338之前完成執行碼序列334。轉譯器220區隔輸入碼333來產生區隔的碼360,其中隔間361包括由碼序列334代表的該等指令,且隔間362,364及365包括由碼序列338所代表的該等指令。
隔間362包括在一第一CTA維度中為發散的指令之第一部份。隔間364包括為收斂的指令之一第二部份。隔間365包括在一第二CTA維度中為發散的指令之第三部份。一執行緒迴圈363被插入環繞隔間362來確保該同步化語義在當區隔的碼360由本身並不支援該同步化障礙指令之一通用處理器執行時可被維持。執行緒迴圈363在該第一CTA維度之上遞迴。一執行緒迴圈366被插入環繞隔間365來在該第二CTA維度之上遞迴。
表7所示為一範例性CUDA核心,且表8所示為轉譯該CUDA核心來由一通用處理器執行。該範例性核心相乘一列表的小矩陣。每個執行緒區塊自該列表中運算出一小型矩陣乘法運算,而每個執行緒運算其區塊的該結果矩陣的一元素。
請注意到表7之第9行的敘述具有一(x,y)的變量像量,因為col係根據x維度,而row係根據y維度。Z維度從未使用到,所以不插入迴圈來在z之上遞迴。其可使用典型的成本分析技術來決定例如表7中所示之範例性核心中的敘述5及6的情況。因為每一者僅依據一個threadID維度,選擇該等x及y索引迴圈之巢套順序將強迫一敘述之冗餘執行,或是在該隔間的主要迴圈巢套之外的一冗餘迴圈。
第四圖為根據本發明一具體實施例中該轉譯的碼201由一通用處理器(例如CPU 202)執行之方法步驟的流程圖。在步驟400中,編譯器225編譯轉譯的碼201,並視需要執行CPU特定的最佳化,以產生編譯的碼。在步驟405中,在CPU 202中可使用的執行核心400之數目由裝置驅動程式203決定。轉譯的碼201可被自動地調整來在可使用的執行核心上執行來改善效能。在步驟410中,運轉時間還境227或裝置驅動程式203設置CPU 202來致能將要執行轉譯的碼201之執行核心的數目。
運算時間環境227可以產生一些作業系統(OS,“operating system”)運轉時間執行緒,其可由一環境變數所控制。在預設上,在該系統中核心的數目可做為OS運轉時間執行緒之數目。在步驟410中,要被啟動的CUDA執行緒之數目可被評估,並統計式地區隔成運轉時間執行緒之數目。每個運轉時間執行緒依序地執行該編譯的碼之一部份,並在一障礙上等待。當所有運轉時間執行緒到達該障礙時,該CTA已經完成。在步驟415中,運轉時間環境227或裝置驅動程式203啟動該編譯的碼來由CPU 202執行。
轉譯器220、編譯器225及運轉時間環境227係用於轉換CUDA應用程式成為由一通用CPU執行的碼。該CUDA程式化模式支援整體同步工作平行化,其中每個工作由微細粒度的SPMD執行緒所組成。該CUDA程式化模式的使用已經受限於願意撰寫特殊化的碼來由GPU執行的程式師。此特殊化的碼可被轉換成由一通用CPU執行,而不需要該程式師重新撰寫該CUDA應用程式。由CUDA支援的三個關鍵為SPMD執行緒區塊、障礙同步化及共享的記憶體。轉譯器220序列化橫跨一CUDA執行緒區塊的微細粒度執行緒之作業成為一單一CPU執行緒,並執行最佳化轉換來轉換一CUDA應用程式。
前述係關於本發明之具體實施例,本發明之其它及進一步的具體實施例皆可進行,而並不背離其基本範疇。例如,本發明之態樣可實施在硬體或軟體中,或是硬體及軟體的組合中。本發明一具體實施例可以實施成由一電腦系統使用的一程式產品。該程式產品的程式定義該等具體實施例的功能(包括此處所述的方法),並可包含在多種電腦可讀取儲存媒體上。例示性的電腦可讀取儲存媒體包括但不限於:(i)永久儲存資訊之不可寫入儲存媒體(例如在一電腦內唯讀記憶體裝置,例如可由光碟機讀取的CD-ROM碟片,快閃記憶體,ROM晶片,或任何其它種類的固態非揮發性半導體記憶體);及(ii)儲存可改變資訊之可寫入儲存媒體(例如在一磁碟機内的軟碟片、或硬碟機、或任何種類的固態隨機存取半導體記憶體)。這些電腦可讀取儲存媒體當承載關於本發明之該等功能的電腦可讀取指令時為本發明之具體實施例。因此,本發明之範疇係由以下的該等申請專利範圍所決定。
100...電腦系統
101...碼
102...中央處理單元
103...裝置驅動程式
104...系統記憶體
105...記憶體橋接器
106...通訊路徑
107...輸入/輸出橋接器
108...輸入裝置
110...顯示裝置
112...多執行緒化處理子系統
113...通訊路徑
114...系統碟
116...開關
118...網路轉接器
120...嵌入卡
121...嵌入卡
134...平行處理器
138...子系統記憶體
200...電腦系統
201...碼
202...中央處理單元
203...裝置驅動程式
204...系統記憶體
205...記憶體橋接器
210...顯示裝置
220...轉譯器
225...編譯器
227...運轉時間環境
330...輸入碼
331...碼序列
332...碼序列
333...輸入碼
334...碼序列
335...障礙指令
336...障礙指令
338...碼序列
350...區隔的碼
351...隔間
352...隔間
353...執行緒迴圈
360...最佳化的碼
361...隔間
362...隔間
363...執行緒迴圈
364...隔間
365...隔間
366...執行緒迴圈
為使可以詳細瞭解本發明上述特徵之方式中,本發明的一更為特定的說明簡述如上,其可藉由參照到具體實施例來進行,其中一些例示於所附圖面中。但是其可注意到,所附圖面僅例示本發明的典型具體實施例,因此其並非要做為本發明之範疇的限制,其可允許其它同等有效的具體實施例。
第一圖為一電腦系統之區塊圖;
第二圖為根據本發明一具體實施例的一電腦系統之區塊圖;
第三A圖為根據本發明一具體實施例中用於轉譯被撰寫成由一多核心繪圖處理單元來執行的碼成為由一通用處理器來執行的碼之方法步驟的流程圖;
第三B圖為根據本發明一具體實施例中被轉譯成區隔的碼之輸入碼的概念圖;
第三C圖為根據本發明一具體實施例中被轉譯成最佳化碼的輸入碼之概念圖;及
第四圖為根據本發明一具體實施例中該轉譯的碼由一通用處理器執行之方法步驟的流程圖。

Claims (10)

  1. 一種經組態以轉譯一應用程式來由一通用處理器執行的運算系統,其包含:一處理器,其經組態以執行一轉譯器;及一系統記憶體,其耦合至該處理器,並經組態以儲存該轉譯器、一第一應用程式及一第二應用程式,該第一應用程式使用一平行程式化模式撰寫來在一多核心繪圖處理單元上執行,該第二應用程式經組態以由該通用處理器執行,及該轉譯器經組態以:接收該第一應用程式;區隔該第一應用程式成為同步化獨立指令之複數區域來產生一區隔的應用程式;及插入一迴圈環繞該區隔的應用程式之至少一區域來產生該第二應用程式,其中該迴圈在對應於在該多核心繪圖處理單元內一平行處理器所並行執行的一些執行緒之一協同式執行緒陣列維度之上遞迴。
  2. 如申請專利範圍第1項之運算系統,其中該轉譯器更經組態以辨識該應用程式內一同步化障礙指令。
  3. 如申請專利範圍第2項之運算系統,其中該區隔的應用程式之一第一區域包括在該同步化障礙指令之前的指令,而該區隔的應用程式之一第二區域包括在該同步化障礙指令之後的指令。
  4. 如申請專利範圍第3項之運算系統,其中插入該迴圈的該步驟包括插入一第一迴圈環繞該區隔的應用程式之該第一區域,以確保在一協同式執行緒陣列中所有執行緒,將在該協同式執行緒陣列中該等執行緒之任一者開始執行該區隔的應 用程式之該二區域之前,完成該區隔的應用程式之第一區域的執行。
  5. 如申請專利範圍第2項之運算系統,其中該第一應用程式係表示成包括由邊界連接的基本區塊節點的一控制流程圖。
  6. 如申請專利範圍第5項之運算系統,其中該轉譯器更經組態以一邊界,來取代該同步化障礙指令來分開該等基本區塊節點成為對應於一第一區域的一第一基本區塊節點與對應於一第二區域的一第二基本區塊節點。
  7. 如申請專利範圍第1項之運算系統,其中該轉譯器更經組態以分類該區隔的應用程式來辨識每個敘述相對於該協同式執行緒陣列維度為收斂或發散。
  8. 如申請專利範圍第1項之運算系統,其中該轉譯器更經組態以插入額外的迴圈環繞該區隔的應用程式之至少一區域以產生該第二應用程式,其中該等額外迴圈在不同的協同式執行緒陣列維度之上遞迴。
  9. 如申請專利範圍第1項之運算系統,其中該第一應用程式為一CUDA(運算統一裝置架構)應用程式。
  10. 如申請專利範圍第1項之運算系統,另包含一運轉時間環境,其組態該通用處理器來致能該通用處理器內一些執行核心來執行該第二應用程式。
TW098110979A 2008-04-09 2009-04-02 經組態以轉譯一應用程式來由一通用處理器執行的運算裝置 TWI437491B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US4370808P 2008-04-09 2008-04-09
US12/407,711 US8612732B2 (en) 2008-04-09 2009-03-19 Retargetting an application program for execution by a general purpose processor

Publications (2)

Publication Number Publication Date
TW200947302A TW200947302A (en) 2009-11-16
TWI437491B true TWI437491B (zh) 2014-05-11

Family

ID=41164945

Family Applications (2)

Application Number Title Priority Date Filing Date
TW098110979A TWI437491B (zh) 2008-04-09 2009-04-02 經組態以轉譯一應用程式來由一通用處理器執行的運算裝置
TW098110978A TWI423133B (zh) 2008-04-09 2009-04-02 設定為處理轉譯應用程式的運算系統

Family Applications After (1)

Application Number Title Priority Date Filing Date
TW098110978A TWI423133B (zh) 2008-04-09 2009-04-02 設定為處理轉譯應用程式的運算系統

Country Status (4)

Country Link
US (5) US9678775B1 (zh)
JP (2) JP4984306B2 (zh)
CN (2) CN101556543B (zh)
TW (2) TWI437491B (zh)

Families Citing this family (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US8572590B2 (en) * 2008-09-17 2013-10-29 Reservoir Labs, Inc. Methods and apparatus for joint parallelism and locality optimization in source code compilation
US8930926B2 (en) * 2008-02-08 2015-01-06 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
US8661422B2 (en) * 2008-02-08 2014-02-25 Reservoir Labs, Inc. Methods and apparatus for local memory compaction
US9858053B2 (en) 2008-02-08 2018-01-02 Reservoir Labs, Inc. Methods and apparatus for data transfer optimization
US8572595B1 (en) 2008-02-08 2013-10-29 Reservoir Labs, Inc. Methods and apparatus for aggressive scheduling in source code compilation
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8866827B2 (en) * 2008-06-26 2014-10-21 Microsoft Corporation Bulk-synchronous graphics processing unit programming
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
US8688619B1 (en) 2009-03-09 2014-04-01 Reservoir Labs Systems, methods and apparatus for distributed decision processing
US9185020B2 (en) * 2009-04-30 2015-11-10 Reservoir Labs, Inc. System, apparatus and methods to implement high-speed network analyzers
US8667474B2 (en) * 2009-06-19 2014-03-04 Microsoft Corporation Generation of parallel code representations
US8892483B1 (en) 2010-06-01 2014-11-18 Reservoir Labs, Inc. Systems and methods for planning a solution to a dynamically changing problem
US8584103B2 (en) 2010-06-17 2013-11-12 International Business Machines Corporation Reducing parallelism of computer source code
US8756590B2 (en) * 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
JP5059174B2 (ja) * 2010-08-10 2012-10-24 株式会社東芝 プログラム変換装置、およびそのプログラム
WO2012037735A1 (en) * 2010-09-26 2012-03-29 Mediatek Singapore Pte. Ltd. Method for performing video processing based upon a plurality of commands, and associated video processing circuit
CN101963916A (zh) * 2010-09-28 2011-02-02 中国科学院地质与地球物理研究所 编译处理方法及装置
US8914601B1 (en) 2010-10-18 2014-12-16 Reservoir Labs, Inc. Systems and methods for a fast interconnect table
US9134976B1 (en) 2010-12-13 2015-09-15 Reservoir Labs, Inc. Cross-format analysis of software systems
US20120159090A1 (en) * 2010-12-16 2012-06-21 Microsoft Corporation Scalable multimedia computer system architecture with qos guarantees
KR101738641B1 (ko) 2010-12-17 2017-05-23 삼성전자주식회사 멀티 코어 시스템의 프로그램 컴파일 장치 및 방법
US20120177119A1 (en) * 2011-01-07 2012-07-12 Sony Corporation Faster motion estimation in an avc software encoder using general purpose graphic process units (gpgpu)
WO2012157786A1 (ja) * 2011-05-19 2012-11-22 日本電気株式会社 並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム
US8966461B2 (en) * 2011-09-29 2015-02-24 Advanced Micro Devices, Inc. Vector width-aware synchronization-elision for vector processors
US9489180B1 (en) 2011-11-18 2016-11-08 Reservoir Labs, Inc. Methods and apparatus for joint scheduling and layout optimization to enable multi-level vectorization
WO2013081596A1 (en) * 2011-11-30 2013-06-06 Intel Corporation Efficient implementation of rsa using gpu/cpu architecture
WO2013092292A1 (en) 2011-12-21 2013-06-27 Dolby International Ab Audio encoder with parallel architecture
US9830133B1 (en) 2011-12-12 2017-11-28 Significs And Elements, Llc Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation
US9817668B2 (en) 2011-12-16 2017-11-14 Nvidia Corporation Batched replays of divergent operations
US9715413B2 (en) 2012-01-18 2017-07-25 Nvidia Corporation Execution state analysis for assigning tasks to streaming multiprocessors
US9069609B2 (en) 2012-01-18 2015-06-30 Nvidia Corporation Scheduling and execution of compute tasks
US9361079B2 (en) * 2012-01-30 2016-06-07 Nvidia Corporation Method for compiling a parallel thread execution program for general execution
US10152329B2 (en) * 2012-02-09 2018-12-11 Nvidia Corporation Pre-scheduled replays of divergent operations
US9529575B2 (en) * 2012-02-16 2016-12-27 Microsoft Technology Licensing, Llc Rasterization of compute shaders
US9329877B2 (en) 2012-03-18 2016-05-03 Microsoft Technology Licensing, Llc Static verification of parallel program code
US9798588B1 (en) 2012-04-25 2017-10-24 Significs And Elements, Llc Efficient packet forwarding using cyber-security aware policies
US9292265B2 (en) * 2012-05-09 2016-03-22 Nvidia Corporation Method for convergence analysis based on thread variance analysis
US10936569B1 (en) 2012-05-18 2021-03-02 Reservoir Labs, Inc. Efficient and scalable computations with sparse tensors
US9684865B1 (en) 2012-06-05 2017-06-20 Significs And Elements, Llc System and method for configuration of an ensemble solver
EP2880531B1 (en) 2012-08-02 2017-11-08 Siemens Corporation Pipelining for cyclic control systems
US9142005B2 (en) * 2012-08-20 2015-09-22 Nvidia Corporation Efficient placement of texture barrier instructions
KR101382945B1 (ko) 2012-10-17 2014-04-09 인하대학교 산학협력단 Gpu 병렬 검색을 통한 r-트리 계열의 계층형 색인 구조의 범위 질의 가속화 방법
US20140143755A1 (en) * 2012-11-20 2014-05-22 Nvidia Corporation System and method for inserting synchronization statements into a program file to mitigate race conditions
US9134979B2 (en) * 2013-02-06 2015-09-15 Nvidia Corporation Convergence analysis in multithreaded programs
US9015656B2 (en) * 2013-02-28 2015-04-21 Cray Inc. Mapping vector representations onto a predicated scalar multi-threaded system
US9442755B2 (en) * 2013-03-15 2016-09-13 Nvidia Corporation System and method for hardware scheduling of indexed barriers
KR102062208B1 (ko) * 2013-05-03 2020-02-11 삼성전자주식회사 멀티스레드 프로그램 코드의 변환 장치 및 방법
US9223550B1 (en) * 2013-10-17 2015-12-29 Google Inc. Portable handling of primitives for concurrent execution
US10326448B2 (en) 2013-11-15 2019-06-18 Scientific Concepts International Corporation Code partitioning for the array of devices
US9698791B2 (en) 2013-11-15 2017-07-04 Scientific Concepts International Corporation Programmable forwarding plane
US9294097B1 (en) 2013-11-15 2016-03-22 Scientific Concepts International Corporation Device array topology configuration and source code partitioning for device arrays
CN103716574A (zh) * 2013-12-13 2014-04-09 乐视致新电子科技(天津)有限公司 一种信号处理方法及数字电视
US9612811B2 (en) * 2014-01-21 2017-04-04 Nvidia Corporation Confluence analysis and loop fast-forwarding for improving SIMD execution efficiency
US9658823B2 (en) * 2014-02-25 2017-05-23 Nec Corporation Source-to-source compiler and run-time library to transparently accelerate stack or queue-based irregular applications on many-core architectures
US9400685B1 (en) * 2015-01-30 2016-07-26 Huawei Technologies Co., Ltd. Dividing, scheduling, and parallel processing compiled sub-tasks on an asynchronous multi-core processor
US11550632B2 (en) * 2015-12-24 2023-01-10 Intel Corporation Facilitating efficient communication and data processing across clusters of computing machines in heterogeneous computing environment
US10387988B2 (en) * 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10552211B2 (en) * 2016-09-02 2020-02-04 Intel Corporation Mechanism to increase thread parallelism in a graphics processor
EP3336692B1 (en) * 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
US10489204B2 (en) 2017-01-31 2019-11-26 Samsung Electronics Co., Ltd. Flexible in-order and out-of-order resource allocation
US10191745B2 (en) * 2017-03-31 2019-01-29 Intel Corporation Optimized call-return and binary translation
US10489877B2 (en) * 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US10474458B2 (en) * 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10528479B2 (en) * 2017-06-02 2020-01-07 Huawei Technologies Co., Ltd. Global variable migration via virtual memory overlay technique for multi-version asynchronous dynamic software update
KR101948135B1 (ko) 2017-07-31 2019-02-14 서울대학교산학협력단 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템
US10599482B2 (en) * 2017-08-24 2020-03-24 Google Llc Method for intra-subgraph optimization in tuple graph programs
US10831505B2 (en) 2018-09-29 2020-11-10 Intel Corporation Architecture and method for data parallel single program multiple data (SPMD) execution
US11093250B2 (en) * 2018-09-29 2021-08-17 Intel Corporation Apparatus and method for gang invariant operation optimizations using dynamic evaluation
US10776110B2 (en) 2018-09-29 2020-09-15 Intel Corporation Apparatus and method for adaptable and efficient lane-wise tensor processing
US10915328B2 (en) 2018-12-14 2021-02-09 Intel Corporation Apparatus and method for a high throughput parallel co-processor and interconnect with low offload latency
CN110209509B (zh) * 2019-05-28 2021-08-17 北京星网锐捷网络技术有限公司 多核处理器间的数据同步方法及装置
EP3812885A1 (de) * 2019-10-24 2021-04-28 dspace digital signal processing and control engineering GmbH Integrierte simulationscode- und produktionscodegenerierung
CN111078412B (zh) * 2019-12-12 2023-03-14 中山大学 一种通过api截获对gpu进行资源管理的方法
US11593157B2 (en) 2020-02-05 2023-02-28 Nec Corporation Full asynchronous execution queue for accelerator hardware

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5161216A (en) 1989-03-08 1992-11-03 Wisconsin Alumni Research Foundation Interprocedural slicing of computer programs using dependence graphs
US5048018A (en) 1989-06-29 1991-09-10 International Business Machines Corporation Debugging parallel programs by serialization
US5488713A (en) 1989-12-27 1996-01-30 Digital Equipment Corporation Computer simulation technique for predicting program performance
US5660176A (en) 1993-12-29 1997-08-26 First Opinion Corporation Computerized medical diagnostic and treatment advice system
US5860009A (en) 1994-04-28 1999-01-12 Kabushiki Kaisha Toshiba Programming method for concurrent programs and program supporting apparatus thereof
EP0729097A1 (en) * 1995-02-07 1996-08-28 Sun Microsystems, Inc. Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program
US6029002A (en) * 1995-10-31 2000-02-22 Peritus Software Services, Inc. Method and apparatus for analyzing computer code using weakest precondition
US5867649A (en) * 1996-01-23 1999-02-02 Multitude Corporation Dance/multitude concurrent computation
US5903889A (en) * 1997-06-09 1999-05-11 Telaric, Inc. System and method for translating, collecting and archiving patient records
US5903899A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks
US6292822B1 (en) 1998-05-13 2001-09-18 Microsoft Corporation Dynamic load balancing among processors in a parallel computer
US6205414B1 (en) * 1998-10-02 2001-03-20 International Business Machines Corporation Methodology for emulation of multi-threaded processes in a single-threaded operating system
US6230313B1 (en) 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US7865883B1 (en) 1999-11-12 2011-01-04 Oracle America, Inc. Parallel and asynchronous debugger and debugging method for multi-threaded programs
US7590644B2 (en) 1999-12-21 2009-09-15 International Business Machine Corporation Method and apparatus of streaming data transformation using code generator and translator
US6550020B1 (en) 2000-01-10 2003-04-15 International Business Machines Corporation Method and system for dynamically configuring a central processing unit with multiple processing cores
AU2000276404A1 (en) 2000-09-30 2002-04-15 Intel Corporation (A Corporation Of Delaware) Method, apparatus, and system for building a compact model for large vocabulary continuous speech recognition (lvcsr) system
US7058561B1 (en) * 2000-11-02 2006-06-06 International Business Machines Corporation System, method and program product for optimising computer software by procedure cloning
JP3810631B2 (ja) 2000-11-28 2006-08-16 富士通株式会社 情報処理プログラムを記録した記録媒体
US6966055B2 (en) 2001-03-02 2005-11-15 International Business Machines Corporation Optimizing post-link code
US6904590B2 (en) 2001-05-25 2005-06-07 Microsoft Corporation Methods for enhancing program analysis
US7577942B2 (en) * 2001-07-26 2009-08-18 International Business Machines Corporation Efficient monitoring of program variables under debug
US20050022173A1 (en) 2003-05-30 2005-01-27 Codito Technologies Private Limited Method and system for allocation of special purpose computing resources in a multiprocessor system
KR100518584B1 (ko) 2003-07-12 2005-10-04 삼성전자주식회사 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US7119808B2 (en) 2003-07-15 2006-10-10 Alienware Labs Corp. Multiple parallel processor computer graphics system
CN100498757C (zh) * 2003-07-25 2009-06-10 Rmi公司 高级处理器
US20050108695A1 (en) * 2003-11-14 2005-05-19 Long Li Apparatus and method for an automatic thread-partition compiler
FR2865047B1 (fr) * 2004-01-14 2006-04-07 Commissariat Energie Atomique Systeme de generation automatique de codes optimises
CN100498711C (zh) * 2004-07-20 2009-06-10 明星游戏株式会社 自动翻译程序和程序翻译服务器
US7493606B2 (en) 2004-08-03 2009-02-17 Université du Québec à Chicoutimi (UQAC) Method for compiling and executing a parallel program
US20060132492A1 (en) 2004-12-17 2006-06-22 Nvidia Corporation Graphics processor with integrated wireless circuits
WO2006087728A1 (en) 2005-02-15 2006-08-24 Codito Technologies System for creating parallel applications
JP3938387B2 (ja) 2005-08-10 2007-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、制御方法、およびコンパイラ・プログラム
US20070219771A1 (en) * 2005-12-01 2007-09-20 Verheyen Henry T Branching and Behavioral Partitioning for a VLIW Processor
US7788468B1 (en) * 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
US7728841B1 (en) 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
US7376808B2 (en) * 2006-01-31 2008-05-20 International Business Machines Corporation Method and system for predicting the performance benefits of mapping subsets of application data to multiple page sizes
TWI343020B (en) 2006-05-12 2011-06-01 Nvidia Corp Antialiasing using multiple display heads of a graphics processor
JP4784827B2 (ja) 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
GB2443277B (en) 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US20080244592A1 (en) 2007-03-27 2008-10-02 Kabushiki Kaisha Toshiba Multitask processing device and method
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
CN101657795B (zh) 2007-04-11 2013-10-23 苹果公司 多处理器上的数据并行计算
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
US8789031B2 (en) 2007-09-18 2014-07-22 Intel Corporation Software constructed strands for execution on a multi-core architecture
US8776030B2 (en) * 2008-04-09 2014-07-08 Nvidia Corporation Partitioning CUDA code for execution by a general purpose processor
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
JP4381459B1 (ja) 2008-06-27 2009-12-09 株式会社東芝 情報処理装置、粒度調整方法およびプログラム
US8615770B1 (en) * 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8959497B1 (en) * 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems

Also Published As

Publication number Publication date
CN101556544A (zh) 2009-10-14
JP4984306B2 (ja) 2012-07-25
CN101556543B (zh) 2014-04-23
US8984498B2 (en) 2015-03-17
CN101556544B (zh) 2013-09-18
US9448779B2 (en) 2016-09-20
US20090259832A1 (en) 2009-10-15
US20090259997A1 (en) 2009-10-15
US8612732B2 (en) 2013-12-17
JP2009259240A (ja) 2009-11-05
US8572588B2 (en) 2013-10-29
US20090259829A1 (en) 2009-10-15
TW200947302A (en) 2009-11-16
JP5152594B2 (ja) 2013-02-27
US9678775B1 (en) 2017-06-13
CN101556543A (zh) 2009-10-14
JP2009259241A (ja) 2009-11-05
TWI423133B (zh) 2014-01-11
TW201007572A (en) 2010-02-16
US20090259828A1 (en) 2009-10-15

Similar Documents

Publication Publication Date Title
TWI437491B (zh) 經組態以轉譯一應用程式來由一通用處理器執行的運算裝置
US8776030B2 (en) Partitioning CUDA code for execution by a general purpose processor
US20190087164A1 (en) Technique for inter-procedural memory address space optimization in gpu computing compiler
US8099584B2 (en) Methods for scalably exploiting parallelism in a parallel processing system
JP4999183B2 (ja) 並列スレッド・コンピューティングの仮想のアーキテクチャ及び命令セット
US9361079B2 (en) Method for compiling a parallel thread execution program for general execution
US8570333B2 (en) Method and system for enabling managed code-based application program to access graphics processing unit
US20120066668A1 (en) C/c++ language extensions for general-purpose graphics processing unit
US9645802B2 (en) Technique for grouping instructions into independent strands
JP2008276740A5 (zh)
US8436862B2 (en) Method and system for enabling managed code-based application program to access graphics processing unit
US9229717B2 (en) Register allocation for clustered multi-level register files
US8615770B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
KR101117430B1 (ko) 범용 프로세서에 의해 실행하기 위한 어플리케이션 프로그램의 리타게팅
KR101118321B1 (ko) 리타게팅된 그래픽 프로세서 가속 코드의 범용 프로세서에 의한 실행
US8959497B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
KR101737785B1 (ko) 프로그램 컴파일 장치 및 프로그램 컴파일 방법

Legal Events

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