drm 給 GPU 發(fā)送硬件命令時(shí),會將命令放置在一個(gè)環(huán)形緩沖區(qū),顯卡將會從這個(gè)環(huán)形緩沖區(qū)取命令執(zhí)行。它的工作原理基于一個(gè)循環(huán)隊(duì)列,數(shù)據(jù)存放在一個(gè)環(huán)裝區(qū)域。CPU 會將命令從隊(duì)列尾插入,GPU 會從隊(duì)頭取數(shù)據(jù),隊(duì)頭和隊(duì)尾在不斷地更新中。這個(gè)環(huán)形緩沖區(qū)存放在 GTT 內(nèi)存中,以便顯卡可以訪問到。
CPU 和 GPU 將各自維護(hù)一些數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作。這些 數(shù)據(jù)結(jié)構(gòu)有緩沖區(qū)的基地址,緩沖區(qū)大小,寫指針和讀指針。其中寫指針和讀指針分別指向 CPU 將要寫入命令的地址和 GPU 將要讀取命令的地址。當(dāng)這一次的讀取命令或者寫入命令結(jié)束之后,這兩個(gè)指針都會往前移動(dòng)。當(dāng)指針到達(dá)隊(duì)列的末尾時(shí),將會移到隊(duì)列的頭部繼續(xù)執(zhí)行。如果我們不加處理的話,就可能會發(fā)生讀指針讀取了沒有寫入新命令的地址, 或者是寫指針把命令寫到了命令還沒有被 處理的區(qū)域。
因而當(dāng) CPU 寫入命令時(shí),它應(yīng)該通知 GPU。而 GPU 在讀取命令之后,應(yīng)該通知 CPU。通知操作借由寫 CPU 中的讀指針副本和 GPU 中的寫指針副本完成。環(huán)形緩沖區(qū)示意圖如下圖。
初始階段,讀指針和寫指針指向同一區(qū)域,隨著程序的運(yùn)行,讀指針和寫指針可能會再次相遇,這時(shí)有可能是隊(duì)列空,也有可能是隊(duì)列滿,為了避免二義性,我們避免發(fā)生隊(duì)列滿的情況,總在隊(duì)列將滿時(shí),將命令流裝入新的緩沖區(qū)。那么驅(qū)動(dòng)要時(shí)時(shí)監(jiān)控著緩沖區(qū)的操作,當(dāng)隊(duì)列空時(shí)停止讀取,當(dāng)隊(duì)列將滿時(shí),將讀操作掛起。
-
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217084 -
gpu
+關(guān)注
關(guān)注
28文章
4946瀏覽量
131239 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40749
原文標(biāo)題:CPU 與 GPU 之間的緩沖區(qū)
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM32進(jìn)階之串口環(huán)形緩沖區(qū)實(shí)現(xiàn)
MCU進(jìn)階之串口環(huán)形緩沖區(qū)實(shí)現(xiàn)
STM32串口環(huán)形緩沖區(qū)的實(shí)現(xiàn)
基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計(jì)方案
環(huán)形緩沖區(qū)的設(shè)計(jì)分享!
環(huán)形緩沖區(qū)簡介
請問串口的DMA接收緩沖區(qū)是不是環(huán)形緩沖區(qū)
環(huán)形緩沖區(qū)讀寫操作的分析與實(shí)現(xiàn)
環(huán)形緩沖區(qū)的實(shí)現(xiàn)原理

緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)
STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)

環(huán)形緩沖區(qū)簡介 STM32環(huán)形緩沖區(qū)示例

STM32進(jìn)階之串口環(huán)形緩沖區(qū)實(shí)現(xiàn)
環(huán)形緩沖區(qū)的實(shí)現(xiàn)思路
C++環(huán)形緩沖區(qū)設(shè)計(jì)與實(shí)現(xiàn)

評論