drm 給 GPU 發(fā)送硬件命令時,會將命令放置在一個環(huán)形緩沖區(qū),顯卡將會從這個環(huán)形緩沖區(qū)取命令執(zhí)行。它的工作原理基于一個循環(huán)隊列,數(shù)據(jù)存放在一個環(huán)裝區(qū)域。CPU 會將命令從隊列尾插入,GPU 會從隊頭取數(shù)據(jù),隊頭和隊尾在不斷地更新中。這個環(huán)形緩沖區(qū)存放在 GTT 內(nèi)存中,以便顯卡可以訪問到。
CPU 和 GPU 將各自維護一些數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作。這些 數(shù)據(jù)結(jié)構(gòu)有緩沖區(qū)的基地址,緩沖區(qū)大小,寫指針和讀指針。其中寫指針和讀指針分別指向 CPU 將要寫入命令的地址和 GPU 將要讀取命令的地址。當這一次的讀取命令或者寫入命令結(jié)束之后,這兩個指針都會往前移動。當指針到達隊列的末尾時,將會移到隊列的頭部繼續(xù)執(zhí)行。如果我們不加處理的話,就可能會發(fā)生讀指針讀取了沒有寫入新命令的地址, 或者是寫指針把命令寫到了命令還沒有被 處理的區(qū)域。
因而當 CPU 寫入命令時,它應(yīng)該通知 GPU。而 GPU 在讀取命令之后,應(yīng)該通知 CPU。通知操作借由寫 CPU 中的讀指針副本和 GPU 中的寫指針副本完成。環(huán)形緩沖區(qū)示意圖如下圖。

初始階段,讀指針和寫指針指向同一區(qū)域,隨著程序的運行,讀指針和寫指針可能會再次相遇,這時有可能是隊列空,也有可能是隊列滿,為了避免二義性,我們避免發(fā)生隊列滿的情況,總在隊列將滿時,將命令流裝入新的緩沖區(qū)。那么驅(qū)動要時時監(jiān)控著緩沖區(qū)的操作,當隊列空時停止讀取,當隊列將滿時,將讀操作掛起。
-
cpu
+關(guān)注
關(guān)注
68文章
11196瀏覽量
222060 -
gpu
+關(guān)注
關(guān)注
28文章
5061瀏覽量
134086 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
41263
原文標題:CPU 與 GPU 之間的緩沖區(qū)
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM32進階之串口環(huán)形緩沖區(qū)實現(xiàn)
MCU進階之串口環(huán)形緩沖區(qū)實現(xiàn)
STM32串口環(huán)形緩沖區(qū)的實現(xiàn)
基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計方案
環(huán)形緩沖區(qū)的設(shè)計分享!
環(huán)形緩沖區(qū)簡介
請問串口的DMA接收緩沖區(qū)是不是環(huán)形緩沖區(qū)
環(huán)形緩沖區(qū)讀寫操作的分析與實現(xiàn)
環(huán)形緩沖區(qū)的實現(xiàn)原理
緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)
STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)
環(huán)形緩沖區(qū)簡介 STM32環(huán)形緩沖區(qū)示例
STM32進階之串口環(huán)形緩沖區(qū)實現(xiàn)
環(huán)形緩沖區(qū)的實現(xiàn)思路
C++環(huán)形緩沖區(qū)設(shè)計與實現(xiàn)

CPU與GPU維護數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作
評論