由裝置端推核心入隊(duì)列的裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種圖形處理單元技術(shù),特別是一種由裝置端推核心入隊(duì)列的裝置。
【背景技術(shù)】
[0002]主端(CPU端)將一個(gè)核心推入隊(duì)列,用以驅(qū)動(dòng)裝置端執(zhí)行。傳統(tǒng)上,核心執(zhí)行結(jié)束,裝置端返還控制權(quán)給主端。接著,主端將另一個(gè)待執(zhí)行的核心推入隊(duì)列。然而,這需要消耗額外成本并降低效能。因此,本發(fā)明提出一種由裝置端(GPU端)推核心入隊(duì)列的裝置,用以解決以上缺點(diǎn)。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的實(shí)施例提出一種由裝置端推核心入隊(duì)列的裝置,包含存儲(chǔ)器存取單元、命令串處理器、執(zhí)行單元(EU,Execut1n Unit)及固定流水線單元(FFU,F(xiàn)ixed Funct1nUnit)。命令串處理器耦接于存儲(chǔ)器存取單元,用以從存儲(chǔ)器存取單元接收第一命令時(shí),執(zhí)行環(huán)形緩存器中的命令。執(zhí)行單元根據(jù)核心(kernel)的指令(instruct 1n)指示存儲(chǔ)器存取單元為硬件執(zhí)行線程在環(huán)形緩存器中配置空間,然后寫入硬件執(zhí)行線程包含的多個(gè)第二命令至環(huán)形緩存器中的空間。
[0004]本發(fā)明的實(shí)施例提出一種由裝置端推核心入隊(duì)列的裝置,包含存儲(chǔ)器存取單元及命令處理器。存儲(chǔ)器存取單元耦接于命令串處理器及視訊存儲(chǔ)器,包含實(shí)體執(zhí)行線程識(shí)別緩存器。視訊存儲(chǔ)器包含環(huán)形緩存器。存儲(chǔ)器存取單元根據(jù)執(zhí)行單元(EU)發(fā)出的指令為核心的硬件執(zhí)行線程在環(huán)形緩存器中配置空間,以及將硬件執(zhí)行線程的基本輪廓數(shù)據(jù)儲(chǔ)存至實(shí)體執(zhí)行線程識(shí)別緩存器。基本輪廓數(shù)據(jù)包含執(zhí)行線程識(shí)別碼、配置空間的尾地址及就緒旗標(biāo),就緒旗標(biāo)指出關(guān)聯(lián)于硬件執(zhí)行線程包含的多個(gè)命令尚未就緒。
【附圖說明】
[0005]圖1是依據(jù)本發(fā)明實(shí)施例的圖形處理裝置的硬件架構(gòu)圖。
[0006]圖2是依據(jù)本發(fā)明實(shí)施例的環(huán)形緩存器示意圖。
[0007]圖3是依據(jù)本發(fā)明實(shí)施例的由裝置端推核心入隊(duì)列的示意圖。
【具體實(shí)施方式】
[0008]以下說明為完成發(fā)明的較佳實(shí)現(xiàn)方式,其目的在于描述本發(fā)明的基本精神,但并不用以限定本發(fā)明。實(shí)際的
【發(fā)明內(nèi)容】
必須參考之后的權(quán)利要求范圍。
[0009]必須了解的是,使用于本說明書中的“包含”、“包括”等詞,用以表示存在特定的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、組件以及/或組件,但并不排除可加上更多的技術(shù)特征、數(shù)值、方法步驟、作業(yè)處理、組件、組件,或以上的任意組合。
[0010]在權(quán)利要求中使用如“第一”、“第二”、“第三”等詞是用來修飾權(quán)利要求中的組件,并非用來表示之間具有優(yōu)先權(quán)順序,先行關(guān)系,或者是一個(gè)組件先于另一個(gè)組件,或者是執(zhí)行方法步驟時(shí)的時(shí)間先后順序,僅用來區(qū)別具有相同名字的組件。
[0011 ] 圖1是依據(jù)本發(fā)明實(shí)施例的圖形處理裝置(graphics-processing device)的硬件架構(gòu)圖。核心(kernel)是程序中宣告的功能(funct1n),并且由圖形處理裝置執(zhí)行。通過圖形處理裝置執(zhí)行核心實(shí)體(kerne Ι-1nstance)完成圖形處理程序賦予的工作。此硬件架構(gòu)提供一種機(jī)制,用以讓圖形處理裝置中執(zhí)行的核心實(shí)體可將另一個(gè)核心實(shí)體推入隊(duì)列,而不需要主端(host-side)的直接參與。這提供了巢狀的平行運(yùn)算,也就是說,執(zhí)行中的核心實(shí)體可巢狀地創(chuàng)造更多層的并行作業(yè)。裝置端執(zhí)行的核心實(shí)體(父核心)將另一個(gè)核心實(shí)體(子核心)推入至環(huán)狀緩存器(ring buffer)。當(dāng)父核心及子核心異步執(zhí)行時(shí),除非所有的子核心都執(zhí)行完畢,父核心的作業(yè)無法結(jié)束。核心亦可于類似領(lǐng)域中稱為計(jì)算著色器(compute shader)。計(jì)算著色器是另一類獨(dú)立的著色器類型,相似于現(xiàn)行的圖形著色器,例如頂點(diǎn)、幾何圖形、畫素著色器等。其目的在提供更多的通用計(jì)算作業(yè),而不是在圖形著色器中執(zhí)行的運(yùn)算。視訊存儲(chǔ)器(video memory) 170配置一段空間作為環(huán)形緩存器(RingBuffer,RB),例如64MBytes。圖2是依據(jù)本發(fā)明實(shí)施例的環(huán)形緩存器示意圖。其中,使用三個(gè)指標(biāo)分別指向環(huán)形緩存器200中的首、尾及鎖定尾地址“RB_head”、“RB_tail”及“RB_locked_tail”。環(huán)形緩存器200包含從首地址“RB_head”至鎖定尾地址“RB_locked_tail”的存儲(chǔ)器空間。詳細(xì)來說,環(huán)形緩存器200可被多個(gè)核心(kernel)共享。視訊存儲(chǔ)器170可為關(guān)聯(lián)于核心的執(zhí)行線程群組(thread group)配置環(huán)形緩存器200的空間。每個(gè)執(zhí)行線程群組可包含多個(gè)執(zhí)行線程,例如16x16x16個(gè)執(zhí)行線程(又可稱為軟件執(zhí)行線程組,softwarethread group)。執(zhí)行單元130打包指定數(shù)目的軟件執(zhí)行線程成為一個(gè)可并行處理的硬件執(zhí)行線程(hardware thread),例如包含32個(gè)軟件執(zhí)行線程,亦可稱為單指令多數(shù)據(jù)(SIMD,Single Instruct1n Multiple Data)執(zhí)行線程。環(huán)形緩存器最多可儲(chǔ)存指定數(shù)目的硬件執(zhí)行線程,例如96個(gè)硬件執(zhí)行線程。
[0012]顯不驅(qū)動(dòng)器110發(fā)送命令(command)給命令串處理器(CSP,Command StreamProcessor) 120,用以產(chǎn)生一個(gè)核心實(shí)例的處理命令(kernel dispatch command),稱為主端推入隊(duì)列的核心(host-side-enqueued kernel)。執(zhí)行單元130會(huì)將一個(gè)核心實(shí)例的處理命令拆分成若干個(gè)硬件執(zhí)行線程,此硬件執(zhí)行線程包含指定數(shù)目的軟件執(zhí)行線程,例如32個(gè),并且每一個(gè)軟件執(zhí)行線程包含產(chǎn)生一個(gè)子核心實(shí)例的處理命令(kernel dispatchcommand),又稱裝置端推入隊(duì)列的核心(device-side-enqueued kernel)。也就是說,顯示驅(qū)動(dòng)器110啟動(dòng)第一個(gè)核心,接下來的后裔核心都是由裝置端產(chǎn)生。執(zhí)行單元130包含多個(gè)運(yùn)算邏輯單元(ALU,Arithmetic Logic Unit) 131a至131m,每個(gè)運(yùn)算邏輯單元包含一個(gè)通用寄存器文檔(CRF,Common Register File)133,例如m為32。命令串處理器120依據(jù)從顯示驅(qū)動(dòng)器110傳送的指令或從存儲(chǔ)器存取單元160傳送的命令驅(qū)動(dòng)執(zhí)行單元130,用以產(chǎn)生一個(gè)核心的硬件執(zhí)行線程。詳細(xì)來說,硬件執(zhí)行線程可指示存儲(chǔ)器存取單元(MXU,Mem0ryAccess Unit)160在環(huán)形緩存器200中配置空間給一個(gè)核心的硬件執(zhí)行線程。配置環(huán)形緩存器的指令必須為原子指令(atomic instruct1n),用以確??臻g配置作業(yè)不被其它指令打斷。此外,為了記錄硬件執(zhí)行線程推入環(huán)形緩存器200的順序,存儲(chǔ)器存取單元160包含實(shí)體執(zhí)行線程識(shí)別緩存器(PID,PhysiCal-thread ID buffer) 161,用以依序儲(chǔ)存環(huán)形緩存器200中每一個(gè)硬件執(zhí)行線程的基本輪廓數(shù)據(jù)(profile),包含執(zhí)行線程識(shí)別碼、尾地址及就緒旗標(biāo)“bReady”等。其中,執(zhí)行線程識(shí)別碼用以識(shí)別硬件執(zhí)行線程,尾地址為配置空間的最后地址,而就緒旗標(biāo)初始為“ο”,指出關(guān)聯(lián)于此硬件執(zhí)行線程的命令尚未就緒。在配置空間時(shí),存儲(chǔ)器存取單元160更判斷是否需要從環(huán)形緩存器的首地址“RB_head”開始配置空間。詳細(xì)來說,存儲(chǔ)器存取單元160檢查實(shí)體執(zhí)行線程識(shí)別緩存器161中最后一個(gè)硬件執(zhí)行線程的尾地址是否等于或超過環(huán)形緩存器的尾地址“RB_tai 1”。若是,則從首地址“RB_head”開始配置空間;否則,從最后一個(gè)硬件執(zhí)行線程的尾地址的下一個(gè)地址開始配置空間。
[0013]接著,執(zhí)行單元130依據(jù)核心的指令設(shè)定運(yùn)算邏輯單元中的通用寄存器文檔,用以指示執(zhí)行單元130經(jīng)由存儲(chǔ)器存取單元160寫入η個(gè)命令至環(huán)形緩存器200中的配置空間,例如η為32,每一個(gè)命令是用以產(chǎn)生一個(gè)核心實(shí)例的處理命令(kernel dispatch command)。通用寄存器文檔133的設(shè)定值關(guān)聯(lián)于一個(gè)非高速緩存隨機(jī)存取視圖儲(chǔ)存(non-cacheableUAV,Un-order Accessed View,store)指令,用以直接寫入η個(gè)命令至環(huán)形緩存器200中的配置空間,而不暫存命令于高速緩存存儲(chǔ)器。于此須注意的是,由于環(huán)形緩存器200已經(jīng)配置空間完成,這些命令必須立即寫入環(huán)形緩存器200,而不能待在高速緩存存儲(chǔ)器。否則,將造成環(huán)形緩存器執(zhí)行錯(cuò)誤。固定流水線單元(FFU,Fixed Funct1n Unit) 140包含載入/儲(chǔ)存單元(LS,Load/Store Unit) 141。執(zhí)行單元130指示載入/儲(chǔ)存單元141讀取硬件執(zhí)行線程中的η個(gè)命令,接著,載入/儲(chǔ)存單元141指示存儲(chǔ)器存取單元160將η個(gè)命令經(jīng)由高速緩存存儲(chǔ)器143寫入環(huán)形緩存器200中的配置空間。當(dāng)指示存儲(chǔ)器存取單元160寫入硬件執(zhí)行線程中的最后一個(gè)命令時(shí),執(zhí)行單元130另發(fā)出信號(hào)“threacLend”,用以指出特定硬件執(zhí)行線程執(zhí)行完成。當(dāng)存儲(chǔ)器存取單元160偵測到信號(hào)“threacLend”時(shí),將實(shí)體執(zhí)行線程識(shí)別緩存器161中相應(yīng)于此硬件執(zhí)行線程的就緒旗標(biāo)設(shè)為“1”,用以指出硬件執(zhí)行線程已完成寫入所有命令至環(huán)形緩存器200。雖然本發(fā)明實(shí)施例使用固定流水線單元140中既存的載入/儲(chǔ)存單元141及高速緩存存儲(chǔ)器143完成命令的寫入及讀取,熟習(xí)此技藝人士亦可于執(zhí)行單元130中實(shí)施類似于載入/儲(chǔ)存單元141及高速緩存存儲(chǔ)器143的功能,本發(fā)明并不因此受限。
[0014]存儲(chǔ)器存取單元160周期性檢查實(shí)體執(zhí)行線程識(shí)別緩存器161,判斷環(huán)形緩存器200中頂端的硬件執(zhí)行線程的所有命令是否就緒。若是,存儲(chǔ)器存取單元160讀取環(huán)