TWI807301B - 適應於圖形處理器的二次卸載的編譯裝置和方法和電腦程式產品 - Google Patents
適應於圖形處理器的二次卸載的編譯裝置和方法和電腦程式產品 Download PDFInfo
- Publication number
- TWI807301B TWI807301B TW110113317A TW110113317A TWI807301B TW I807301 B TWI807301 B TW I807301B TW 110113317 A TW110113317 A TW 110113317A TW 110113317 A TW110113317 A TW 110113317A TW I807301 B TWI807301 B TW I807301B
- Authority
- TW
- Taiwan
- Prior art keywords
- execution
- graphics processor
- program
- codes
- code
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/458—Synchronisation, e.g. post-wait, barriers, locks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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; CALCULATING OR 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/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本發明涉及一種適應於圖形處理器的二次卸載的編譯方法、裝置和電腦程式產品,其中該編譯方法包含:將第一程式核中的多個執行程式碼重新組織成第二程式核。其中,第二程式核包含操作表和計算程式碼,操作表包含多個記錄,計算程式碼包含一部分的執行程式碼和同步請求,每個同步請求包含指向一個記錄的資訊,計算程式碼中的執行程式碼和同步請求的順序相符於第一程式核中的執行程式碼的順序,使得圖形處理器中的計算單元能夠執行計算程式碼,以及圖形處理器中的引擎能夠依據操作表中的每個記錄的內容讓圖形處理器中的或圖形處理器外的元件完成指定操作。本發明通過如上所述的編譯方法,讓引擎能夠將適合的操作給圖形處理器中的或圖形處理器外的其他元件執行,提供更好的執行效率和更多的應用彈性。
Description
本發明涉及用於通用計算領域的圖形處理器,尤指一種適應於圖形處理器的二次卸載的編譯方法、裝置和電腦程式產品。
目前包含圖形處理器(Graphics Processing Unit,GPU)的計算系統中還包含中央處理器(Central Processing Unit,CPU)。中央處理器適合處理傳統的應用程式的數值運算,而圖形處理器適合處理電腦圖形(Computer Graphics)以及大規模的併發計算。這樣的計算系統被編程後可執行各種應用任務,包含但不限於:線性和非線性資料轉化、資料庫操作、大數據運算、人工智慧計算、音訊、視訊資料的編碼、解碼、建模操作、圖像渲染操作等。為了實現異構高併發的計算,本發明提出一種適應於圖形處理器的二次卸載的編譯裝置、方法和電腦程式產品。
有鑑於此,如何減輕或消除上述相關領域的缺失,實為有待解決的問題。
本發明的實施例涉及一種適應於圖形處理器的二次卸載的編譯方法,包含:將第一程式核中的多個執行程式碼重新組織成第二程式核。其中,第二程式核包含操作表和計算程式碼。操作表包含多個記錄。
計算程式碼包含一部分的執行程式碼和同步請求,並且每個同步請求包含指向一個記錄的資訊。此外,計算程式碼中的執行程式碼和同步請求的順序相符於第一程式核中的執行程式碼的順序,使得圖形處理器中的計算單元能夠執行計算程式碼,以及圖形處理器中的引擎能夠依據操作表中的每個記錄的內容讓圖形處理器中的或圖形處理器外的元件完成指定操作。
本發明還涉及一種電腦程式產品,用於儲存能夠被處理單元執行的程式碼,並且當程式碼被處理單元執行時實現如上所述的編譯方法。
本發明的實施例還涉及一種適應於圖形處理器的二次卸載的編譯裝置,包含:儲存裝置;以及處理單元。處理單元用於將第一程式核中的多個執行程式碼重新組織成第二程式核,以及儲存第二程式核至儲存裝置,以供圖形處理器執行,其中,第二程式核包含操作表和計算程式碼。操作表包含多個記錄。計算程式碼包含一部分的執行程式碼和同步請求,並且每個同步請求包含指向一個記錄的資訊。計算程式碼中的執行程式碼和同步請求的順序相符於第一程式核中的執行程式碼的順序,使得圖形處理器中的計算單元能夠執行計算程式碼,以及圖形處理器中的引擎能夠依據操作表中的每個記錄的內容讓圖形處理器中的或圖形處理器外的元件完成指定操作。
上述實施例的優點之一,通過如上所述的編譯方法,讓引擎能夠將適合的操作給圖形處理器中的或圖形處理器外的其他元件執行,提供更好的執行效率和更多的應用彈性。
本發明的其他優點將搭配以下的說明和圖式進行更詳細的解說。
10:電子裝置
100:計算系統
110:圖形處理器
120:命令處理器
130:計算單元
150:DMA/SDMA控制器
160:二級快取
170,185:記憶體
180:中央處理器
190,600:匯流排架構
210~270:裝置程式碼
410:全局同步引擎
412:介面
414:控制器
416:記憶體
440:特殊應用積體電路
450:場效可編程邏輯閘陣列
460:加速器
510:編譯器
532:運行時
534:驅動程式
552:原始程式核
554,830:全局同步引擎操作表
556,850:計算程式碼
570,810:重構後程式核
60:編譯電腦
610:處理單元
620:記憶體
630:顯示介面
640:輸入介面
650:儲存裝置
S710~S760:方法步驟
851~857:重構後程式碼
S910~S960:方法步驟
t1,t2,t3:時間點
圖1為依據本發明實施例的用於實施一次卸載的計算系統的方塊圖。
圖2為依據本發明實施例的裝置程式碼示意圖。
圖3為依據本發明實施例的二次卸載示意圖。
圖4為依據本發明實施例的用於實施二次卸載的計算系統的系統架構圖。
圖5為依據本發明實施例的二次卸載的實施過程示意圖。
圖6為依據本發明實施例的編譯電腦的系統架構圖。
圖7為依據本發明實施例的編譯方法流程圖。
圖8為依據本發明實施例的重構後的程式核的示意圖。
圖9為依據本發明實施例的由計算單元的控制電路執行的控制方法流程圖。
圖10顯示依據本發明實施例的應用二次卸載的順序執行的範例。
圖11顯示依據本發明實施例的應用二次卸載的並行執行的範例。
以下說明為完成發明的較佳實現方式,其目的在於描述本發明的基本精神,但並不用以限定本發明。實際的發明內容必須參考之後的權利要求範圍。
必須了解的是,使用於本說明書中的”包含”、”包括”等詞,用以表示存在特定的技術特徵、數值、方法步驟、作業處理、元件以及/或組件,但並不排除可加上更多的技術特徵、數值、方法步驟、作業處理、元件、組件,或以上的任意組合。
於權利要求中使用如”第一”、”第二”、”第三”等詞是用來修飾權利要求中的元件,並非用來表示之間具有優先順序,前置關係,或者是一個元件先於另一個元件,或者是執行方法步驟時的時間先後順序,僅用來區別具有相同名字的元件。
必須了解的是,當元件描述為”連接”或”耦接”至另一元件時,可以是直接連結、或耦接至其他元件,可能出現中間元件。相反地,當元件描述為”直接連接”或”直接耦接”至另一元件時,其中不存在任何中間元件。使用來描述元件之間關係的其他語詞也可類似方式解
讀,例如”介於”相對於”直接介於”,或者是”鄰接”相對於”直接鄰接”等等。
參考圖1。電子裝置10可設置包含圖形處理器(Graphics Processing Unit,GPU)110的計算系統100,讓計算系統100被編程後可執行各種應用任務,包含但不限於:線性和非線性資料轉化、資料庫操作、大數據運算、人工智慧計算、音訊、視訊資料的編碼、解碼、建模操作、圖像渲染操作等。包含圖形處理器110的計算系統100中還包含中央處理器(Central Processing Unit,CPU)180。圖形處理器(Graphics Processing Unit,GPU)110又可稱為通用圖形處理器(General-Purpose computing on Graphics Processing Unit,GPGPU)。電子裝置10可實施為大型主機、工作站、個人電腦、筆記本電腦(Laptop PC)、平板電腦、行動電話、數位相機、數位攝影機等電子產品。圖形處理器110和中央處理器180各自擁有記憶體170和185,並且通過匯流排架構190相互連接以傳遞資料、地址、控制訊號等,例如快速周邊元件互聯(Peripheral Component Interconnect Express,PCI-E)。
一般來說,中央處理器180和圖形處理器110適合執行的任務不同,中央處理器180較適合處理複雜的循序邏輯、複雜的控制流、與系統的輸入輸出裝置間的交互,而圖形處理器110較適合單指令多資料的併發運算,例如單指令多資料流(Single Instruction Multiple Data,SIMD)指令、單指令多執行緒(Single Instruction Multiple Thread,SIMT)技術等。為了有效運用將圖形處理器110能力,中央處理器180可卸載(Offload)一系列的裝置程式碼給圖形處理器110,其過程大致如下所述:中央處理器180在記憶體185中準備裝置程式碼(Device Code)所需的資料,然後發出命令給圖形處理器110中的命令處理器(Command Processor,CP)120,請求從記憶體185複製資料到圖形處理器110中的記憶體170。命令處理器120可
通過直接記憶體存取/系統直接記憶體存取控制器(Direct Memory Access/System Direct Memory Access,DMA/SDMA Controller)150以完成記憶體間的資料複製和儲存。中央處理器180把要執行的裝置程式碼發送給圖形處理器110,然後發送命令給圖形處理器110,用於啟動裝置程式碼的執行。圖形處理器110中的計算單元(Compute Unit,CU)130執行這些裝置程式碼指示的任務,從記憶體170讀取資料、進行各種計算、寫入計算結果到記憶體170。此時,裝置程式碼的執行都由計算單元130統籌。當計算單元130執行完後,通過命令處理器120通知中央處理器180,這些裝置程式碼已經執行完畢的資訊。中央處理器180接著將記憶體170中的計算結果通過匯流排架構190遷移回記憶體185。這過程也可稱為一次卸載(First Offload)。
舉例來說,參考圖2。裝置程式碼210指示將記憶體170中的資料A預取(Preload)至二級快取160。裝置程式碼220指示對二級快取160中的資料A進行運算。裝置程式碼230指示清理(Flush)二級快取160,用於清除二級快取160中的資料A。裝置程式碼240指示將記憶體170中的資料B預取至二級快取160。裝置程式碼250指示對二級快取160中的資料B進行運算。裝置程式碼260指示清理二級快取160,用於清除二級快取160中的資料B。裝置程式碼270指示對記憶體170中的資料A和B進行歸併操作(All-Reduce Operation)而成為資料C。歸併操作可包含各式各樣的運算,例如,加法、減法、乘法、除法、取大值、取小值、各種比較等。
在一些實施方式中,圖形處理器110讓所有的裝置程式碼的執行都給計算單元130主導。然而,這可能造成計算單元130的工作量龐大,產生系統運行的瓶頸。並且,當計算單元130運行時,圖形處理器110中的其他元件(如命令處理器120、二級快取(Layer 2,L2 Cache)160、直接記憶體存取/系統直接記憶體存控制器150等)都
處於等待閒置狀態,造成系統的運行沒有效率。此外,某些裝置程式碼的任務並不適合交由計算單元130完成,而是適合交由其他元件完成,例如二級快取(Layer 2-L2 Cache)160、直接記憶體存取/系統直接記憶體存控制器150等。舉例來說,裝置程式碼210、230~240、260~270就不適合交由計算單元130完成。如果讓計算單元130執行裝置程式碼210或240的任務,則計算單元130需要發出命令給記憶體170,用於從記憶體170中的指定地址讀取資料並儲存至二級快取160。如果讓計算單元130執行裝置程式碼230或260的任務,則計算單元130需要發出命令給記憶體170,用於清除二級快取160中指定地址的資料。如果讓計算單元130執行裝置程式碼270的任務,則計算單元130依序發出命令給記憶體170及二級快取160,用於分別從記憶體170中的指定地址讀取資料A和B並儲存至二級快取160,以及從二級快取160的指定地址讀取資料A和B並儲存至計算單元130中的一級快取(Layer 1-L1 Cache),並且在運算完成後依序發出命令給二級快取160及記憶體170,用於分別從計算單元130中的一級快取讀取資料C並儲存至二級快取160,以及從二級快取160讀取資料C並儲存至記憶體170中的指定地址。因此,由計算單元130主導執行上述裝置程式碼的任務可能阻塞了後續裝置程式碼的執行,消耗大量的時間(也就是圖形處理器110的時鐘週期)、記憶體頻寬(Memory Bandwidth)等寶貴的系統資源,影響整體性能。
為瞭解決上述實施方式的缺點,從一個方面來說,本發明實施例在圖形處理器110執行二次卸載(Secondary Offload),用於將中央處理器180傳送來的裝置程式碼的任務再交給適合的元件執行,包含圖形處理器110之中的或圖形處理器110外的適合元件。
在二次卸載的一些實施例,參考圖3,圖形處理器110可將裝置程式碼220和250的任務交給計算單元130完成。計算單元130可執行各式各樣的操作,例如,整數、浮點數的加法和乘法計算、比較操作、
布林(Boolean)運算、位元位移、代數函數(如平面插值、三角函數、指數函數、對數函數)等。圖形處理器110可將裝置程式碼210、230、240和260的任務交給二級快取160完成,並可將裝置程式碼270的任務交給DMA/SDMA控制器150完成,讓DMA/SDMA控制器150直接從記憶體170中的指定地址讀取資料並儲存至計算單元130中的一級快取,並且從計算單元130的一級快取讀取計算結果並儲存至記憶體170中的指定地址。
在二次卸載的另一些實施例,圖形處理器110可將特定裝置程式碼的任務交給圖形處理器110外但不包含中央處理器180的元件執行,例如特殊應用積體電路(Application Specific Integrated Circuit,ASIC)、場效可編程邏輯閘陣列(Field Programmable Gate Array,FPGA)、加速器(Accelerator)等。
在二次卸載的另一些實施例,圖形處理器110可將適合中央處理器180執行的裝置程式碼再交回給中央處理器180,例如,包括大段循序邏輯、複雜控制流(如If-else條件判斷跳轉)、與系統輸入輸出有大量交互的裝置程式碼等。
從一個方面來說,參考圖4,為了實現二次卸載來提升系統的整體效能,本發明實施例在圖形處理器110中設置全局同步引擎(Global Synchronization Engine,GSE)410,用於搭配計算單元130執行各種類型的順序和併發任務。全局同步引擎410通過內部匯流排架構420與命令處理器120、計算單元130、DMA/SDMA控制器150、二級快取160、記憶體170和其他元件相互連接以傳遞裝置程式碼、資料、地址、控制訊號等,並且通過命令處理器120和外部匯流排架構190與中央處理器180、特殊應用積體電路440、場效可編程邏輯閘陣列450、加速器460和其他元件相互連接以傳遞裝置程式碼、資料、地址、控制訊號等。如上所述的元件形成異構系統(Heterogenous System),而全局同步引擎410則用於協調異構系統
中各個模組的工作。全局同步引擎410包含控制器414,用於完成裝置程式碼的二次卸載的工作。全局同步引擎410還包含介面412和記憶體416,介面412用於使用特定通信協定於其他設置在內部匯流排架構420上的其他模組通信,記憶體416用於儲存即將進行執行操作的必要資訊。
從另一個方面來說,參考圖5,本發明實施例不要求程式開發者因應如圖4的硬體架構來編寫程式碼,而是通過編譯器510分析程式開發者已經編寫完成的程式核(Kernel)552中的執行程式碼,把程式核552中的執行程式碼重新組織成適應於如圖4所述的異構系統的程式核570,包含GSE操作表(Operation Table)554和計算程式碼556,使得命令處理器120將計算程式碼556交給計算單元130執行,並且把GSE操作表554交給全局同步引擎410,使得全局同步引擎410據以指示其他元件執行特定任務(也可稱為二次卸載),如DMA/SDMA控制器150、二級快取160、記憶體170、中央處理器180、特殊應用積體電路440、場效可編程邏輯閘陣列450、加速器460等。
整個實施過程可分為兩個階段:編譯階段;和運行階段。在編譯階段,編譯器510進行程式碼的重構。在運行階段,通過命令處理器120和全局同步引擎410的協同合作,實現多模組(或元件)的併發執行。
通常,程式開發者可通過編譯電腦完成編譯階段。參考圖6,編譯電腦60包含處理單元610、記憶體620、顯示介面630、輸入介面640和儲存裝置650。處理單元610可使用多種方式實施,如使用通用硬體(例如,單處理器、具有並行處理能力的多處理器、圖形處理器或其他具有運算能力的處理器),並且在執行編譯器510的程式碼時,提供如後所述的功能。記憶體620可為動態隨機存取記憶體(Dynamic Random Access Memory,DRAM),提供揮發性的儲存
空間,用於快取處理單元610在執行編譯的過程中所需要的資料,例如,變數、資料表等,以及從儲存裝置650讀取的資料,例如待分析的程式核552。儲存裝置650可為硬碟(Hard Disk)、固態硬碟等,提供非揮發性的儲存空間,用於儲存重構後的GSE操作表554和計算程式碼556。處理單元610另可通過顯示介面630和輸入介面640分別連接顯示器和輸入裝置。
在編譯階段中,處理單元610載入並執行編譯器510的程式碼時可實現如圖7所示的方法流程圖,用於根據原來的程式核552中的執行程式碼產生可適應於如圖4所述的異構系統的程式核570,包含GSE操作表554和計算程式碼556。在另一些實施例中,GSE操作表554和計算程式碼556也可讓不同於圖4所述的異構系統實現多模組的併發執行,本發明並不因此受限制。詳細步驟說明如下:
步驟S710:獲取原始程式核552中的第一個或下一個執行程式碼。
步驟S720:判斷獲取的執行程式碼的操作是否適合由計算單元130執行。如果是,流程繼續進行步驟S730的處理。否則,流程繼續進行步驟S740的處理。當編譯器510發現獲取的執行程式碼的操作不適合由計算單元130執行時,就把這個執行程式碼標注出來。舉例來說,以下操作不適合由計算單元130執行:從記憶體中預取資料至二級快取的操作;對二級快取的指定局部進行清理的操作;對記憶體中的多段資料進行歸併操作;大段循序邏輯的操作;具有複雜的控制流的操作(如If-else條件判斷跳轉等);與系統輸入輸出有大量交互的操作。
步驟S730:將獲取的執行程式碼增加到重構後的計算程式碼556。這個新增到重構後計算程式碼556中的執行程式碼又可稱為執行指令。此外,編譯器510更判斷此執行程式碼的執行是否需要等待之
前獲取的執行程式碼執行完畢。如果需要,新增此執行程式碼需要同步的資訊。如果不需要,新增此執行程式碼不需要同步的資訊。編譯器510可使用同步旗標(Synchronization Flag)來表示:「1」代表需要;「0」代表不需要。新增到重構後的計算程式碼556的執行順序相符於獲取的執行程式碼在原始程式核552中的順序。
步驟S740:增加相應於獲取的執行程式碼的記錄(Entry)至GSE操作表554。記錄中包含此操作由哪個模組(如DMA/SDMA控制器150、二級快取160、記憶體170、中央處理器180、特殊應用積體電路440、場效可編程邏輯閘陣列450、加速器460或其他不是計算單元130的元件)運行的資訊。例如,步驟S720中範例的第一個和第二個操作適合由二級快取160執行,第三個操作適合由DMA/SDMA控制器150執行,第四個至第六個操作適合中央處理器180執行。此外,記錄中還包含此操作如何運行的資訊,如操作命令和操作參數,相應於步驟S710中獲取的執行程式碼。
步驟S750:增加同步請求(Synchronization Hook)至重構後的計算程式碼556,每個同步請求攜帶參數,用於指向GSE操作表554的新增加記錄。此外,編譯器510更判斷此同步請求的執行是否需要等待之前獲取的執行程式碼執行完畢。如果需要,新增此同步請求需要同步的資訊。如果不需要,新增此同步請求不需要同步的資訊。編譯器510可使用同步旗標來表示:「1」代表需要;「0」代表不需要。增加到重構後的計算程式碼556的同步請求的順序相符於獲取的執行程式碼在原始程式核552中的順序。
步驟S760:判斷是否原始程式核552中的所有執行程式碼都處理完畢。如果是,結束編譯。否則,流程繼續進行步驟S710的處理。
參考圖5中的範例,由於原始程式核552中的執行程式碼1和執行程式碼3不適合交給計算單元130執行,因此,通過編譯器510編譯後,GSE操作表554中包含了兩個記錄,第一個記錄儲存了操作1適合由
那個模組運行以及如何運行的資訊,而第二個記錄儲存了操作3適合由那個模組運行以及如何運行的資訊。在重構後的計算程式碼556中,原來的執行程式碼1被替換成同步請求,攜帶指向GSE操作表554中第一個記錄的資訊,並且原來的執行程式碼3被替換成同步請求,攜帶指向GSE操作表554中第二個記錄的資訊。編譯後的GSE操作表554和計算程式碼556會儲存到電子裝置10中的儲存裝置,使得通用圖形處理器100能夠運行重構後的程式核570。
在另一些實施例中,電子裝置10也可用於完成編譯階段。中央處理器180可載入並執行編譯器510的程式碼已完成如圖7所示的方法流程圖,本發明並不局限於用專屬的編譯電腦完成編譯階段。
參考圖5,中央處理器180可執行運行時(Runtime)532和驅動程式534的程式碼。在運行階段,運行時532收到用戶請求運行程式核570的程式碼之後,把程式核570交給驅動程式534。驅動程式534發現程式核570包含兩個部分:GSE操作表554和計算程式碼556。於是,驅動程式534通知命令處理器120載入程式核570(也可當作啟動一次卸載)。命令處理器120將GSE操作表554儲存到全局同步引擎410中的記憶體416,使得全局同步引擎410中的控制器414能夠完成GSE操作表554中指示的操作。接著,命令處理器120將計算程式碼556交給計算單元130,啟動程式碼的執行。
參考圖8的另一個範例,命令處理器120接收到程式核810,包含GSE操作表830和計算程式碼850。GSE操作表830包含四筆記錄,每筆記錄中的冒號之前包含由那個模組運行的資訊(例如,「L2」代表二級快取160,「DMA」代表DMA/SDMA控制器150等),每筆記錄中的冒號之後包含如何運行的資訊(細節可參考以上關於圖2的說明)。計算程式碼850包含七個程式碼851至857。其中,程式碼851、853、855和856是同步請求,每個同步請求都帶有同步旗標(顯示在括弧中),「S」代表需要同步,「NS」代表不需要同步。
程式碼852、854和857是能夠讓計算單元130執行的程式碼,每個程式碼都帶有同步旗標(顯示在括弧中),「S」代表需要同步,「NS」代表不需要同步。
計算單元130包含控制電路,用於控制計算程式碼850的執行。參考圖9所示的由計算單元130的控制電路執行的控制方法流程圖。
步驟S910:提取計算程式碼850中的第一個或下一個程式碼。
步驟S920:判斷此程式碼是否能夠被執行。如果是,則流程繼續進行步驟S940的處理。否則,流程繼續進行步驟S930的處理。舉例來說,當此程式碼所關聯的同步旗標指出不需要等待前一個程式碼執行完畢時,代表此程式碼能夠被執行。當此程式碼所關聯的同步旗標指出需要等待前一個程式碼執行完畢且前一個程式碼已經執行完畢時,代表此程式碼能夠被執行。當此程式碼所關聯的同步旗標指出需要等待前一個程式碼執行完畢且前一個程式碼還沒執行完畢時,代表此程式碼不能夠被執行。
步驟S930:等待一段預設的時間。
步驟S940:判斷提取的程式碼是否是同步請求。如果是,則流程繼續進行步驟S960的處理。否則(也就是提取的程式碼是能夠被計算單元執行的程式碼),流程繼續進行步驟S950的處理。
步驟S950:依據程式碼執行指定的計算。
步驟S960:向全局同步引擎410發出攜帶記錄編號的請求。全局同步引擎410收到請求後,搜索GSE操作表830以獲取記錄編號所指的記錄,並且依據記錄中的資訊通過命令處理器120發出適當命令給適當的元件。全局同步引擎410從元件收到執行完畢的資訊後,通知計算單元130此請求已經完成的資訊。
參考圖10。由於程式碼852需要等待前一個程式碼執行完畢才能繼續執行,因此計算單元130在時間點t1為程式碼851發出請求和記錄編號#1給全局同步引擎410後,程式碼852不能馬上被執行。全局同
步引擎410中的控制器414通過介面412收到請求後,搜索記憶體416中的GSE操作表830以獲取記錄編號#1的記錄,依據記錄編號#1的記錄內容通過介面412以指示命令處理器120發出命令給二級快取160,用於將記憶體170中的資料A預取至二級快取160。全局同步引擎410中的控制器414通過介面412從二級快取160收到執行完畢的資訊後,在時間點t2通過介面412通知計算單元130關於此請求已經處理完成的資訊。之後,在時間點t3,計算單元130依據程式碼852的指示對二級快取160中的資料A進行運算。
參考圖11。由於程式碼857不需要等待前一個程式碼執行完畢就能夠被執行,因此計算單元130在時間點t1為程式碼856發出請求和記錄編號#4給全局同步引擎410後,就能在時間點t2執行程式碼857,用於對二級快取160中的資料D進行運算。全局同步引擎410中的控制器414通過介面412收到請求後,搜索記憶體416中的GSE操作表830以獲取記錄編號#4的記錄,依據記錄編號#4的記錄內容通過介面412以指示命令處理器120發出命令給DMA/SDMA控制器150,用於對記憶體170中的資料A和B進行歸併操作而成為資料C。全局同步引擎410中的控制器414通過介面412從DMA/SDMA控制器150收到執行完畢的資訊後,在時間點t3通過介面412通知計算單元130關於此請求已經處理完成的資訊。因此,在時間點t1至t3之間,計算單元130和DMA/SDMA控制器150都在運行,提高了併發度,能夠減少程式核810的執行時間。
上述實施例的優點之一,通過上述全局同步引擎410的設置和程式核的重構,可讓計算單元130可以專注執行自己最具優勢的純計算任務,減少花費時鐘週期以執行純計算以外的任務,並減少對記憶體頻寬的佔用。
上述實施例的另一個優點,由於二次卸載可通過上述全局同步引擎410讓適合的操作給中央處理器180或者圖形處理器110外的其他元件執行,提供更多的應用彈性。
傳統整個程式核的執行會在中央處理器180和圖形處理器110間交替執行,使得整個程式核包含交錯的GPU程式碼和CPU程式碼。當中央處理器180執行完CPU程式碼後,將後續的GPU程式碼(也就是裝置程式碼)卸載到圖形處理器110執行。待圖形處理器110執行完後,中央處理器180再接著執行另一段CPU程式碼。如此反覆交替到整個程式核執行完成。然而這樣頻繁的卸載和等待圖形處理器110執行完畢的交互也降低執行效率。上述實施例的另一個優點在於,中央處理器180可一次性卸載更多的裝置程式碼給圖形處理器110,再由上述全局同步引擎410將其中少數適合的操作二次卸載回中央處理器180,避免過多的中央處理器180和圖形處理器110之間的任務提交與等待,提高運算資源的利用率。
在另一些實施例中,GSE操作表554和計算程式碼556可以不在編譯階段由編譯器510產生,替代性地,在運行階段由計算單元130產生。計算單元130在原來的程式核552中發現不適合自己執行的執行程式碼時,直接產生如GSE操作表554或830所述的相應記錄,並把產生的相應記錄和請求一起傳送給全局同步引擎410,用於指示全局同步引擎410依據此相應記錄讓圖形處理器110中的或圖形處理器110外的元件完成操作。所屬技術領域人員可適度修改圖9的步驟S940和S960,用於整合如上所述的技術方案。
本發明所述的方法中的全部或部分步驟可以計算機指令實現,例如編譯器、執行時、驅動程式等。此外,也可實現於其他類型程式。所屬技術領域具有通常知識者可將本發明實施例的方法撰寫成計算機指令,為求簡潔不再加以描述。依據本發明實施例方法實施的計算機指令可儲存於適當的電腦可讀取媒體,例如DVD、CD-ROM、
USB碟、硬碟,亦可置於可通過網路(例如,網際網路,或其他適當載具)存取的網路伺服器。
雖然圖1、圖4、圖6中包含了以上描述的元件,但不排除在不違反發明的精神下,使用更多其他的附加元件,已達成更佳的技術效果。此外,雖然圖7、圖9的流程圖採用指定的順序來執行,但是在不違反發明精神的情況下,熟習此技藝人士可以在達到相同效果的前提下,修改這些步驟間的順序,所以,本發明並不侷限於僅使用如上所述的順序。此外,熟習此技藝人士亦可以將若干步驟整合為一個步驟,或者是除了這些步驟外,循序或平行地執行更多步驟,本發明亦不因此而侷限。
雖然本發明使用以上實施例進行說明,但需要注意的是,這些描述並非用以限縮本發明。相反地,此發明涵蓋了熟習此技藝人士顯而易見的修改與相似設置。所以,申請權利要求範圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設置。
S710~S760:方法步驟
Claims (12)
- 一種編譯方法,適用於圖形處理器的二次卸載,由處理器單元執行,包含:將第一程式核中的多個執行程式碼重新組織成第二程式核,其中,上述第二程式核包含操作表和計算程式碼,其中,上述操作表包含多個記錄,其中,上述計算程式碼包含一部分的上述執行程式碼和同步請求,並且每個上述同步請求包含指向一個上述記錄的資訊,其中,上述計算程式碼中的上述執行程式碼和上述同步請求的順序相符於上述第一程式核中的上述執行程式碼的順序,使得上述圖形處理器中的計算單元能夠執行上述計算程式碼,以及上述圖形處理器中的引擎能夠依據上述操作表中的每個上述記錄的內容指示上述圖形處理器中的或上述圖形處理器外的元件完成指定操作,其中,在上述第一核中的上述多個執行程式碼重新組織成上述第二程式核的步驟中,包含:判斷上述第一程式核中的每個上述執行程式碼是否適合由上述圖形處理器中的上述計算單元執行;如果是,則上述適合的執行程式碼增加到上述計算程式碼中;以及否則,增加相應於上述不適合的執行程式碼的記錄至上述操作表,並且增加同步請求到上述計算程式碼中,用於指向上述增加的記錄。
- 如請求項1所述的編譯方法,其中,上述計算程式碼中的每個上述執行程式碼或上述同步請求帶有同步旗標,用於指出每個上述執 行程式碼或上述同步請求的執行是否需要等待前一個執行程式碼或同步請求執行完畢。
- 如請求項1所述的編譯方法,包含:儲存上述第二程式核至儲存裝置,以供上述圖形處理器執行。
- 如請求項1所述的編譯方法,其中,每個上述記錄包含一個操作由上述圖形處理器中的或上述圖形處理器外的特定元件運行的資訊,以及包含上述操作如何運行的資訊。
- 如請求項4所述的編譯方法,其中,每個上述記錄包含操作命令和操作參數。
- 如請求項1所述的編譯方法,其中,上述圖形處理器中的元件為二級快取或直接記憶體存取/系統直接記憶體存取控制器,以及上述圖形處理器外的元件為中央處理器。
- 一種電腦程式產品,包含程式碼,其中,當處理單元執行上述程式碼時,實施如請求項1至6中任一項所述的編譯方法。
- 一種編譯裝置,適應於圖形處理器的二次卸載,包含:儲存裝置;以及處理單元,耦接上述儲存裝置,用於將第一程式核中的多個執行程式碼重新組織成第二程式核,以及儲存上述第二程式核至上述儲存裝置,以供上述圖形處理器執行,其中,上述第二程式核包含操作表和計算程式碼,其中,上述操作表包含多個記錄, 其中,上述計算程式碼包含一部分的上述執行程式碼和同步請求,並且每個上述同步請求包含指向一個上述記錄的資訊,其中,上述計算程式碼中的上述執行程式碼和上述同步請求的順序相符於上述第一程式核中的上述執行程式碼的順序,使得上述圖形處理器中的計算單元能夠執行上述計算程式碼,以及上述圖形處理器中的引擎能夠依據上述操作表中的每個上述記錄的內容指示上述圖形處理器中的或上述圖形處理器外的元件完成指定操作,其中,上述處理單元在重新組織的操作中,判斷上述第二程式核中的每個上述執行程式碼是否適合由上述圖形處理器中的上述計算單元執行;如果是,則上述適合的執行程式碼增加到上述計算程式碼中;否則,增加相應於上述不適合的執行程式碼的記錄至上述操作表,並且增加同步請求到上述計算程式碼中,用於指向上述增加的記錄。
- 如請求項8所述的編譯裝置,其中,上述計算程式碼中的每個上述執行程式碼或上述同步請求帶有同步旗標,用於指出每個上述執行程式碼或上述同步請求的執行是否需要等待前一個執行程式碼或同步請求執行完畢。
- 如請求項8所述的編譯裝置,其中,每個上述記錄包含操作由上述圖形處理器中的或上述圖形處理器外的特定元件運行的資訊,以及包含上述操作如何運行的資訊。
- 如請求項10所述的編譯裝置,其中,每個上述記錄包含操作命令和操作參數。
- 如請求項8所述的編譯裝置,其中,每個上述圖形處理器中的元件為二級快取或直接記憶體存取/系統直接記憶體存取控制器,以及上述圖形處理器外的元件為中央處理器。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011140485.6A CN112230931B (zh) | 2020-10-22 | 2020-10-22 | 适用于图形处理器的二次卸载的编译方法、装置和介质 |
CN202011140485.6 | 2020-10-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202217553A TW202217553A (zh) | 2022-05-01 |
TWI807301B true TWI807301B (zh) | 2023-07-01 |
Family
ID=74109073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110113317A TWI807301B (zh) | 2020-10-22 | 2021-04-14 | 適應於圖形處理器的二次卸載的編譯裝置和方法和電腦程式產品 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11748077B2 (zh) |
CN (1) | CN112230931B (zh) |
TW (1) | TWI807301B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201207735A (en) * | 2010-04-28 | 2012-02-16 | Ericsson Telefon Ab L M | Technique for GPU command scheduling |
US20130160016A1 (en) * | 2011-12-16 | 2013-06-20 | Advanced Micro Devices, Inc. | Allocating Compute Kernels to Processors in a Heterogeneous System |
TW201333874A (zh) * | 2011-11-07 | 2013-08-16 | Nvidia Corp | 在圖形處理器電腦編譯器中最佳化程序間記憶體位址空間的技術 |
US20140259016A1 (en) * | 2013-03-06 | 2014-09-11 | Nvidia Corporation | System and method for runtime scheduling of gpu tasks |
US20150187040A1 (en) * | 2013-12-27 | 2015-07-02 | Jayanth N. Rao | Scheduling and dispatch of gpgpu workloads |
CN104899481A (zh) * | 2015-06-17 | 2015-09-09 | 上海斐讯数据通信技术有限公司 | 防止应用程序反编译的系统及其方法 |
US20170236246A1 (en) * | 2014-09-12 | 2017-08-17 | Intel Corporation | Facilitating dynamic parallel scheduling of command packets at graphics processing units on computing devices |
CN110838992A (zh) * | 2018-08-15 | 2020-02-25 | 丛林网络公司 | 在不同网络堆栈中的内核模块间传送分组的系统和方法 |
CN110852930A (zh) * | 2019-10-25 | 2020-02-28 | 华中科技大学 | 一种基于OpenCL的FPGA图处理加速方法和系统 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7028295B2 (en) | 2001-10-31 | 2006-04-11 | Seiko Epson Corporation | Dynamic java class loading for application execution |
US7920701B1 (en) | 2004-12-15 | 2011-04-05 | Nvidia Corporation | System and method for digital content protection |
TWI390408B (zh) | 2005-12-14 | 2013-03-21 | Nvidia Corp | 晶片組防護卸載引擎 |
US8531471B2 (en) * | 2008-11-13 | 2013-09-10 | Intel Corporation | Shared virtual memory |
US20100153934A1 (en) * | 2008-12-12 | 2010-06-17 | Peter Lachner | Prefetch for systems with heterogeneous architectures |
US8752064B2 (en) * | 2010-12-14 | 2014-06-10 | Advanced Micro Devices, Inc. | Optimizing communication of system call requests |
WO2013089771A1 (en) | 2011-12-16 | 2013-06-20 | Intel Corporation | Secure user attestation and authentication to a remote server |
KR101885211B1 (ko) * | 2012-01-27 | 2018-08-29 | 삼성전자 주식회사 | Gpu의 자원 할당을 위한 방법 및 장치 |
CN102890643B (zh) * | 2012-07-26 | 2015-01-21 | 上海交通大学 | 基于应用效果即时反馈的显卡虚拟化下的资源调度系统 |
US9633230B2 (en) * | 2012-10-11 | 2017-04-25 | Intel Corporation | Hardware assist for privilege access violation checks |
US8884906B2 (en) | 2012-12-21 | 2014-11-11 | Intel Corporation | Offloading touch processing to a graphics processor |
US10489205B2 (en) * | 2013-07-19 | 2019-11-26 | Apple Inc. | Enqueuing kernels from kernels on GPU/CPU |
US9311011B2 (en) * | 2013-08-07 | 2016-04-12 | Qualcomm Incorporated | Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems |
US9201659B2 (en) * | 2013-08-19 | 2015-12-01 | Qualcomm Incorporated | Efficient directed acyclic graph pattern matching to enable code partitioning and execution on heterogeneous processor cores |
US9335981B2 (en) * | 2013-10-18 | 2016-05-10 | Nec Corporation | Source-to-source transformations for graph processing on many-core platforms |
CN105518623B (zh) * | 2014-11-21 | 2019-11-05 | 英特尔公司 | 用于在虚拟执行环境中进行高效的图形处理的装置和方法 |
US9892544B2 (en) * | 2015-12-22 | 2018-02-13 | Intel Corporation | Method and apparatus for load balancing in a ray tracing architecture |
WO2017112403A1 (en) * | 2015-12-24 | 2017-06-29 | Intel Corporation | Graphics processing unit operation |
US20170353397A1 (en) * | 2016-06-06 | 2017-12-07 | Advanced Micro Devices, Inc. | Offloading Execution of an Application by a Network Connected Device |
US10423463B1 (en) * | 2016-06-09 | 2019-09-24 | Amazon Technologies, Inc. | Computational task offloading for virtualized graphics |
US9875076B1 (en) * | 2016-07-26 | 2018-01-23 | Wyse Technology L.L.C. | Remoting client having GPU off-loader |
CN109690482A (zh) * | 2016-09-05 | 2019-04-26 | 华为技术有限公司 | 虚拟机图形处理器的分配 |
US20180122037A1 (en) * | 2016-10-31 | 2018-05-03 | Intel Corporation | Offloading fused kernel execution to a graphics processor |
US10325341B2 (en) * | 2017-04-21 | 2019-06-18 | Intel Corporation | Handling pipeline submissions across many compute units |
US10372497B1 (en) * | 2017-09-05 | 2019-08-06 | Parallels International Gmbh | Offloading GPU computations for computers and virtual machines |
US10269167B1 (en) * | 2018-05-21 | 2019-04-23 | Apple Inc. | Indirect command buffers for graphics processing |
US10963299B2 (en) * | 2018-09-18 | 2021-03-30 | Advanced Micro Devices, Inc. | Hardware accelerated dynamic work creation on a graphics processing unit |
US11200636B2 (en) * | 2018-11-30 | 2021-12-14 | Mediatek Inc. | Method and apparatus for generating a series of frames with aid of synthesizer to offload graphics processing unit rendering in electronic device |
US11119820B2 (en) * | 2019-03-15 | 2021-09-14 | Intel Corporation | Local memory sharing between kernels |
CN110647360B (zh) * | 2019-08-20 | 2022-05-03 | 百度在线网络技术(北京)有限公司 | 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质 |
US11907756B2 (en) * | 2020-02-20 | 2024-02-20 | Intel Corporation | Concurrent workload scheduling with multiple level of dependencies |
US11080111B1 (en) * | 2020-02-24 | 2021-08-03 | Nvidia Corporation | Technique for sharing context among multiple threads |
US11704859B2 (en) * | 2020-08-20 | 2023-07-18 | Sony Interactive Entertainment LLC | System and method for accelerated ray tracing |
US11494969B2 (en) * | 2020-08-20 | 2022-11-08 | Sony Interactive Entertainment LLC | System and method for accelerated ray tracing with asynchronous operation and ray transformation |
-
2020
- 2020-10-22 CN CN202011140485.6A patent/CN112230931B/zh active Active
-
2021
- 2021-04-14 TW TW110113317A patent/TWI807301B/zh active
- 2021-07-02 US US17/367,044 patent/US11748077B2/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201207735A (en) * | 2010-04-28 | 2012-02-16 | Ericsson Telefon Ab L M | Technique for GPU command scheduling |
TW201333874A (zh) * | 2011-11-07 | 2013-08-16 | Nvidia Corp | 在圖形處理器電腦編譯器中最佳化程序間記憶體位址空間的技術 |
US20130160016A1 (en) * | 2011-12-16 | 2013-06-20 | Advanced Micro Devices, Inc. | Allocating Compute Kernels to Processors in a Heterogeneous System |
US20140259016A1 (en) * | 2013-03-06 | 2014-09-11 | Nvidia Corporation | System and method for runtime scheduling of gpu tasks |
US20150187040A1 (en) * | 2013-12-27 | 2015-07-02 | Jayanth N. Rao | Scheduling and dispatch of gpgpu workloads |
US20170236246A1 (en) * | 2014-09-12 | 2017-08-17 | Intel Corporation | Facilitating dynamic parallel scheduling of command packets at graphics processing units on computing devices |
CN104899481A (zh) * | 2015-06-17 | 2015-09-09 | 上海斐讯数据通信技术有限公司 | 防止应用程序反编译的系统及其方法 |
CN110838992A (zh) * | 2018-08-15 | 2020-02-25 | 丛林网络公司 | 在不同网络堆栈中的内核模块间传送分组的系统和方法 |
CN110852930A (zh) * | 2019-10-25 | 2020-02-28 | 华中科技大学 | 一种基于OpenCL的FPGA图处理加速方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
US11748077B2 (en) | 2023-09-05 |
CN112230931B (zh) | 2021-11-02 |
CN112230931A (zh) | 2021-01-15 |
US20220129255A1 (en) | 2022-04-28 |
TW202217553A (zh) | 2022-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI525540B (zh) | 具有橫跨多個處理器之平行資料執行緒的映射處理邏輯 | |
US8392463B2 (en) | GPU enabled database systems | |
US7058945B2 (en) | Information processing method and recording medium therefor capable of enhancing the executing speed of a parallel processing computing device | |
US8099584B2 (en) | Methods for scalably exploiting parallelism in a parallel processing system | |
US10402223B1 (en) | Scheduling hardware resources for offloading functions in a heterogeneous computing system | |
US20230267011A1 (en) | Apparatus and method for secondary offloads in graphics processing unit | |
JP2014523021A (ja) | グラフィックス処理ユニットにおけるメモリの共有 | |
JP4756553B2 (ja) | 分散処理方法、オペレーティングシステムおよびマルチプロセッサシステム | |
US10318261B2 (en) | Execution of complex recursive algorithms | |
US20140143524A1 (en) | Information processing apparatus, information processing apparatus control method, and a computer-readable storage medium storing a control program for controlling an information processing apparatus | |
US20220121444A1 (en) | Apparatus and method for configuring cooperative warps in vector computing system | |
WO2016008317A1 (zh) | 数据处理方法和中心节点 | |
TWI807301B (zh) | 適應於圖形處理器的二次卸載的編譯裝置和方法和電腦程式產品 | |
JP5528054B2 (ja) | 改善された直接メモリ・アクセス転送効率のための方法、プログラム、および装置 | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
US20120137300A1 (en) | Information Processor and Information Processing Method | |
Li et al. | XeFlow: Streamlining inter-processor pipeline execution for the discrete CPU-GPU platform | |
KR20210021587A (ko) | 프로세서 메모리 액세스 | |
CN103744698A (zh) | Dsp工程的高效运行方法及系统 | |
Chen et al. | An Efficient Acceleration of Digital Fonensics Search Using GPGPU | |
JPWO2007088581A1 (ja) | 共有メモリ型マルチプロセッサにおける手続き呼び出し方法、手続き呼び出しプログラムおよび記録媒体 | |
Kuan et al. | C++ support and applications for embedded multicore DSP systems | |
WO2022250708A1 (en) | Parallelizing opengl rendering pipelines | |
Luo et al. | MSSM: An Efficient Scheduling Mechanism for CUDA Basing on Task Partition | |
Huang et al. | Dynamic streamization model execution for SIMD engines on multicore architectures |