TWI509561B - 在圖形處理器電腦編譯器中最佳化程序間記憶體位址空間的技術 - Google Patents
在圖形處理器電腦編譯器中最佳化程序間記憶體位址空間的技術 Download PDFInfo
- Publication number
- TWI509561B TWI509561B TW101141369A TW101141369A TWI509561B TW I509561 B TWI509561 B TW I509561B TW 101141369 A TW101141369 A TW 101141369A TW 101141369 A TW101141369 A TW 101141369A TW I509561 B TWI509561 B TW I509561B
- Authority
- TW
- Taiwan
- Prior art keywords
- memory
- code
- memory space
- indicator
- memory access
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Description
本發明概略關於圖形處理器(GPU,“Graphics processing unit”)電腦編譯器,尤指一種在圖形處理器電腦編譯器中最佳化程序間記憶體位址空間的技術。
隨時間演進,圖形處理器(GPU)除了執行在圖形導向的作業之外,已經可支援更廣範圍的作業。事實上,現今的GPU能夠執行任選的程式指令。這種GPU基本上包括一種編譯器,其可編譯程式指令來在包括在該GPU內的一或多個處理核心上執行。每一個這種核心可與正在執行執行緒的其它處理核心平行地執行一或多個不同的執行緒。
在一GPU內一給定的核心可以耦合至一局部記憶體空間,其可由該GPU使用於當執行一執行緒時的記憶體存取作業。每一核心亦可耦合至一或多個其它核心亦耦合至的一共用記憶體空間。利用此種組態,多個核心可經由該共用的記憶體空間共用資料。該GPU內的該等核心亦可耦合至一通用記憶體空間,其可由所有處理核心進行存取,亦可能由該GPU本身之外的其它處理單元進行存取。
上述之多個不同記憶體空間的組態在本技術中稱之為一種「非均勻記憶體架構」(non-uniform memory architecture)。概言之,一非均勻記憶體架構包括資料可以停駐的多個不同記憶體空間。設計成在一GPU上執行的程式在該非均勻記憶體架構中可以存取停駐在任何或所有該等不同記憶體空間中的資料。
在這種程式之內,不同的記憶體存取作業可被指定,例如載入/儲存作業或原子化作業,其每一者針對一不同位址。但是,針對一給定記憶體位址的一給定記憶體存取作業可以不指
定任何特定的記憶體空間。在習用的方法中,於運作時間時,執行該程式的該GPU基本上讀取關聯於該位址的一標籤,其指明要在其中執行該記憶體存取作業的該特定記憶體空間。針對每一位址需要一標籤,因為例如兩個不同變數可以同時停駐在不同記憶體空間內相同的位址處。若沒有這種標籤,基於該等位址將無法區分該等兩個變數單獨。
要依賴上述的標籤化方法會造成兩個問題。第一,針對每一記憶體存取作業讀取一標籤是一項代價高的作業,並且浪費GPU資源。第二,因為具有相同位址之變數直到運作時間為止皆無法區分,該GPU編譯器在運作時間之前皆無法進行程式碼最佳化,其中包括記憶體位址重新排序或別名分析。
因此,本技術中需要一種更有效的技術來編譯GPU程式指令。
本發明一具體實施例提出一種電腦實作的程式碼最佳化方法,其能夠被編譯來在具有一非均勻記憶體架構的一平行處理單元(PPU,“Parallel processing unit”)上執行,其包括辨識關聯於一第一指標的一第一記憶體存取作業,其中該第一記憶體存取作業針對一般性的記憶體空間、提升與該第一指標相關的一使用定義串鏈、在決定該第一指標係由在該非均勻記憶體架構中一特定記憶體空間取得時加入該第一指標至一向量、及藉由修改該程式碼之至少一部份使得該第一記憶體存取作業係針對該特定記憶體空間。
該揭示技術的一個好處為一圖形處理器並不需要在運作時間當中解決所有一般性記憶體存取作業,藉此保留資源並加速該應用程式的執行。另外,該圖形處理器能夠利用該應用程式碼進行額外的程式碼最佳化,其中包括記憶體存取重新排序和別名分析,以進一步加速程式碼執行。
在以下的說明中,許多特定細節係被提出來提供對於本發明之更為完整的瞭解。但是本技術專業人士將可瞭解到本發明可不利用一或多個這些特定細節來實施。
系統概述
第一圖係例示設置成實作本發明一或多種態樣之一電腦系統100的方塊圖。電腦系統100包括一中央處理單元(CPU,“Central processing unit”)102和一系統記憶體104,兩者經由可包括一記憶體橋接器105的一互連接路徑進行通訊。系統記憶體104包括一作業系統130的影像、一驅動器103、及一允許共處理器的應用程式134。作業系統130提供用於管理和協調電腦系統100之作業的細部指令。驅動器103提供用於管理和協調平行處理子系統112和存在於其中的一或多個平行處理單元(PPU,“Parallel processing unit”)的作業,如以下配合第二圖的詳細說明。驅動器103亦針對這種PPU特別最佳化提供編譯設施以產生機器碼,如以下配合第三到六圖之詳細說明。允許共處理器的應用程式134加入能夠在CPU 102和PPU上執行的指令,那些指令係實作成一摘要格式,例如虛擬組合語言,並映射到平行處理子系統112內該等PPU的機器碼。那些PPU的機器碼可以儲存在系統記憶體104中或是耦合至該等PPU的記憶體中。
在一具體實施例中,允許共處理器的應用程式134代表CUDATM
碼,其加入了要在平行處理子系統112上執行的程式化指令。在本說明的內容中,該術語「應用程式」(application)或「程式」(program)代表任何可使用一處理器執行的電腦碼、指令、及/或函數。例如在多種具體實施例中,允許共處理器的應用程式134可以包括C碼、C++碼等。在一具體實施例中,允許共處理器的應用程式134可以包括一電腦語言的語言延伸(例如C,C++等)。
記憶體橋接器105可為一北橋晶片,其經由一匯流排或其它通訊路徑106(例如HyperTransport聯結)連接到一I/O(輸入/輸出)橋接器107。I/O橋接器107可為一南橋晶片,其接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並經由通訊路徑102及記憶體橋接器106轉送該輸入到CPU 105。平行處理子系統112經由一匯流排或第二通訊路徑113(例如PCI(周邊組件互連接)Express,加速圖形埠、或HyperTransport鏈路)耦合至記憶體橋接器105;在一具體實施例中,平行處理子系統112為一圖形子系統,其傳遞像素到一顯示器110,其可為任何習用的陰極射線管、液晶顯示器、發光二極體顯示器或類似者。一系統碟114亦連接至I/O橋接器107,並可設置成儲存CPU 102和平行處理子系統112所使用的內容、應用程式和資料。系統碟114做為儲存應用程式和資料的非揮發性儲存器,並可包括固定式或可移除式硬碟機、快閃記憶體裝置、和CD-ROM(光碟唯讀記憶體)、DVD-ROM(數位多功能碟片ROM)、藍光碟、HD-DVD(高解析度DVD)或任何磁性、光學或固態儲存裝置。
一交換器116提供I/O橋接器107與其它組件(例如一網路轉接器118與多種嵌入卡120和121)之間的連接。其它組件(未明確顯示)包括有通用串列匯流排(USB,"Universal serial bus”)或其它埠連接、光碟(CD)驅動器、數位視訊碟(DVD)驅動器、影像錄製裝置及類似者,其亦可連接至I/O橋接器107。第一圖所示之該等多種通訊路徑(包括特定名稱的通訊路徑106和113)可使用任何適當的協定來實作,例如PCI(周邊組件互連,Peripheral Component Interconnect)、PCI Express(PCI快速,PCI-E)、AGP(加速圖形通訊埠,Accelerated Graphics Port)、HyperTransport(超輸送)、或任何其它匯流排或點對點通訊協定、及不同裝置之間的連接,皆可使用如本技術中所知的不同協定。
在一具體實施例中,平行處理子系統112加入可針對圖形及視訊處理最佳化的電路,其包括例如視訊輸出電路,且構成一圖形處理器(GPU)。在另一具體實施例中,平行處理子系統112加入可針對一般性目的處理最佳化的電路,而可保留底層的運算架構,在此處會有更為詳細的說明。在又另一具體實施例中,平行處理子系統112在一單一子系統中可被整合於一或多個其它系統元件,例如結合記憶體橋接器105、CPU 102、及I/O橋接器107而形成一系統上晶片(SoC,“System on chip”)。
將可瞭解到此處所示的系統僅為例示性,其有可能有多種變化及修正。包括橋接器的數目與配置、CPU 102的數目及平行處理子系統112的數目的連接拓樸皆可視需要修改。例如,在一些具體實施例中,系統記憶體104直接連接至CPU 102而非透過一橋接器耦接,而其它裝置透過記憶體橋接器105及CPU 102與系統記憶體104進行通訊。在其它可替代的拓樸中,平行處理子系統112連接至I/O橋接器107或直接連接至CPU 102,而非連接至記憶體橋接器105。在又其它具體實施例中,I/O橋接器107及記憶體橋接器105可被整合到一單一晶片當中,而非分別做為一或多個分散裝置。大型具體實施例可包括兩個或更多的CPU 102,及兩個或更多的平行處理子系統112。此處所示的該等特定組件皆為選擇性的;例如其可支援任何數目的嵌入卡或周邊裝置。在一些具體實施例中,交換器116被省略,且網路轉接器118及嵌入卡120、121直接連接至I/O橋接器107。
第二圖例示根據本發明一具體實施例之一平行處理子系統112。如所示,平行處理子系統112包括一或多個平行處理單元(PPU,“Parallel processing unit”)202,其每一者耦合於一局部平行處理(PP,“Parallel processing”)記憶體204。概言之,一平行處理子系統包括數目為U的PPU,其中U大於或等於1。(在此處類似物件的多個實例標示為辨識該物件之參考編號,而括
號中的數目辨識所需要的實例)。PPU 202及平行處理記憶體204可以使用一或多個積體電路裝置來實作,例如可程式化處理器,特殊應用積體電路(ASIC,“Application specific integrated circuits”),或記憶體裝置,或以任何其它技術上可行的方式來實作。
請再次參照第一圖以及第二圖,在一些具體實施例中,平行處理子系統112中部份或所有的PPU 202為圖形處理器,其具有顯像管線,其能夠設置成執行關於依據自CPU 102及/或系統記憶體104經由記憶體橋接器105及第二通訊路徑113所供應的圖形資料來產生像素資料的多種作業,與本地平行處理記憶體204(其能夠做為圖形記憶體,其包括例如一習用像框緩衝器)進行互動以儲存及更新像素資料,傳遞像素資料到顯示裝置110及類似者。在一些具體實施例中,平行處理子系統112可以包括可操作為圖形處理器的一或多個PPU 202,及用於通用型運算的一或多個其它PPU 202。該等PPU可為相同或不同,且每個PPU可以具有一專屬的平行處理記憶體裝置或並無專屬的平行處理記憶體裝置。在平行處理子系統112中一或多個PPU 202可以輸出資料到顯示裝置110,或在平行處理子系統112中每個PPU 202可以輸出資料到一或多個顯示器110。
在作業中,CPU 102為電腦系統100的主控處理器,其控制及協調其它系統組件的作業。特別是CPU 102發出控制PPU 202之作業的命令。在一些具體實施例中,CPU 102對每一PPU 202寫入一命令串流至一資料結構(未明確示於第一圖或第二圖中),其可位於系統記憶體104、平行處理記憶體204或可同時由CPU 102與PPU 202存取的其它儲存位置。指向至每一資料結構的一指標被寫入至一推入緩衝器來起始在該資料結構中該命令串流之處理。PPU 202自一或多個推入緩衝器讀取命令串流,然後相對於CPU 102的該作業非同步地執行命令。執
行優先性可針對每一推入緩衝器藉由一應用程式經由裝置驅動器103來指定,以控制該等不同推入緩衝器的排程。
每個PPU 202包括一I/O(輸入/輸出)單元205,其經由通訊路徑113與電腦系統100的其它部份進行通訊,其連接至記憶體橋接器105(或在另一具體實施例中直接連接至CPU 102)。PPU 202與電腦系統100的其餘部份之連接亦可改變。在一些具體實施例中,平行處理子系統112係實作成一嵌入卡,其可被插入到電腦系統100的一擴充槽中。在其它具體實施例中,PPU 202可利用一匯流排橋接器整合在一單一晶片上,例如記憶體橋接器105或I/O橋接器107。在又其它的具體實施例中,PPU 202之部份或所有元件可與CPU 102整合在一單一晶片上。
在一具體實施例中,通訊路徑113為一PCIe鏈路,如上所述,其中如本技術中所熟知專屬的線路會分配給每個PPU 202。其亦可使用其它通訊路徑。一I/O單元205產生封包(或其它信號)在通訊路徑113上傳輸,且亦自通訊路徑113接收所有進入的封包(或其它信號),導引該等進入封包到PPU 202的適當組件。例如,關於處理工作的命令可被導引到一主控介面206,而關於記憶體作業的命令(例如自平行處理記憶體204讀取或寫入其中)可被導引到一記憶體交叉開關單元210。主控介面206讀取每個推入緩衝器,並儲存在該推入緩衝器中的該命令串流輸出至一前端212。
每一PPU 202較佳地是實作一高度平行的處理架構。如詳細所示,PPU 202(0)包括一處理叢集陣列230,其包括數目為C
的通用處理叢集(GPC,“General processing clusters”)208,其中C 1。每一GPC 208能夠同時執行大量(例如數百或數千)的執行緒,其中每個執行緒為一程式的一實例。在多種應用中,不同的GPC 208可分配來處理不同種類的程式,或執行不同種類的運算。GPC 208的分配可根據每種程式或運算所提升的工作負荷而改變。
GPC 208由一任務/工作單元207內的一工作分配單元接收要被執行的處理任務。該工作分配單元接收指向至被編碼成任務詮釋資料(TMD)且儲存在記憶體中的處理任務的指標。該命令串流包含該等指向至TMD的指標,且被儲存成一推入緩衝器,而前端單元212自主控介面206來接收該命令串流。可被編碼成TMD的處理任務包括要被處理之資料的索引,以及定義了該資料要如何被處理的狀態參數和命令(例如那一個程式要被執行)。任務/工作單元207自前端212接收任務,並確保在每一TMD所指定的該處理開始前,GPC 208被設置成一有效狀態。針對用於排程該處理任務之執行的每一TMD可指定一優先性。處理任務亦可自處理叢集陣列230接收。視需要,該TMD可包括一參數,其控制該TMD是否要被加入一處理任務清單(或指向至該等處理任務的指標清單)的頭端或尾端,藉此提供在優先性之上的另一控制層級。
記憶體介面214包括數目為D
的區隔單元215,其每一者被直接耦合至平行處理記憶體204的一部份,其中D 1。如所示,區隔單元215的數目大致上等於動態隨機存取記憶體(DRAM)220的數目。在其它具體實施例中,區隔單元215的數目可能不等於記憶體裝置的數目。本技術專業人士將可瞭解到DRAM 220可由其它適當儲存裝置取代,並可為一般的習用設計。因此可省略詳細說明。圖框緩衝器或紋路地圖等顯像目標可儲存在不同DRAM 220中,其允許區隔單元215平行地寫入每個顯像目標之不同部份,進而有效率地使用平行處理記憶體204之可使用頻寬。
任一GPC 208可處理要被寫入到平行處理記憶體204內任一DRAM 220中的資料。交叉開關單元210設置成導引每個GPC 208之輸出到任何區隔單元215的輸入或到另一個GPC 208做進一步處理。GPC 208經由交叉開關單元210與記憶體介面214進行通訊,以自多個外部記憶體裝置讀取或寫入其中。
在一具體實施例中,交叉開關單元210具有到記憶體介面214的一連接來與I/O單元205進行通訊,以及到局部平行處理記憶體204的一連接,藉此使得不同GPC 208內該等處理核心能夠與系統記憶體104或並非位在PPU 202局部之其它記憶體進行通訊。在第二圖所示的該具體實施例中,交叉開關單元210直接連接於I/O單元205。交叉開關單元210可使用虛擬通道來隔開GPC 208與區隔單元215之間的流量串流。
再次地,GPC 208可被程式化來執行關於許多種應用之處理工作,其包括但不限於線性及非線性資料轉換、影片及/或聲音資料的過濾、模型化作業(例如應用物理定律來決定物體的位置、速度及其它屬性)、影像顯像作業(例如鑲嵌遮影器、頂點遮影器、幾何遮影器及/或像素遮影器程式)等等。PPU 202可將來自系統記憶體104及/或局部平行處理記憶體204的資料轉移到內部(晶片上)記憶體、處理該資料、及將結果資料寫回到系統記憶體104及/或局部平行處理記憶體204,其中這些資料可由CPU 102或另一個平行處理子系統112等其它系統組件來存取。
一PPU 202可具有任何數量的局部平行處理記憶體204,並不包括局部記憶體,並可用任何的組合來使用局部記憶體及系統記憶體。例如在一統一記憶體架構(UMA,“Unified memory architecture”)之具體實施例中,PPU 202可為一圖形處理器。在這些具體實施例中,將可提供少數或沒有專屬的圖形(平行處理)記憶體,且PPU 202將專有地或大致專有地使用系統記憶體。在UMA具體實施例中,一PPU 202可被整合到一橋接器晶片中或處理器晶片中,或提供成具有一高速鏈路(例如PCI-EXPRESS)之一獨立晶片,高速鏈路經由一橋接器晶片或其它通訊手段將PPU 202連接到系統記憶體。另外,每一PPU 202可利用一非均勻記憶體架構實作,且每一個這種PPU
202能夠存取到由允許共處理器的應用程式134導向的多個不同記憶體空間。
如上所述,平行處理子系統112可包含任何數目的PPU 202。例如,多個PPU 202可提供在一單一嵌入卡上,或多個嵌入卡可被連接至通訊路徑113,或一或多個PPU 202可被整合到一橋接器晶片中。在一多PPU系統中PPU 202可彼此相同或彼此不相同。例如,不同的PPU 202可具有不同數目的處理核心、不同數量的局部平行處理記憶體等等。當存在有多個PPU 202時,那些PPU可平行地作業而以高於一單一PPU 202所可能的流量來處理資料。加入有一或多個PPU 202之系統可實作成多種組態及型式,其中包括桌上型、膝上型、或掌上型個人電腦、伺服器、工作站、遊戲主機、嵌入式系統及類似者。
如所述,在配合第三到六圖所述的本發明之具體實施例中,每一PPU 202利用一非均勻記憶體架構實作。因此,每一個這種PPU 202能夠存取到由允許共處理器的應用程式134所導引的多個不同記憶體空間,例如像是除此之外的系統記憶體104或PP記憶體204。自裝置驅動器103取得的一編譯器和鏈結器應用程式設置成最佳化和編譯程式碼,藉以產生允許共處理器的應用程式134。該程式碼初始時可包括不同的記憶體存取作業,例如載入/儲存作業或原子化作業,其可能未指定要進行該等記憶體存取作業的一特定記憶體空間。這種記憶體存取作業在此處稱之為「一般性記憶體存取作業」(generic memory access operations)。為了最佳化該程式碼,該編譯器和鏈結器應用程式設置成視需要修改該程式碼,以將一般性記憶體存取作業解決成針對一特定記憶體空間的特定記憶體存取作業,如以下配合第三到六圖之更為詳細的說明。
第三圖例示根據本發明一具體實施例用於編譯第一圖的一允許共處理器的應用程式134之建構程序。程式碼310包括主機原始碼312和裝置原始碼314。主機原始碼312加入要在一主
機上執行的程式化指令,例如一x86為主的個人電腦(PC,“Personal computer”)或伺服器。在原始碼312中該等程式化指令可包括呼叫到在裝置原始碼314中定義的函數。可使用任何技術上可行的機制來指定那些函數為裝置原始碼314所指定。
主機原始碼312由一主機編譯程式和鏈結器322預先處理、編譯及鏈結。主機編譯器和鏈結器322產生主機機器碼342,其儲存在允許共處理器的應用程式134之內。
裝置原始碼314由一裝置編譯器和鏈結器324預先處理、編譯和鏈結。此編譯作業構成裝置原始碼314的一第一階段編譯。裝置編譯器和鏈結器324產生裝置虛擬組合語言346,其儲存在一裝置碼儲存庫350內,與允許共處理器的應用程式134共同存在或存在於其內。一虛擬指令轉譯器334可以由裝置虛擬組合語言346產生裝置機器碼324。此編譯作業構成裝置原始碼314的一第二階段編譯。虛擬指令轉譯器334基於已知的架構定義之可用性而產生一或多個版本的裝置機器碼344。例如,虛擬指令轉譯器334可以產生引動原生64位元的算術指令(可在該第一目標架構中使用)的一第一版本的裝置機器碼344,及模擬在不包括原生64位元算術指令的目標上之64位元算術函數的一第二版本的裝置機器碼344。
架構資訊348指明用於產生裝置機器碼344的真正架構版本。該真正架構版本定義了實作在一真正執行目標(例如PPU 202)內原生指令中的該等特徵。架構資訊348亦指明用於產生裝置虛擬組合語言346的該虛擬架構版本。該虛擬架構版本定義了被假設為原生或簡易模擬的該等特徵,以及對模擬而言並不實際的該等特徵。例如,在該指令層級處要模擬原子化加法作業並不實際,雖然在某些案例中它們在該運算法層級處皆被避免,因此影響到哪些函數可在該第一編譯階段中被編譯。
除了裝置機器碼344和裝置虛擬組合語言346之外,該裝置碼儲存庫亦包括架構資訊348,其指明當產生裝置機器碼344
和裝置虛擬組合語言346時係假設了那些架構性特徵。本技術專業人士將可瞭解到裝置機器碼344和虛擬組合語言346內所包括的該等函數反映出關聯於PPU 202之真正架構的函數。架構資訊348提供裝置機器碼344的相容性資訊,以及一第二階段編譯作業的編譯器提示。在允許共處理器的應用程式134的開發已經完成之後的某個時間,可由一裝置驅動器103來執行第二階段編譯作業。
程序間記憶體空間最佳化
裝置編譯器和鏈結器324亦設置成利用程式碼310內不同的程序及/或函數來進行多種最佳化例式。如所述,程式碼310初始時可包括一般性記憶體存取作業,其並不指定一特定記憶體空間,且裝置編譯器和鏈結器324設置成修改該程式碼來將該等一般性記憶體存取作業解決成針對一特定記憶體空間的記憶體存取作業。第四圖說明一種用於記憶體存取作業最佳化的方法,第五圖說明一種用於轉移常數變數來停駐在一通用記憶體空間中的方法,而第六圖略述一種示例性方案,在其中配合第四圖和第五圖所討論的該等方法能得到好處。
第四圖係根據本發明一具體實施例用於記憶體存取作業最佳化的方法步驟之流程圖。雖然該等方法步驟係配合第一到二圖之該等系統做說明,本技術專業人士將可瞭解到設置成以任何順序執行該等方法步驟的任何系統皆在本發明之範圍內。第三圖所示的裝置編譯器和鏈結器324設置成實作該等方法步驟。
如所示,一方法400開始於步驟402,其中裝置編譯器和鏈結器324收集針對一般性記憶體空間的程式碼310內的記憶體存取作業。該等記憶體存取作業可為載入/儲存作業或原子化作業,例如像是指標解除參照。在步驟404,針對步驟402所收集的每一記憶體存取作業,裝置編譯器和鏈結器324提升針對關聯於該記憶體存取作業的該指標所產生的一使用定義串
鏈,藉以決定從其取得該指標的該特定記憶體空間。裝置編譯器和鏈結器324可以使用習用的技術產生該使用定義串鏈,例如資料流分析,藉以辨識該指標的使用及牽涉到該指標的任何先前定義。在一具體實施例中,裝置編譯器和鏈結器324使用即時分析式技術來產生該使用定義串鏈。
在步驟406,裝置編譯器和鏈結器324將由一特定記憶體空間(例如像是通用記憶體、局部記憶體、共用記憶體等)取得的每一指標加入到一向量。在步驟408,針對步驟406產生的該向量中每一指標,裝置編譯器和鏈結器324修改關聯於該指標的該記憶體存取作業來針對到從其取得該指標的該特定記憶體空間。例如,自通用記憶體取得的一特定指標p可在一載入作業期間被解除參照。藉由實作方法400,裝置編譯器和鏈結器324能夠利用特定針對通用記憶體的一載入作業來取代該指標解除參照。
在一些狀況下,裝置編譯器和鏈結器324可能無法實作方法400來修改一給定的記憶體存取作業來針對到程式碼310內的一特定記憶體空間。這種狀況可能在當程式碼310包括一分支指令時發生。因為一分支指令的結果直到運行時間為止皆為未知,根據該分支指令的結果來針對到不同記憶體空間的記憶體存取作業可能無法以上述的方式來修改。在一些案例中,那些記憶體存取作業可能在當一般性記憶體存取作業時保留不變,而在運行時間時來解決。
但是,對於保留給常數變數的一記憶體空間之記憶體存取作業,可能無法在運作時間內有效地解決。因為常數記憶體空間基本上停駐在一唯讀記憶體內,關聯於常數記憶體的記憶體存取作業基本上不同於其它的記憶體存取作業,因此可能無法在運作時間內解決。因此,裝置編譯器和鏈結器324設置成轉移某些常數變數和程式碼310內該等相關聯的記憶體存取作業
來分別地停駐在及針對於一通用記憶體空間,如以下配合第五圖之詳細說明中所討論。
第五圖係根據本發明一具體實施例用於轉移常數變數來停駐在一通用記憶體空間的方法步驟之流程圖。雖然該等方法步驟係配合第一到二圖之該等系統做說明,本技術專業人士將可瞭解到設置成以任何順序執行該等方法步驟的任何系統皆在本發明之範圍內。第三圖所示的裝置編譯器和鏈結器324設置成實作該等方法步驟。
如所示,一方法500開始於步驟502,其中針對程式碼310中每一常數位址,裝置編譯器和鏈結器324降低該常數位址的該定義使用串鏈,直到達到一記憶體存取作業為止。裝置編譯器和鏈結器324可以使用習用的技術產生該定義使用串鏈,例如資料流分析,藉以辨識該常數位址的宣告及任何後續使用。在一具體實施例中,裝置編譯器和鏈結器324使用即時分析式技術來產生該定義使用串鏈。
在步驟504,針對步驟502所達到及關聯於一特定常數位址的每一記憶體存取作業,如果該記憶體存取作業無法解決到一特定記憶體空間時,裝置編譯器和鏈結器324將關聯於該常數位址的一常數宣告標示為「必須轉移」(must-transfer)。
在步驟506,裝置編譯器和鏈結器324針對每一記憶體存取作業產生一相依性清單。在步驟508,裝置編譯器和鏈結器324利用標示為「必須轉移」的宣告來辨識出包括常數位址的任何相依性清單。在步驟510,裝置編譯器和鏈結器324將關聯於在步驟508中辨識的該等相依性清單的任何記憶體存取作業標示為「必須轉移」。在步驟512,裝置編譯器和鏈結器324將在該等經辨識的相依性清單內關聯於常數位址的任何常數宣告標示為「必須轉移」。在步驟514,裝置編譯器和鏈結器324修改每一個可轉移的常數宣告來指定通用記憶體空間中一位置。在
步驟516,裝置編譯器和鏈結器324修改每一可轉移的記憶體存取作業來針對到通用記憶體。然後方法500結束。
藉由實作方法500,在當分支指令將另外留下牽涉到那些常數變數的記憶體存取作業成為一般性記憶體存取作業時,裝置編譯器和鏈結器324能夠轉移常數變數來停駐在一通用記憶體空間中。再者,裝置編譯器和鏈結器324亦設置成轉移任何常數變數及根據先前經轉移的變數之相關聯的記憶體存取作業,藉此確保所有相關的常數變數被一起地轉移。
上述分別配合第四圖和第五圖做說明的方法400和500在以下配合第六圖藉由一示例做更為詳細的說明。
第六圖係根據本發明一具體實施例提出一虛擬碼示例來例示一裝置編譯器及鏈結器之作業。如所示,虛擬碼600包括虛擬碼方塊610、620、630和640。虛擬碼方塊610包括針對變數c1和c2的兩個常數整數宣告,及針對變數s的一共用整數宣告。虛擬碼方塊620包括指向至該等變數c1、s和c2之位址的三個指標指定p1、p2和p4。虛擬碼方塊630包括分別指定指標p3和p5的分支指令632和634,其根據在運行時間所依循的是那一個分支而有所不同。虛擬碼方塊640包括分別設定儲存在指標p3、p5和p1處的該資料至變數x、y和z的記憶體存取作業。本技術專業人士將可瞭解到上述之虛擬碼600能夠以多種程式化語言來簡單地實作。在一具體實施例中,虛擬碼600可以實作在CUDATM
程式化語言中,並可代表部份或所有的程式碼310。
以下的說明僅代表進行以上配合第四圖所述之方法400的裝置編譯器和鏈結器324的一種示例。在此示例中,裝置編譯器和鏈結器324首先辨識虛擬碼方塊640內的該等記憶體存取作業,類似於方法400的步驟402。那些記憶體存取作業係關聯於指標p1、p3和p5,如所示。
然後裝置編譯器和鏈結器324提升每一個這種記憶體存取作業的該使用定義串鏈,類似於方法400的步驟404。在虛擬碼600中,裝置編譯器和鏈結器324藉由依循分支指令632的每一分支上到虛擬方塊620中p1和p2的該等指標指令來提升p3的該使用定義串鏈,然後追蹤變數c1和s回到虛擬方塊610內那些變數的宣告。同樣地,裝置編譯器和鏈結器324藉由依循分支指令634的每一分支上到虛擬方塊620中p1和p4的該等指標指令來提升p5的該使用定義串鏈,然後追蹤變數c1和c2回到虛擬方塊610內那些變數的宣告。裝置編譯器和鏈結器324藉由追蹤該指標回到虛擬方塊620中該指標指令來提升p1的該使用定義串鏈,然後追蹤變數c1回到虛擬方塊610內該變數的宣告。
針對關聯於步驟404所收集的該等記憶體存取作業的每一指標,裝置編譯器和鏈結器324在當該指標自一特定記憶體空間取得時加入該指標至一向量,類似於方法400中步驟406。在虛擬碼600中,指標p1自常數變數c1取得,其停駐在常數記憶體中。因此,裝置編譯器和鏈結器324加入p1至該向量。指標p3根據分支指令632由p1或p2取得。因為p1和p2分別由常數記憶體和共用記憶體取得,關聯於p3的該記憶體存取無法被解決到一特定記憶體空間,且指標p3不被加入到該向量。指標p5由常數變數c1和c2取得,因此無關於在運作時間時所依循的是分支指令634的那一個分支,p5仍然自常數記憶體取得。因此,裝置編譯器和鏈結器324加入p5至該向量。
裝置編譯器和鏈結器324橫移該向量,且針對在該向量中每一指標來修改該相關聯的記憶體存取作業,以針對到取得該指標的該特定記憶體空間,類似於方法400的步驟408。如此一來,裝置編譯器和鏈結器324修改p1和p5的該等記憶體存取作業來特定地針對常數記憶體。關聯於p3的該記憶體存取作業被保留成一般性記憶體存取作業。
一旦第四圖的方法400已經在虛擬碼600上執行,裝置編譯器和鏈結器324即藉由在虛擬碼600上執行第五圖的方法500來重新處理虛擬碼600,如以下藉由示例所討論。
以下的說明僅代表執行以上配合第五圖所述之方法500的裝置編譯器和鏈結器324的一個示例。在此示例中,裝置編譯器和鏈結器324首先降低每一個常數位址的該定義使用串鏈,直到達到一記憶體存取為止,類似於方法500的步驟502。裝置編譯器和鏈結器324降低在虛擬碼610中宣告的常數變數c1和c2的該定義使用串鏈,直到達到關聯於那些常數變數的該等記憶體存取作業為止。如所示,c1可被追蹤到牽涉到指標p1、p3和p5的記憶體存取作業,而c2可被追蹤到僅牽涉到指標p5的記憶體存取作業。
針對自一特定常數宣告取得的那些記憶體存取作業之每一項作業,如果該記憶體存取未被解決到一特定記憶體空間,裝置編譯器和鏈結器324將該常數宣告標示為「必須轉移」,類似於方法500的步驟504。如以上在先前示例中所討論,關聯於指標p3的該記憶體存取作業被保留成一般性記憶體存取作業,因此裝置編譯器和鏈結器324將關聯於該記憶體存取作業的該常數宣告(針對c1的該宣告)標示為「必須轉移」。
然後裝置編譯器和鏈結器324針對每一記憶體存取產生一相依性清單,類似於方法500的步驟506。裝置編譯器和鏈結器324設置成辨識任何包括了具有標示為「必須轉移」的常數宣告之常數位址的任何相依性清單,類似於方法500的步驟508。在虛擬碼600中,關聯於指標p1的該記憶體存取作業依據c1,其被標示為「必須轉移」。同樣地,關聯於指標p3的該記憶體存取作業依據c1,而關聯於指標p5的該記憶體存取作業亦依據c1。因此,裝置編譯器和鏈結器324將可辨識關聯於那些記憶體存取作業的該等相依性清單。
然後裝置編譯器和鏈結器324將關聯於該等經辨識的相依性清單的該等記憶體存取作業標示為「必須轉移」,類似於方法500的步驟510。在此處所述之示例中,裝置編譯器和鏈結器324將虛擬方塊640中所示的所有該等記憶體存取作業皆標示為「必須轉移」。
然後裝置編譯器和鏈結器324將在該等經辨識的相依性清單中關聯於常數位址的任何其它常數宣告標示為「必須轉移」,類似於方法500的步驟512。在虛擬碼600中,裝置編譯器和鏈結器324將決定p5的該記憶體存取作業依據常數變數c2,且因為該記憶體存取作業的該相依性清單在先前被辨識,所以c2的該常數變數宣告亦將被標示為「必須轉移」。
然後裝置編譯器和鏈結器324將修改每個「必須轉移」常數變數宣告來停駐在通用記憶體中,類似於方法500的步驟514,然後修改每個「必須轉移」記憶體存取作業來針對到通用記憶體,類似於方法500的步驟516。如此一來,裝置編譯器和鏈結器324亦可視需要將資料自該常數記憶體空間提升到該通用記憶體空間。藉由執行在此示例中所述之該技術,裝置編譯器和鏈結器324轉移所有常數記憶體變數和記憶體存取作業來分別停駐和針對到通用記憶體,藉以避免一般性記憶體存取作業根據一分支指令的結果而可以或可能不針對到常數記憶體的狀況。
總而言之,一裝置編譯器和鏈結器設置成藉由解決在該程式碼內的一般性記憶體存取作業來針對到特定記憶體空間,而來最佳化一允許共處理器的應用程式之程式碼。在當一般性記憶體存取作業無法被解決而可能針對到常數記憶體的狀況,關聯於那些一般性記憶體存取作業的常數變數被轉移到停駐在通用記憶體中。
較佳地是,一圖形處理器(GPU)並不需要在運作時間當中解決所有一般性記憶體存取作業,藉此保留資源並加速該應用
程式的執行。另外,該GPU能夠利用該應用程式碼進行額外的程式碼最佳化,其中包括記憶體存取重新排序和別名分析,以進一步加速程式碼執行。
本發明一具體實施例可以實作成由一電腦系統使用的一程式產品。該程式產品的程式定義該等具體實施例的功能(包括此處所述的方法),並可包含在多種電腦可讀取儲存媒體上。例示性的電腦可讀取儲存媒體包括但不限於:(i)不可寫入儲存媒體(例如在一電腦內唯讀記憶體裝置,例如可由CD-ROM讀取的CD-ROM碟片,快閃記憶體,ROM晶片,或任何其它種類的固態非揮發性半導體記憶體),其上可永久儲存資訊;及(ii)可寫入儲存媒體(例如在一磁碟機內的軟碟片、或硬碟機、或任何種類的固態隨機存取半導體記憶體),其上可儲存可改變的資訊。
本發明已經參照特定具體實施例在以上進行說明。但是本技術專業人士將可瞭解到在不背離附屬申請專利範圍所提出之本發明的廣義精神與範圍之下可對其進行多種修正與改變。因此前述的說明及圖面係在以例示性而非限制性的角度來看待。
100‧‧‧電腦系統
102‧‧‧中央處理單元
103‧‧‧驅動器
104‧‧‧系統記憶體
105‧‧‧記憶體橋接器
106‧‧‧通訊路徑
107‧‧‧輸入/輸出橋接器
108‧‧‧輸入裝置
110‧‧‧顯示器
112‧‧‧平行處理子系統
113‧‧‧通訊路徑
114‧‧‧系統碟
116‧‧‧交換器
118‧‧‧網路轉接器
120,121‧‧‧嵌入卡
130‧‧‧作業系統
134‧‧‧允許共處理器的應用程式
150‧‧‧編譯器
202‧‧‧平行處理單元
204‧‧‧平行處理記憶體
205‧‧‧輸入/輸出單元
206‧‧‧主控介面
207‧‧‧任務/工作單元
208‧‧‧通用處理叢集
210‧‧‧交叉開關單元
212‧‧‧前端
214‧‧‧記憶體介面
215‧‧‧區隔單元
220‧‧‧動態隨機存取記憶體
230‧‧‧處理叢集陣列
310‧‧‧程式碼
312‧‧‧主機原始碼
314‧‧‧裝置原始碼
322‧‧‧主機編譯器和鏈結器
324‧‧‧裝置編譯器和鏈結
器
334‧‧‧虛擬指令轉譯器
342‧‧‧主機機器碼
344‧‧‧裝置機器碼
346‧‧‧裝置虛擬組合語言
400,500‧‧‧方法
348‧‧‧架構資訊
600‧‧‧虛擬碼
610,620,630,640‧‧‧虛擬碼方塊
632,634‧‧‧分支指令
402~408,502~516‧‧‧步驟
所以,可以詳細瞭解本發明上述特徵之方式當中,本發明之一更為特定的說明簡述如上,其可藉由參照具體實施例來進行,其中一些例示於所附圖式中。但是應要注意到,該等附屬圖式僅例示本發明的典型具體實施例,因此其並非要做為本發明之範圍的限制,其可允許其它同等有效的具體實施例。
第一圖例示設置成實作本發明一或多種態樣之電腦系統的方塊圖;第二圖為根據本發明一或多種態樣中第一圖之電腦系統的一平行處理子系統之方塊圖;
第三圖例示根據本發明一具體實施例用於編譯一允許共處理器的應用程式之一建構程序;第四圖係根據本發明一具體實施例用於記憶體存取作業最佳化的方法步驟之流程圖;第五圖係根據本發明一具體實施例用於轉移常數變數至一通用記憶體空間的方法步驟之流程圖;以及第六圖係根據本發明一具體實施例提出一虛擬碼示例來例示一裝置編譯器及鏈結器之作業。
400‧‧‧方法
402~408‧‧‧步驟
Claims (10)
- 一種用於最佳化能夠被編譯來在具有一非均勻記憶體架構的一平行處理單元(PPU)上執行的程式碼之電腦實作的方法,該方法包括:辨識關聯於一第一指標的一第一記憶體存取作業,其中該第一記憶體存取作業針對到一般性記憶體空間;提升與該第一指標相關的一使用定義串鏈;在決定該第一指標係自在該非均勻記憶體架構中一特定記憶體空間取得時,加入該第一指標至一向量;以及藉由修改該程式碼的至少一部份來使得該第一記憶體存取作業可針對到該特定記憶體空間。
- 如申請專利範圍第1項之電腦實作方法,其中該特定記憶體空間包含可由該PPU內一組處理核心存取的一通用記憶體空間、關聯於包括在該組處理核心中的一第一處理核心的一局部記憶體空間、可由包括在該組處理核心中兩個或多個該等處理核心存取的一共用記憶體空間、或是停駐在唯讀記憶體中一常數記憶體空間。
- 如申請專利範圍第1項之電腦實作方法,其中與該第一指標相關的該使用定義串鏈藉由利用該程式碼執行資料流分析而產生,藉以辨識該第一指標的每一個定義和每一個使用。
- 如申請專利範圍第1項之電腦實作方法,進一步包括:藉由降低與一第一記憶體位址相關的一定義使用串鏈來辨識一第二記憶體存取作業;決定該第二記憶體存取作業並未針對到一特定記憶體空間;辨識關聯於該第一記憶體位址的一第一變數宣告,其中該第一變數宣告指明該第一記憶體位址關連至在一常數記憶體空間中一位置;以及藉由修改該程式碼的至少一部份使得該第一變數宣告 來指明該第一記憶體位址關連至在一通用記憶體空間中一位置。
- 如申請專利範圍第4項之電腦實作方法,進一步包括將關聯於該第一記憶體位址的資料自該常數記憶體空間提升到該通用記憶體空間。
- 如申請專利範圍第4項之電腦實作方法,其中與該第一記憶體存取位址相關的該定義使用串鏈藉由利用該程式碼執行資料流分析而產生,藉以辨識該第一記憶體位址的每一個定義和每一個使用。
- 如申請專利範圍第4項之電腦實作方法,進一步包括:辨識依據該第一變數宣告的一第三記憶體存取作業;決定該第三記憶體存取作業亦依據關聯於一第二記憶體位址的一第二變數宣告,其中該第二變數宣告指明該第二記憶體位址關連至在該常數記憶體空間中一位置;以及藉由修改該程式碼的至少一部份使得該第二變數宣告來指明該第二記憶體位址關連至在該通用記憶體空間中一位置。
- 如申請專利範圍第7項之電腦實作方法,進一步包括:藉由修改該程式碼的至少一部份來使得該第三記憶體存取作業可針對到該特定記憶體空間;以及將關聯於該第三記憶體位址的資料自該常數記憶體空間提升到該通用記憶體空間。
- 如申請專利範圍第1項之電腦實作方法,進一步包括基於已經修改的該程式碼的該至少一部份執行一碼重新排序作業和一別名分析中至少一者。
- 一種設置成最佳化能夠被編譯來在具有一非均勻記憶體架構的一平行處理單元(PPU)上執行的程式碼之運算裝置,其包含:一處理單元,其設置成:辨識關聯於一第一指標的一第一記憶體存取作業,其 中該第一記憶體存取作業針對到一般性記憶體空間,提升與該第一指標相關的一使用定義串鏈,在決定該第一指標係自在該非均勻記憶體架構中一特定記憶體空間取得時,加入該第一指標至一向量,以及藉由修改該程式碼的至少一部份來使得該第一記憶體存取作業可針對到該特定記憶體空間。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201161556782P | 2011-11-07 | 2011-11-07 | |
| US13/659,802 US20130113809A1 (en) | 2011-11-07 | 2012-10-24 | Technique for inter-procedural memory address space optimization in gpu computing compiler |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW201333874A TW201333874A (zh) | 2013-08-16 |
| TWI509561B true TWI509561B (zh) | 2015-11-21 |
Family
ID=48223398
Family Applications (5)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW101141372A TWI604410B (zh) | 2011-11-07 | 2012-11-07 | 改善暫存器不足和提升平行處理的即時分析式重新計算技術 |
| TW101141357A TWI502509B (zh) | 2011-11-07 | 2012-11-07 | 一種用於自包括在一電腦程式的高階原始碼中一64位元類別轉換表達式擷取一記憶體位址偏置量的方法及系統 |
| TW101141369A TWI509561B (zh) | 2011-11-07 | 2012-11-07 | 在圖形處理器電腦編譯器中最佳化程序間記憶體位址空間的技術 |
| TW101141361A TWI483182B (zh) | 2011-11-07 | 2012-11-07 | 一種用於減少一電腦程式中所包括的組合語言指令之數目的方法與系統 |
| TW101141366A TWI498817B (zh) | 2011-11-07 | 2012-11-07 | 減少64位元電腦程式迴圈內符號擴展指令的需求導向運算法 |
Family Applications Before (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW101141372A TWI604410B (zh) | 2011-11-07 | 2012-11-07 | 改善暫存器不足和提升平行處理的即時分析式重新計算技術 |
| TW101141357A TWI502509B (zh) | 2011-11-07 | 2012-11-07 | 一種用於自包括在一電腦程式的高階原始碼中一64位元類別轉換表達式擷取一記憶體位址偏置量的方法及系統 |
Family Applications After (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW101141361A TWI483182B (zh) | 2011-11-07 | 2012-11-07 | 一種用於減少一電腦程式中所包括的組合語言指令之數目的方法與系統 |
| TW101141366A TWI498817B (zh) | 2011-11-07 | 2012-11-07 | 減少64位元電腦程式迴圈內符號擴展指令的需求導向運算法 |
Country Status (5)
| Country | Link |
|---|---|
| US (6) | US20130113809A1 (zh) |
| CN (5) | CN103460188A (zh) |
| DE (5) | DE112012000212T5 (zh) |
| TW (5) | TWI604410B (zh) |
| WO (5) | WO2013070637A1 (zh) |
Families Citing this family (62)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CA2957010C (en) | 2008-09-26 | 2017-07-04 | Relievant Medsystems, Inc. | Systems and methods for navigating an instrument through bone |
| US10028753B2 (en) | 2008-09-26 | 2018-07-24 | Relievant Medsystems, Inc. | Spine treatment kits |
| US9430204B2 (en) | 2010-11-19 | 2016-08-30 | Microsoft Technology Licensing, Llc | Read-only communication operator |
| US9507568B2 (en) | 2010-12-09 | 2016-11-29 | Microsoft Technology Licensing, Llc | Nested communication operator |
| US9395957B2 (en) * | 2010-12-22 | 2016-07-19 | Microsoft Technology Licensing, Llc | Agile communication operator |
| US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
| US9164743B2 (en) * | 2012-07-02 | 2015-10-20 | International Business Machines Corporation | Strength reduction compiler optimizations for operations with unknown strides |
| US10588691B2 (en) | 2012-09-12 | 2020-03-17 | Relievant Medsystems, Inc. | Radiofrequency ablation of tissue within a vertebral body |
| CN105359090A (zh) * | 2013-04-26 | 2016-02-24 | 纽约市哥伦比亚大学理事会 | 用于移动应用的系统和方法 |
| US9710388B2 (en) * | 2014-01-23 | 2017-07-18 | Qualcomm Incorporated | Hardware acceleration for inline caches in dynamic languages |
| CN104915180B (zh) * | 2014-03-10 | 2017-12-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
| EP3123315B1 (en) * | 2014-03-27 | 2018-11-14 | Microsoft Technology Licensing, LLC | Hierarchical directives-based management of runtime behaviors |
| US9389890B2 (en) | 2014-03-27 | 2016-07-12 | Microsoft Technology Licensing, Llc | Hierarchical directives-based management of runtime behaviors |
| US10061591B2 (en) | 2014-06-27 | 2018-08-28 | Samsung Electronics Company, Ltd. | Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing |
| 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 |
| CN104834532B (zh) * | 2015-06-03 | 2018-01-02 | 星环信息科技(上海)有限公司 | 一种分布式数据向量化处理方法和装置 |
| CN106708593B (zh) * | 2015-07-16 | 2020-12-08 | 中兴通讯股份有限公司 | 一种程序链接的编译方法及装置 |
| CN105183433B (zh) * | 2015-08-24 | 2018-02-06 | 上海兆芯集成电路有限公司 | 指令合并方法以及具有多数据通道的装置 |
| KR20170047957A (ko) * | 2015-10-26 | 2017-05-08 | 삼성전자주식회사 | 반도체 장치의 동작 방법 및 반도체 시스템 |
| CN105302577B (zh) * | 2015-11-26 | 2019-05-07 | 上海兆芯集成电路有限公司 | 驱动执行单元的机器码产生方法以及装置 |
| GB2546308B (en) * | 2016-01-15 | 2019-04-03 | Advanced Risc Mach Ltd | Data processing systems |
| CN107292808B (zh) * | 2016-03-31 | 2021-01-05 | 阿里巴巴集团控股有限公司 | 图像处理方法、装置及图像协处理器 |
| CN105955892A (zh) * | 2016-04-25 | 2016-09-21 | 浪潮电子信息产业股份有限公司 | 一种计算机系统中地址空间的扩展方法 |
| US10198259B2 (en) * | 2016-06-23 | 2019-02-05 | Advanced Micro Devices, Inc. | System and method for scheduling instructions in a multithread SIMD architecture with a fixed number of registers |
| EP3270371B1 (en) * | 2016-07-12 | 2022-09-07 | NXP USA, Inc. | Method and apparatus for managing graphics layers within a graphics display component |
| CN108021563B (zh) * | 2016-10-31 | 2021-09-07 | 华为技术有限公司 | 一种指令间数据依赖的检测方法和装置 |
| US10359971B2 (en) * | 2017-07-17 | 2019-07-23 | Hewlett Packard Enterprise Development Lp | Storing memory profile data of an application in non-volatile memory |
| WO2019089918A1 (en) | 2017-11-03 | 2019-05-09 | Coherent Logix, Inc. | Programming flow for multi-processor system |
| US10877757B2 (en) * | 2017-11-14 | 2020-12-29 | Nvidia Corporation | Binding constants at runtime for improved resource utilization |
| US11468312B2 (en) | 2018-02-02 | 2022-10-11 | Samsung Electronics Co., Ltd. | Memory management for machine learning training on GPU |
| US11068247B2 (en) | 2018-02-06 | 2021-07-20 | Microsoft Technology Licensing, Llc | Vectorizing conditional min-max sequence reduction loops |
| CN108304218A (zh) * | 2018-03-14 | 2018-07-20 | 郑州云海信息技术有限公司 | 一种汇编代码的编写方法、装置、系统和可读存储介质 |
| US11277455B2 (en) | 2018-06-07 | 2022-03-15 | Mellanox Technologies, Ltd. | Streaming system |
| US10691430B2 (en) * | 2018-08-27 | 2020-06-23 | Intel Corporation | Latency scheduling mehanism |
| US20200106828A1 (en) * | 2018-10-02 | 2020-04-02 | Mellanox Technologies, Ltd. | Parallel Computation Network Device |
| CN111428327A (zh) * | 2018-12-24 | 2020-07-17 | 深圳市中兴微电子技术有限公司 | 一种指令硬件架构的构建方法、装置及存储介质 |
| US12417083B2 (en) | 2019-01-25 | 2025-09-16 | The Regents Of The University Of California | Coalescing operand register file for graphical processing units |
| US11625393B2 (en) | 2019-02-19 | 2023-04-11 | Mellanox Technologies, Ltd. | High performance computing system |
| EP3699770B1 (en) | 2019-02-25 | 2025-05-21 | Mellanox Technologies, Ltd. | Collective communication system and methods |
| US11294685B2 (en) * | 2019-06-04 | 2022-04-05 | International Business Machines Corporation | Instruction fusion using dependence analysis |
| CN110162330B (zh) * | 2019-07-08 | 2021-04-13 | 上海赫千电子科技有限公司 | 一种应用于汽车ecu升级文件的系统及方法 |
| US11580434B2 (en) * | 2019-10-17 | 2023-02-14 | Microsoft Technology Licensing, Llc | Automatic accuracy management for quantum programs via symbolic resource estimation |
| US11200061B2 (en) * | 2019-11-19 | 2021-12-14 | Microsoft Technology Licensing, Llc | Pre-instruction scheduling rematerialization for register pressure reduction |
| CN112862658A (zh) * | 2019-11-28 | 2021-05-28 | 中兴通讯股份有限公司 | Gpu运行方法、装置、设备及存储介质 |
| US11750699B2 (en) | 2020-01-15 | 2023-09-05 | Mellanox Technologies, Ltd. | Small message aggregation |
| US11252027B2 (en) | 2020-01-23 | 2022-02-15 | Mellanox Technologies, Ltd. | Network element supporting flexible data reduction operations |
| US11429310B2 (en) | 2020-03-06 | 2022-08-30 | Samsung Electronics Co., Ltd. | Adjustable function-in-memory computation system |
| TWI850513B (zh) | 2020-03-06 | 2024-08-01 | 南韓商三星電子股份有限公司 | 用於記憶體內計算的方法及用於計算的系統 |
| US11210071B2 (en) | 2020-04-01 | 2021-12-28 | Microsoft Technology Licensing, Llc | Compiler sub expression directed acyclic graph (DAG) remat for register pressure |
| US11876885B2 (en) | 2020-07-02 | 2024-01-16 | Mellanox Technologies, Ltd. | Clock queue with arming and/or self-arming features |
| US11474798B2 (en) * | 2020-08-24 | 2022-10-18 | Huawei Technologies Co., Ltd. | Method and system for optimizing access to constant memory |
| CN112214443B (zh) | 2020-10-22 | 2021-12-03 | 上海壁仞智能科技有限公司 | 设置于图形处理器中的二次卸载装置和方法 |
| CN112230931B (zh) * | 2020-10-22 | 2021-11-02 | 上海壁仞智能科技有限公司 | 适用于图形处理器的二次卸载的编译方法、装置和介质 |
| US11556378B2 (en) | 2020-12-14 | 2023-01-17 | Mellanox Technologies, Ltd. | Offloading execution of a multi-task parameter-dependent operation to a network device |
| US12118359B2 (en) * | 2021-05-20 | 2024-10-15 | Huawei Technologies Co., Ltd. | Method and system for optimizing address calculations |
| US11645076B2 (en) * | 2021-07-26 | 2023-05-09 | International Business Machines Corporation | Register pressure target function splitting |
| US12309070B2 (en) | 2022-04-07 | 2025-05-20 | Nvidia Corporation | In-network message aggregation for efficient small message transport |
| US12524212B2 (en) | 2022-04-15 | 2026-01-13 | Nvidia Corporation | Control of storage aliasing via automatic application of artificial dependences during program compilation |
| US11922237B1 (en) | 2022-09-12 | 2024-03-05 | Mellanox Technologies, Ltd. | Single-step collective operations |
| US12099823B2 (en) * | 2023-01-16 | 2024-09-24 | International Business Machines Corporation | Reducing register pressure |
| CN116155854B (zh) * | 2023-02-20 | 2025-03-25 | 深圳市闪联信息技术有限公司 | 一种局域网互联码的生成方法和装置、解码方法和装置 |
| US12489657B2 (en) | 2023-08-17 | 2025-12-02 | Mellanox Technologies, Ltd. | In-network compute operation spreading |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20050108499A1 (en) * | 2003-11-19 | 2005-05-19 | Bo Huang | Memory access instruction vectorization |
| US20090125893A1 (en) * | 2007-11-13 | 2009-05-14 | Copeland Reid T | Method and apparatus for managing variable assignments in a program |
| TW201106148A (en) * | 2009-06-30 | 2011-02-16 | Intel Corp | Link power savings with state retention |
Family Cites Families (95)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4449196A (en) | 1979-04-27 | 1984-05-15 | Pritchard Eric K | Data processing system for multi-precision arithmetic |
| TW237529B (zh) * | 1990-08-23 | 1995-01-01 | Supercomp Systems Ltd Partnership | |
| IL100990A (en) | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilanguage optimizing compiler using templates in multiple pass code generation |
| US6286135B1 (en) * | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
| DE69804708T2 (de) * | 1997-03-29 | 2002-11-14 | Imec Vzw, Leuven Heverlee | Verfahren und Gerät für Grössenoptimierung von Speichereinheiten |
| US7548238B2 (en) * | 1997-07-02 | 2009-06-16 | Nvidia Corporation | Computer graphics shader systems and methods |
| US6785888B1 (en) * | 1997-08-29 | 2004-08-31 | International Business Machines Corporation | Memory allocator for a multiprocessor computer system |
| US5903761A (en) | 1997-10-31 | 1999-05-11 | Preemptive Solutions, Inc. | Method of reducing the number of instructions in a program code sequence |
| DE69739404D1 (de) * | 1997-12-10 | 2009-06-25 | Hitachi Ltd | Optimiertes speicherzugriffsverfahren |
| US6748587B1 (en) * | 1998-01-02 | 2004-06-08 | Hewlett-Packard Development Company, L.P. | Programmatic access to the widest mode floating-point arithmetic supported by a processor |
| US6256784B1 (en) | 1998-08-14 | 2001-07-03 | Ati International Srl | Interpreter with reduced memory access and improved jump-through-register handling |
| US6757892B1 (en) | 1999-06-24 | 2004-06-29 | Sarnoff Corporation | Method for determining an optimal partitioning of data among several memories |
| US6415311B1 (en) | 1999-06-24 | 2002-07-02 | Ati International Srl | Sign extension circuit and method for unsigned multiplication and accumulation |
| US6438747B1 (en) * | 1999-08-20 | 2002-08-20 | Hewlett-Packard Company | Programmatic iteration scheduling for parallel processors |
| US20020129340A1 (en) | 1999-10-28 | 2002-09-12 | Tuttle Douglas D. | Reconfigurable isomorphic software representations |
| US6523173B1 (en) | 2000-01-11 | 2003-02-18 | International Business Machines Corporation | Method and apparatus for allocating registers during code compilation using different spill strategies to evaluate spill cost |
| US6941549B1 (en) * | 2000-03-31 | 2005-09-06 | International Business Machines Corporation | Communicating between programs having different machine context organizations |
| US20020038453A1 (en) | 2000-08-09 | 2002-03-28 | Andrew Riddle | Method and system for software optimization |
| US7039906B1 (en) * | 2000-09-29 | 2006-05-02 | International Business Machines Corporation | Compiler for enabling multiple signed independent data elements per register |
| GB2367650B (en) | 2000-10-04 | 2004-10-27 | Advanced Risc Mach Ltd | Single instruction multiple data processing |
| US20030028864A1 (en) | 2001-01-29 | 2003-02-06 | Matt Bowen | System, method and article of manufacture for successive compilations using incomplete parameters |
| US20040205740A1 (en) * | 2001-03-29 | 2004-10-14 | Lavery Daniel M. | Method for collection of memory reference information and memory disambiguation |
| JP3763516B2 (ja) | 2001-03-30 | 2006-04-05 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法 |
| US20020144101A1 (en) | 2001-03-30 | 2002-10-03 | Hong Wang | Caching DAG traces |
| US7162716B2 (en) * | 2001-06-08 | 2007-01-09 | Nvidia Corporation | Software emulator for optimizing application-programmable vertex processing |
| US6865614B2 (en) * | 2001-07-02 | 2005-03-08 | Hewlett-Packard Development Company, L.P. | Method for transferring a packed data structure to an unpacked data structure by copying the packed data using pointer |
| US7032215B2 (en) * | 2001-10-11 | 2006-04-18 | Intel Corporation | Method and system for type demotion of expressions and variables by bitwise constant propagation |
| US7107584B2 (en) * | 2001-10-23 | 2006-09-12 | Microsoft Corporation | Data alignment between native and non-native shared data structures |
| US8914590B2 (en) | 2002-08-07 | 2014-12-16 | Pact Xpp Technologies Ag | Data processing method and device |
| US20110161977A1 (en) | 2002-03-21 | 2011-06-30 | Martin Vorbach | Method and device for data processing |
| US7243342B2 (en) | 2002-06-11 | 2007-07-10 | Intel Corporation | Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time |
| US6954841B2 (en) | 2002-06-26 | 2005-10-11 | International Business Machines Corporation | Viterbi decoding for SIMD vector processors with indirect vector element access |
| US7353243B2 (en) * | 2002-10-22 | 2008-04-01 | Nvidia Corporation | Reconfigurable filter node for an adaptive computing machine |
| US7051322B2 (en) * | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
| US7451278B2 (en) * | 2003-02-13 | 2008-11-11 | Silicon Graphics, Inc. | Global pointers for scalable parallel applications |
| JP2004303113A (ja) * | 2003-04-01 | 2004-10-28 | Hitachi Ltd | 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法 |
| US20040221283A1 (en) | 2003-04-30 | 2004-11-04 | Worley Christopher S. | Enhanced, modulo-scheduled-loop extensions |
| US20050071823A1 (en) | 2003-09-29 | 2005-03-31 | Xiaodong Lin | Apparatus and method for simulating segmented addressing on a flat memory model architecture |
| US7124271B2 (en) * | 2003-10-14 | 2006-10-17 | Intel Corporation | Method and system for allocating register locations in a memory during compilation |
| US7567252B2 (en) | 2003-12-09 | 2009-07-28 | Microsoft Corporation | Optimizing performance of a graphics processing unit for efficient execution of general matrix operations |
| US7814467B2 (en) * | 2004-01-15 | 2010-10-12 | Hewlett-Packard Development Company, L.P. | Program optimization using object file summary information |
| US7376813B2 (en) | 2004-03-04 | 2008-05-20 | Texas Instruments Incorporated | Register move instruction for section select of source operand |
| US8689202B1 (en) * | 2004-03-30 | 2014-04-01 | Synopsys, Inc. | Scheduling of instructions |
| US8677312B1 (en) * | 2004-03-30 | 2014-03-18 | Synopsys, Inc. | Generation of compiler description from architecture description |
| US7386842B2 (en) * | 2004-06-07 | 2008-06-10 | International Business Machines Corporation | Efficient data reorganization to satisfy data alignment constraints |
| US7802076B2 (en) * | 2004-06-24 | 2010-09-21 | Intel Corporation | Method and apparatus to vectorize multiple input instructions |
| US7472382B2 (en) * | 2004-08-30 | 2008-12-30 | International Business Machines Corporation | Method for optimizing software program using inter-procedural strength reduction |
| US7389499B2 (en) * | 2004-10-21 | 2008-06-17 | International Business Machines Corporation | Method and apparatus for automatically converting numeric data to a processor efficient format for performing arithmetic operations |
| US7730114B2 (en) * | 2004-11-12 | 2010-06-01 | Microsoft Corporation | Computer file system |
| US7681187B2 (en) * | 2005-03-31 | 2010-03-16 | Nvidia Corporation | Method and apparatus for register allocation in presence of hardware constraints |
| TWI306215B (en) * | 2005-04-29 | 2009-02-11 | Ind Tech Res Inst | Method and corresponding apparatus for compiling high-level languages into specific processor architectures |
| CN100389420C (zh) * | 2005-09-13 | 2008-05-21 | 北京中星微电子有限公司 | 用协处理器加速文件系统操作的方法及装置 |
| US8037465B2 (en) * | 2005-09-30 | 2011-10-11 | Intel Corporation | Thread-data affinity optimization using compiler |
| US7450131B2 (en) * | 2005-09-30 | 2008-11-11 | Intel Corporation | Memory layout for re-ordering instructions using pointers |
| US7694288B2 (en) * | 2005-10-24 | 2010-04-06 | Analog Devices, Inc. | Static single assignment form pattern matcher |
| US20070124631A1 (en) | 2005-11-08 | 2007-05-31 | Boggs Darrell D | Bit field selection instruction |
| JP4978025B2 (ja) * | 2006-02-24 | 2012-07-18 | 株式会社日立製作所 | ポインタの圧縮・伸張方法、これを実行するプログラム、及び、これを用いた計算機システム |
| WO2008002173A1 (en) * | 2006-06-20 | 2008-01-03 | Intel Corporation | Method and apparatus to call native code from a managed code application |
| US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
| US9601199B2 (en) * | 2007-01-26 | 2017-03-21 | Intel Corporation | Iterator register for structured memory |
| US9361078B2 (en) | 2007-03-19 | 2016-06-07 | International Business Machines Corporation | Compiler method of exploiting data value locality for computation reuse |
| US8671401B2 (en) * | 2007-04-09 | 2014-03-11 | Microsoft Corporation | Tiling across loop nests with possible recomputation |
| US8411096B1 (en) * | 2007-08-15 | 2013-04-02 | Nvidia Corporation | Shader program instruction fetch |
| US20090070753A1 (en) | 2007-09-07 | 2009-03-12 | International Business Machines Corporation | Increase the coverage of profiling feedback with data flow analysis |
| US7809925B2 (en) | 2007-12-07 | 2010-10-05 | International Business Machines Corporation | Processing unit incorporating vectorizable execution unit |
| JP5244421B2 (ja) | 2008-02-29 | 2013-07-24 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置およびプログラム分割方法 |
| US8255884B2 (en) * | 2008-06-06 | 2012-08-28 | International Business Machines Corporation | Optimized scalar promotion with load and splat SIMD instructions |
| US20100184380A1 (en) | 2009-01-20 | 2010-07-22 | Qualcomm Incorporated | Mitigating intercarrier and intersymbol interference in asynchronous wireless communications |
| US20100199270A1 (en) | 2009-01-30 | 2010-08-05 | Ivan Baev | System, method, and computer-program product for scalable region-based register allocation in compilers |
| US8713543B2 (en) * | 2009-02-11 | 2014-04-29 | Johnathan C. Mun | Evaluation compiler method |
| US8819622B2 (en) | 2009-09-25 | 2014-08-26 | Advanced Micro Devices, Inc. | Adding signed 8/16/32-bit integers to 64-bit integers |
| US8271763B2 (en) * | 2009-09-25 | 2012-09-18 | Nvidia Corporation | Unified addressing and instructions for accessing parallel memory spaces |
| CA2684226A1 (en) * | 2009-10-30 | 2011-04-30 | Ibm Canada Limited - Ibm Canada Limitee | Eleminating redundant operations for common properties using shared real registers |
| US8578357B2 (en) * | 2009-12-21 | 2013-11-05 | Intel Corporation | Endian conversion tool |
| US8453135B2 (en) | 2010-03-11 | 2013-05-28 | Freescale Semiconductor, Inc. | Computation reuse for loops with irregular accesses |
| CN101833435A (zh) * | 2010-04-19 | 2010-09-15 | 天津大学 | 基于传输触发架构可配置处理器指令冗余消除方法 |
| US8645758B2 (en) * | 2010-04-29 | 2014-02-04 | International Business Machines Corporation | Determining page faulting behavior of a memory operation |
| US8954418B2 (en) * | 2010-05-14 | 2015-02-10 | Sap Se | Performing complex operations in a database using a semantic layer |
| US8799583B2 (en) * | 2010-05-25 | 2014-08-05 | International Business Machines Corporation | Atomic execution over accesses to multiple memory locations in a multiprocessor system |
| JP5583514B2 (ja) * | 2010-08-11 | 2014-09-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム |
| US8538912B2 (en) * | 2010-09-22 | 2013-09-17 | Hewlett-Packard Development Company, L.P. | Apparatus and method for an automatic information integration flow optimizer |
| KR101782373B1 (ko) * | 2010-11-10 | 2017-09-29 | 삼성전자 주식회사 | X-y 스택 메모리를 이용한 컴퓨팅 장치 및 방법 |
| US8997066B2 (en) * | 2010-12-27 | 2015-03-31 | Microsoft Technology Licensing, Llc | Emulating pointers |
| GB2488980B (en) * | 2011-03-07 | 2020-02-19 | Advanced Risc Mach Ltd | Address generation in a data processing apparatus |
| US8566537B2 (en) * | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
| US8640112B2 (en) * | 2011-03-30 | 2014-01-28 | National Instruments Corporation | Vectorizing combinations of program operations |
| US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
| US9092228B2 (en) * | 2012-01-17 | 2015-07-28 | Texas Instruments Incorporated | Systems and methods for software instruction translation from a high-level language to a specialized instruction set |
| JP5840014B2 (ja) * | 2012-02-01 | 2016-01-06 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コンパイル方法、プログラムおよび情報処理装置 |
| US9043582B2 (en) * | 2012-09-14 | 2015-05-26 | Qualcomm Innovation Center, Inc. | Enhanced instruction scheduling during compilation of high level source code for improved executable code |
| US9411558B2 (en) * | 2012-10-20 | 2016-08-09 | Luke Hutchison | Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing |
| US10140403B2 (en) * | 2012-12-01 | 2018-11-27 | Synopsys Inc. | Managing model checks of sequential designs |
| US9396240B2 (en) * | 2013-12-03 | 2016-07-19 | Business Objects Software Ltd. | Extreme visualization enabling extension for large data sets |
| US9710245B2 (en) * | 2014-04-04 | 2017-07-18 | Qualcomm Incorporated | Memory reference metadata for compiler optimization |
| US10444759B2 (en) * | 2017-06-14 | 2019-10-15 | Zoox, Inc. | Voxel based ground plane estimation and object segmentation |
-
2012
- 2012-10-24 US US13/659,802 patent/US20130113809A1/en not_active Abandoned
- 2012-10-24 US US13/659,786 patent/US9009686B2/en active Active
- 2012-10-25 US US13/660,986 patent/US9639336B2/en active Active
- 2012-10-26 US US13/661,478 patent/US10228919B2/en active Active
- 2012-11-05 US US13/669,401 patent/US9436447B2/en active Active
- 2012-11-06 CN CN2012800132283A patent/CN103460188A/zh active Pending
- 2012-11-06 WO PCT/US2012/063757 patent/WO2013070637A1/en not_active Ceased
- 2012-11-06 CN CN2012800066826A patent/CN103339621A/zh active Pending
- 2012-11-06 WO PCT/US2012/063723 patent/WO2013070616A1/en not_active Ceased
- 2012-11-06 CN CN201280006681.1A patent/CN103348317B/zh active Active
- 2012-11-06 WO PCT/US2012/063754 patent/WO2013070635A1/en not_active Ceased
- 2012-11-06 DE DE112012000212T patent/DE112012000212T5/de active Pending
- 2012-11-06 WO PCT/US2012/063756 patent/WO2013070636A1/en not_active Ceased
- 2012-11-06 DE DE112012000195T patent/DE112012000195T5/de active Pending
- 2012-11-06 CN CN201280003006.3A patent/CN104641350A/zh active Pending
- 2012-11-06 WO PCT/US2012/063730 patent/WO2013070621A2/en not_active Ceased
- 2012-11-06 DE DE112012000187T patent/DE112012000187T5/de active Pending
- 2012-11-06 DE DE112012000214T patent/DE112012000214T5/de active Pending
- 2012-11-06 DE DE112012000209T patent/DE112012000209T5/de active Pending
- 2012-11-06 CN CN201280029582.5A patent/CN103608774A/zh active Pending
- 2012-11-07 TW TW101141372A patent/TWI604410B/zh active
- 2012-11-07 TW TW101141357A patent/TWI502509B/zh not_active IP Right Cessation
- 2012-11-07 TW TW101141369A patent/TWI509561B/zh active
- 2012-11-07 TW TW101141361A patent/TWI483182B/zh not_active IP Right Cessation
- 2012-11-07 TW TW101141366A patent/TWI498817B/zh active
-
2018
- 2018-11-19 US US16/195,776 patent/US20190087164A1/en active Pending
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20050108499A1 (en) * | 2003-11-19 | 2005-05-19 | Bo Huang | Memory access instruction vectorization |
| US20090125893A1 (en) * | 2007-11-13 | 2009-05-14 | Copeland Reid T | Method and apparatus for managing variable assignments in a program |
| TW201106148A (en) * | 2009-06-30 | 2011-02-16 | Intel Corp | Link power savings with state retention |
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| TWI509561B (zh) | 在圖形處理器電腦編譯器中最佳化程序間記憶體位址空間的技術 | |
| US8570333B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
| US7568189B2 (en) | Code translation and pipeline optimization | |
| JP4999183B2 (ja) | 並列スレッド・コンピューティングの仮想のアーキテクチャ及び命令セット | |
| TWI633447B (zh) | 最大化圖形處理器中之平行處理之技術 | |
| US9361079B2 (en) | Method for compiling a parallel thread execution program for general execution | |
| US9411715B2 (en) | System, method, and computer program product for optimizing the management of thread stack memory | |
| US20080109795A1 (en) | C/c++ language extensions for general-purpose graphics processing unit | |
| CN103870246A (zh) | 用于线程的simd执行的编译器控制区调度 | |
| US9645802B2 (en) | Technique for grouping instructions into independent strands | |
| US8436862B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
| US20190146817A1 (en) | Binding constants at runtime for improved resource utilization | |
| JP2008276740A5 (zh) | ||
| US11922556B2 (en) | Ray-traced light resampling using screen space visibility | |
| US20230144553A1 (en) | Software-directed register file sharing | |
| US20150145871A1 (en) | System, method, and computer program product to enable the yielding of threads in a graphics processing unit to transfer control to a host processor | |
| US11948246B2 (en) | Spatiotemporal resampling with decoupled shading and reuse | |
| Pickles | White paper-next generation graphics gpu shader and compute libraries | |
| WO2007131089A2 (en) | Code translation and pipeline optimization | |
| CN121255475A (zh) | 内存管理系统、方法、编译方法、设备、介质和产品 | |
| CN116324893A (zh) | 实时焦散映射 |