drm 給 GPU 發送硬件命令時,會將命令放置在一個環形緩沖區,顯卡將會從這個環形緩沖區取命令執行。它的工作原理基于一個循環隊列,數據存放在一個環裝區域。CPU 會將命令從隊列尾插入,GPU 會從隊頭取數據,隊頭和隊尾在不斷地更新中。這個環形緩沖區存放在 GTT 內存中,以便顯卡可以訪問到。
CPU 和 GPU 將各自維護一些數據結構來保證環形緩沖區的正確工作。這些 數據結構有緩沖區的基地址,緩沖區大小,寫指針和讀指針。其中寫指針和讀指針分別指向 CPU 將要寫入命令的地址和 GPU 將要讀取命令的地址。當這一次的讀取命令或者寫入命令結束之后,這兩個指針都會往前移動。當指針到達隊列的末尾時,將會移到隊列的頭部繼續執行。如果我們不加處理的話,就可能會發生讀指針讀取了沒有寫入新命令的地址, 或者是寫指針把命令寫到了命令還沒有被 處理的區域。
因而當 CPU 寫入命令時,它應該通知 GPU。而 GPU 在讀取命令之后,應該通知 CPU。通知操作借由寫 CPU 中的讀指針副本和 GPU 中的寫指針副本完成。環形緩沖區示意圖如下圖。
初始階段,讀指針和寫指針指向同一區域,隨著程序的運行,讀指針和寫指針可能會再次相遇,這時有可能是隊列空,也有可能是隊列滿,為了避免二義性,我們避免發生隊列滿的情況,總在隊列將滿時,將命令流裝入新的緩沖區。那么驅動要時時監控著緩沖區的操作,當隊列空時停止讀取,當隊列將滿時,將讀操作掛起。
-
cpu
+關注
關注
68文章
10854瀏覽量
211587 -
gpu
+關注
關注
28文章
4729瀏覽量
128890 -
數據結構
+關注
關注
3文章
573瀏覽量
40123
原文標題:CPU 與 GPU 之間的緩沖區
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論