TW202217559A - 設置於圖形處理器中的二次卸載裝置和方法 - Google Patents

設置於圖形處理器中的二次卸載裝置和方法 Download PDF

Info

Publication number
TW202217559A
TW202217559A TW110113316A TW110113316A TW202217559A TW 202217559 A TW202217559 A TW 202217559A TW 110113316 A TW110113316 A TW 110113316A TW 110113316 A TW110113316 A TW 110113316A TW 202217559 A TW202217559 A TW 202217559A
Authority
TW
Taiwan
Prior art keywords
execution
code
mentioned
graphics processor
engine
Prior art date
Application number
TW110113316A
Other languages
English (en)
Other versions
TWI776465B (zh
Inventor
發明人放棄姓名表示權
Original Assignee
大陸商上海壁仞智能科技有限公司
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 大陸商上海壁仞智能科技有限公司 filed Critical 大陸商上海壁仞智能科技有限公司
Publication of TW202217559A publication Critical patent/TW202217559A/zh
Application granted granted Critical
Publication of TWI776465B publication Critical patent/TWI776465B/zh

Links

Images

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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • 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/458Synchronisation, e.g. post-wait, barriers, locks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Image Generation (AREA)

Abstract

本發明涉及一種設置於圖形處理器中的二次卸載裝置和方法,其中該二次卸載裝置包含:引擎;和計算單元。引擎儲存操作表,並且操作表包含多個記錄。計算單元用於提取多個計算程式碼,其中,計算程式碼包含多個執行指令和多個同步請求;執行每個執行指令;以及依據同步請求發出多個請求給引擎,用於指示引擎依據操作表中的記錄讓圖形處理器中的或圖形處理器外的元件完成操作。本發明通過如上所述的引擎的設置,可讓計算單元得以專注執行自己最具優勢的純計算任務,減少花費時鐘週期以執行純計算以外的任務,並減少對記憶體頻寬的佔用。

Description

設置於圖形處理器中的二次卸載裝置和方法
本發明涉及用於通用計算領域的圖形處理器,尤指一種設置於圖形處理器中的二次卸載裝置和方法。
目前包含圖形處理器(Graphics Processing Unit, GPU)的計算系統中還包含中央處理器(Central Processing Unit,CPU)。中央處理器適合處理傳統的應用程式的數值運算,而圖形處理器適合處理電腦圖形(Computer Graphics)以及大規模的併發計算。這樣的計算系統被編程後可執行各種應用任務,包含但不限於:線性和非線性資料轉化、資料庫操作、大數據運算、人工智慧計算、音訊、視訊資料的編碼、解碼、建模操作、圖像渲染操作等。為了實現異構高併發的計算,本發明提出一種設置於圖形處理器中的二次卸載裝置和方法。
有鑑於此,如何減輕或消除上述相關領域的缺失,實為有待解決的問題。
本發明的實施例涉及一種設置於圖形處理器中的二次卸載裝置,包含:引擎;和計算單元。引擎儲存操作表,並且操作表包含多個記錄。計算單元用於提取多個計算程式碼,其中,上述計算程式碼包含多個執行指令和多個同步請求;執行每個執行指令;以及依據同步請求發出多個請求給引擎,用於指示引擎依據操作表中的記錄讓圖形處理器中的或圖形處理器外的元件完成操作。
本發明還涉及一種在圖形處理器中執行的二次卸載方法,包含:計算單元提取多個計算程式碼,其中,計算程式碼包含多個執行程式碼和多個同步請求;計算單元執行每個執行程式碼;以及計算單元依據同步請求發出多個請求給引擎,用於指示引擎依據操作表中的記錄讓圖形處理器中的或圖形處理器外的元件完成操作。
本發明的實施例還涉及一種設置於圖形處理器中的二次卸載裝置,包含:引擎;以及計算單元。計算單元用於提取多個計算程式碼;當每個計算程式碼適合由計算單元執行時,執行計算程式碼;以及當每個計算程式碼不適合由計算單元執行時,產生相應記錄,並且發出請求和相應記錄給引擎,用於指示引擎依據相應記錄讓圖形處理器中的或圖形處理器外的元件完成操作。
上述實施例的優點之一,通過如上所述的引擎的設置,可讓計算單元得以專注執行自己最具優勢的純計算任務,減少花費時鐘週期以執行純計算以外的任務,並減少對記憶體頻寬的佔用。
本發明的其他優點將搭配以下的說明和圖式進行更詳細的解說。
以下說明為完成發明的較佳實現方式,其目的在於描述本發明的基本精神,但並不用以限定本發明。實際的發明內容必須參考之後的權利要求範圍。
必須了解的是,使用於本說明書中的”包含”、”包括”等詞,用以表示存在特定的技術特徵、數值、方法步驟、作業處理、元件以及/或組件,但並不排除可加上更多的技術特徵、數值、方法步驟、作業處理、元件、組件,或以上的任意組合。
於權利要求中使用如”第一”、”第二”、”第三”等詞是用來修飾權利要求中的元件,並非用來表示之間具有優先順序,前置關係,或者是一個元件先於另一個元件,或者是執行方法步驟時的時間先後順序,僅用來區別具有相同名字的元件。
必須了解的是,當元件描述為”連接”或”耦接”至另一元件時,可以是直接連結、或耦接至其他元件,可能出現中間元件。相反地,當元件描述為”直接連接”或”直接耦接”至另一元件時,其中不存在任何中間元件。使用來描述元件之間關係的其他語詞也可類似方式解讀,例如”介於”相對於”直接介於”,或者是”鄰接”相對於”直接鄰接”等等。
參考圖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。處理單元211另可通過顯示介面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執行程式碼852,用於對二級快取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的流程圖採用指定的順序來執行,但是在不違反發明精神的情況下,熟習此技藝人士可以在達到相同效果的前提下,修改這些步驟間的順序,所以,本發明並不侷限於僅使用如上所述的順序。此外,熟習此技藝人士亦可以將若干步驟整合為一個步驟,或者是除了這些步驟外,循序或平行地執行更多步驟,本發明亦不因此而侷限。
雖然本發明使用以上實施例進行說明,但需要注意的是,這些描述並非用以限縮本發明。相反地,此發明涵蓋了熟習此技藝人士顯而易見的修改與相似設置。所以,申請權利要求範圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設置。
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顯示依據本發明實施例的應用二次卸載的並行執行的範例。
110:圖形處理器
120:命令處理器
130:計算單元
150:DMA/SDMA控制器
160:二級快取
170:記憶體
180:中央處理器
410:全局同步引擎
440:特殊應用積體電路
450:場效可編程邏輯閘陣列
460:加速器
510:編譯器
532:運行時
534:驅動程式
552:原始程式核
554:全局同步引擎操作表
556:計算程式碼
570:重構後程式核

Claims (20)

  1. 一種二次卸載裝置,設置於圖形處理器中,包含: 引擎,儲存操作表,上述操作表包含多個記錄;以及 計算單元,耦接上述引擎,用於提取多個計算程式碼,其中,上述計算程式碼包含多個執行程式碼和多個同步請求;執行每個上述執行程式碼;以及依據上述同步請求發出多個請求給上述引擎,用於指示上述引擎依據上述操作表中的記錄讓上述圖形處理器中的或上述圖形處理器外的元件完成操作。
  2. 如請求項1所述的二次卸載裝置,其中,上述引擎包括: 記憶體,儲存上述操作表; 介面;以及 控制器,耦接上述記憶體和上述介面,通過上述介面從上述計算單元收到包含記錄編號的每個上述請求後,搜索上述操作表以獲取相應於上述記錄編號的記錄,依據上述獲取的記錄的內容通過上述介面以指示命令處理器發出命令給上述圖形處理器中的或上述圖形處理器外的元件。
  3. 如請求項2所述的二次卸載裝置,其中,上述命令處理器設置在上述圖形處理器之中。
  4. 如請求項2所述的二次卸載裝置,其中,上述控制器通過上述介面從上述圖形處理器中的或上述圖形處理器外的上述元件收到執行完畢的信息後,通過上述介面通知上述計算單元關於相應請求已經處理完成的信息。
  5. 如請求項1所述的二次卸載裝置,其中,上述計算單元判斷每個上述執行程式碼或同步請求是否能夠被執行;如果上述執行程式碼能夠被執行,則執行上述執行程式碼;如果上述同步請求能夠被執行,則發出請求給上述引擎;如果上述執行程式碼或同步請求不能夠被執行,則等待一段時間後再進行下回合的判斷。
  6. 如請求項5所述的二次卸載裝置,其中,當上述執行程式碼或同步請求所關聯的同步旗標指出不需要等待前一個程式碼執行完畢時,或者當上述執行程式碼或同步請求所關聯的同步旗標指出需要等待前一個程式碼執行完畢且前一個程式碼已經執行完畢時,上述執行程式碼或同步請求能夠被執行;當上述執行程式碼或同步請求所關聯的同步旗標指出需要等待前一個程式碼執行完畢且前一個程式碼還沒執行完畢時,上述執行程式碼或同步請求不能夠被執行。
  7. 如請求項1所述的二次卸載裝置,其中,每個上述記錄包含一個操作由上述圖形處理器中的或上述圖形處理器外的特定元件運行的信息,以及包含上述操作如何運行的信息。
  8. 如請求項7所述的二次卸載裝置,其中,每個上述記錄包含操作命令和操作參數。
  9. 如請求項1所述的二次卸載裝置,其中,上述圖形處理器中的元件為二級快取或直接記憶體存取/系統直接記憶體存取控制器,以及上述圖形處理器外的元件為中央處理器。
  10. 一種二次卸載方法,由圖形處理器中的計算單元和引擎共同執行,包含: 上述計算單元提取多個計算程式碼,其中,上述計算程式碼包含多個執行程式碼和多個同步請求; 上述計算單元執行每個上述執行程式碼;以及 上述計算單元依據上述同步請求發出多個請求給上述引擎,用於指示上述引擎依據操作表中的記錄讓上述圖形處理器中的或上述圖形處理器外的元件完成操作。
  11. 如請求項10所述的二次卸載方法,包含: 當上述引擎從上述計算單元收到包含記錄編號的每個上述請求後,搜索上述操作表以獲取相應於上述記錄編號的記錄,依據上述獲取的記錄的內容指示命令處理器發出命令給上述圖形處理器中的或上述圖形處理器外的元件。
  12. 如請求項11所述的二次卸載方法,包含: 當上述引擎從上述圖形處理器中的或上述圖形處理器外的上述元件收到執行完畢的信息後,通知上述計算單元關於相應請求已經處理完成的信息。
  13. 如請求項10所述的二次卸載方法,包含: 上述計算單元判斷每個上述執行程式碼或同步請求是否能夠被執行; 如果上述執行程式碼能夠被執行,則上述計算單元執行上述執行程式碼; 如果上述同步請求能夠被執行,則上述計算單元發出請求給上述引擎;以及 如果上述執行程式碼或同步請求不能夠被執行,則等待一段時間後再進行下回合的判斷。
  14. 如請求項13所述的二次卸載方法,其中,當上述執行程式碼或同步請求所關聯的同步旗標指出不需要等待前一個程式碼執行完畢時,或者當上述執行程式碼或同步請求所關聯的同步旗標指出需要等待前一個程式碼執行完畢且前一個程式碼已經執行完畢時,上述執行程式碼或同步請求能夠被執行;當上述執行程式碼或同步請求所關聯的同步旗標指出需要等待前一個程式碼執行完畢且前一個程式碼還沒執行完畢時,上述執行程式碼或同步請求不能夠被執行。
  15. 如請求項10所述的二次卸載方法,其中,每個上述記錄包含一個操作由上述圖形處理器中的或上述圖形處理器外的特定元件運行的信息,以及包含上述操作如何運行的信息。
  16. 如請求項15所述的二次卸載方法,其中,每個上述記錄包含操作命令和操作參數。
  17. 如請求項10所述的二次卸載方法,其中,上述圖形處理器中的元件為二級快取或直接記憶體存取/系統直接記憶體存取控制器,以及上述圖形處理器外的元件為中央處理器。
  18. 一種二次卸載裝置,設置於圖形處理器中,包含: 引擎;以及 計算單元,耦接上述引擎,用於提取多個計算程式碼;當每個上述計算程式碼適合由上述計算單元執行時,執行上述計算程式碼;以及當每個上述計算程式碼不適合由上述計算單元執行時,產生相應記錄,並且發出請求和上述相應記錄給上述引擎,用於指示上述引擎依據上述相應記錄讓上述圖形處理器中的或上述圖形處理器外的元件完成操作。
  19. 如請求項18所述的二次卸載裝置,其中,每個上述相應記錄包含一個操作由上述圖形處理器中的或上述圖形處理器外的特定元件運行的信息,以及包含上述操作如何運行的信息。
  20. 如請求項19所述的二次卸載裝置,其中,每個上述相應記錄包含操作命令和操作參數。
TW110113316A 2020-10-22 2021-04-14 設置於圖形處理器中的二次卸載裝置和方法 TWI776465B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202011140493.0 2020-10-22
CN202011140493.0A CN112214443B (zh) 2020-10-22 2020-10-22 设置于图形处理器中的二次卸载装置和方法

Publications (2)

Publication Number Publication Date
TW202217559A true TW202217559A (zh) 2022-05-01
TWI776465B TWI776465B (zh) 2022-09-01

Family

ID=74054870

Family Applications (1)

Application Number Title Priority Date Filing Date
TW110113316A TWI776465B (zh) 2020-10-22 2021-04-14 設置於圖形處理器中的二次卸載裝置和方法

Country Status (3)

Country Link
US (2) US11663044B2 (zh)
CN (1) CN112214443B (zh)
TW (1) TWI776465B (zh)

Family Cites Families (22)

* Cited by examiner, † Cited by third party
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 晶片組防護卸載引擎
EP2383648B1 (en) 2010-04-28 2020-02-19 Telefonaktiebolaget LM Ericsson (publ) Technique for GPU command scheduling
CN102073543B (zh) * 2011-01-14 2013-03-20 上海交通大学 通用处理器与图形处理器融合系统及其融合方法
US10013731B2 (en) * 2011-06-30 2018-07-03 Intel Corporation Maximizing parallel processing in graphics processors
US20130113809A1 (en) 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
KR101581606B1 (ko) 2011-12-16 2015-12-30 인텔 코포레이션 원격 서버에 대한 안전한 사용자 증명 및 인증
US8707314B2 (en) * 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US8884906B2 (en) * 2012-12-21 2014-11-11 Intel Corporation Offloading touch processing to a graphics processor
US9891949B2 (en) 2013-03-06 2018-02-13 Nvidia Corporation System and method for runtime scheduling of GPU tasks
US10235732B2 (en) * 2013-12-27 2019-03-19 Intel Corporation Scheduling and dispatch of GPGPU workloads
KR101585980B1 (ko) * 2014-04-11 2016-01-19 전자부품연구원 멀티-프로세서의 공유 메모리를 적극 활용한 cr 알고리즘 처리 방법 및 이를 적용한 프로세서
US10255654B2 (en) * 2014-09-12 2019-04-09 Intel Corporation Facilitating dynamic parallel scheduling of command packets at graphics processing units on computing devices
WO2018068040A1 (en) * 2016-10-07 2018-04-12 Schneider Electric Systems, Usa, Inc. Systems and methods for communication and/or control of scalable, modular network nodes
GB2563589B (en) * 2017-06-16 2019-06-12 Imagination Tech Ltd Scheduling tasks
US20190332420A1 (en) * 2018-04-27 2019-10-31 Advanced Micro Devices, Inc. Feedback guided split workgroup dispatch for gpus
GB2575294B8 (en) * 2018-07-04 2022-07-20 Graphcore Ltd Host Proxy On Gateway
GB2580135B (en) * 2018-12-21 2021-01-20 Graphcore Ltd Handling exceptions in a multi-tile processing arrangement
GB2580428B (en) * 2019-01-11 2021-08-25 Graphcore Ltd Handling exceptions in a machine learning processor
US11010208B1 (en) * 2019-10-25 2021-05-18 Graphcore Limited Sync groupings
CN110852300A (zh) 2019-11-19 2020-02-28 中煤航测遥感集团有限公司 地物分类的方法、地图的绘制方法、装置及电子设备

Also Published As

Publication number Publication date
CN112214443A (zh) 2021-01-12
CN112214443B (zh) 2021-12-03
US11663044B2 (en) 2023-05-30
US20220129272A1 (en) 2022-04-28
TWI776465B (zh) 2022-09-01
US20230267011A1 (en) 2023-08-24

Similar Documents

Publication Publication Date Title
US7058945B2 (en) Information processing method and recording medium therefor capable of enhancing the executing speed of a parallel processing computing device
TWI525540B (zh) 具有橫跨多個處理器之平行資料執行緒的映射處理邏輯
JP2966085B2 (ja) 後入れ先出しスタックを備えるマイクロプロセッサ、マイクロプロセッサシステム、及び後入れ先出しスタックの動作方法
US9336564B2 (en) GPU enabled database systems
JP4936517B2 (ja) ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
JP5224498B2 (ja) メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
US4794521A (en) Digital computer with cache capable of concurrently handling multiple accesses from parallel processors
KR101120398B1 (ko) 스레드 최적화된 멀티프로세서 구조
US10402223B1 (en) Scheduling hardware resources for offloading functions in a heterogeneous computing system
US20210250028A1 (en) Electronic system including fpga and operation method thereof
US20120331278A1 (en) Branch removal by data shuffling
US20220121444A1 (en) Apparatus and method for configuring cooperative warps in vector computing system
US20160147516A1 (en) Execution of complex recursive algorithms
US9841957B2 (en) Apparatus and method for handling registers in pipeline processing
RU2375768C2 (ru) Процессор и способ осуществления операций непрямого чтения и записи регистра
CN114153500A (zh) 指令调度方法、指令调度装置、处理器及存储介质
TWI776465B (zh) 設置於圖形處理器中的二次卸載裝置和方法
TWI807301B (zh) 適應於圖形處理器的二次卸載的編譯裝置和方法和電腦程式產品
CN114218152B (zh) 流处理方法、处理电路和电子设备
US20120137300A1 (en) Information Processor and Information Processing Method
Li et al. XeFlow: Streamlining inter-processor pipeline execution for the discrete CPU-GPU platform
Stotland et al. Image computing library for a next-generation VLIW multimedia processor
US8108616B2 (en) Processing a data stream by accessing one or more hardware registers
KR20110067795A (ko) 실시간 프로세스의 응답성 개선을 위한 tcm운용방법
KR100490438B1 (ko) 연산/저장을 병행하여 처리하는 장치 및 방법

Legal Events

Date Code Title Description
GD4A Issue of patent certificate for granted invention patent