drm 給 GPU 發(fā)送硬件命令時(shí),會(huì)將命令放置在一個(gè)環(huán)形緩沖區(qū),顯卡將會(huì)從這個(gè)環(huán)形緩沖區(qū)取命令執(zhí)行。它的工作原理基于一個(gè)循環(huán)隊(duì)列,數(shù)據(jù)存放在一個(gè)環(huán)裝區(qū)域。CPU 會(huì)將命令從隊(duì)列尾插入,GPU 會(huì)從隊(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è)指針都會(huì)往前移動(dòng)。當(dāng)指針到達(dá)隊(duì)列的末尾時(shí),將會(huì)移到隊(duì)列的頭部繼續(xù)執(zhí)行。如果我們不加處理的話,就可能會(huì)發(fā)生讀指針讀取了沒有寫入新命令的地址, 或者是寫指針把命令寫到了命令還沒有被 處理的區(qū)域。
因而當(dāng) CPU 寫入命令時(shí),它應(yīng)該通知 GPU。而 GPU 在讀取命令之后,應(yīng)該通知 CPU。通知操作借由寫 CPU 中的讀指針副本和 GPU 中的寫指針副本完成。環(huán)形緩沖區(qū)示意圖如下圖。

初始階段,讀指針和寫指針指向同一區(qū)域,隨著程序的運(yùn)行,讀指針和寫指針可能會(huì)再次相遇,這時(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文章
11277瀏覽量
224951 -
gpu
+關(guān)注
關(guān)注
28文章
5194瀏覽量
135431 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
41584
原文標(biāo)題:CPU 與 GPU 之間的緩沖區(qū)
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
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ū)簡(jiǎn)介
請(qǐng)問串口的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ū)簡(jiǎn)介 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)
CPU與GPU維護(hù)數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作
評(píng)論