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ù)結構來保證環(huán)形緩沖區(qū)的正確工作。這些 數(shù)據(jù)結構有緩沖區(qū)的基地址,緩沖區(qū)大小,寫指針和讀指針。其中寫指針和讀指針分別指向 CPU 將要寫入命令的地址和 GPU 將要讀取命令的地址。當這一次的讀取命令或者寫入命令結束之后,這兩個指針都會往前移動。當指針到達隊列的末尾時,將會移到隊列的頭部繼續(xù)執(zhí)行。如果我們不加處理的話,就可能會發(fā)生讀指針讀取了沒有寫入新命令的地址, 或者是寫指針把命令寫到了命令還沒有被 處理的區(qū)域。
因而當 CPU 寫入命令時,它應該通知 GPU。而 GPU 在讀取命令之后,應該通知 CPU。通知操作借由寫 CPU 中的讀指針副本和 GPU 中的寫指針副本完成。環(huán)形緩沖區(qū)示意圖如下圖。
初始階段,讀指針和寫指針指向同一區(qū)域,隨著程序的運行,讀指針和寫指針可能會再次相遇,這時有可能是隊列空,也有可能是隊列滿,為了避免二義性,我們避免發(fā)生隊列滿的情況,總在隊列將滿時,將命令流裝入新的緩沖區(qū)。那么驅(qū)動要時時監(jiān)控著緩沖區(qū)的操作,當隊列空時停止讀取,當隊列將滿時,將讀操作掛起。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
原文標題:CPU 與 GPU 之間的緩沖區(qū)
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
相關推薦
完了數(shù)據(jù),‘0’地址空間的數(shù)據(jù)進行釋放掉,列隊頭指向下一個可以處理數(shù)據(jù)的地址‘1’。從而實現(xiàn)整個環(huán)形緩沖區(qū)的
發(fā)表于 06-08 14:03
歌曲來一步步用代碼實現(xiàn)吧:從隊列到串口緩沖區(qū)的實現(xiàn)串口環(huán)形緩沖區(qū)收發(fā):在很多入門級教程中,我們知道的串口收發(fā)都是:接收一個數(shù)據(jù),觸發(fā)中斷,然
發(fā)表于 08-17 13:11
[RINGBUFF_LEN];}RingBuff_t;RingBuff_t ringBuff;//創(chuàng)建一個ringBuff的緩沖區(qū)②初始化結構體相關信息:使得我們的環(huán)形緩沖區(qū)是頭尾相連
發(fā)表于 10-16 11:40
高速數(shù)據(jù)收發(fā)情況下,需要設計一種合理的緩沖區(qū)進行數(shù)據(jù)傳輸速率的匹配和緩沖。另外,對于ARM CPU來說,由于
發(fā)表于 05-30 05:00
以下內(nèi)容轉自網(wǎng)絡,感謝網(wǎng)友:玩笑joker 環(huán)形緩沖區(qū)是嵌入式系統(tǒng)中十分重要的一種數(shù)據(jù)結構,比如在一個視頻處理的機制中,環(huán)形緩沖區(qū)就可以理
發(fā)表于 10-28 23:29
程序中,經(jīng)常使用環(huán)形緩沖器作為數(shù)據(jù)結構來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形
發(fā)表于 08-17 06:56
、系統(tǒng)在創(chuàng)建DMA緩沖區(qū)的時候,建立了put_index和get_index,會隨著數(shù)據(jù)的寫入和讀取修改它們的值;3、以上兩個相互配合,客觀上將DMA的緩沖區(qū)維護成了一個
發(fā)表于 08-30 14:27
環(huán)形緩沖區(qū)是嵌入式系統(tǒng)中一種重要的常用數(shù)據(jù)結構。在多任務環(huán)境下實現(xiàn)時,如果有多個讀寫任務,一般需要用信號量來保護多個任務共享的環(huán)形
發(fā)表于 04-15 11:35
?40次下載
在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結構來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形
發(fā)表于 03-22 10:03
?7408次閱讀
完成。 缺點: ①緩沖數(shù)據(jù)組數(shù)一定,且有多變量,代碼結構不太清晰。 ②接收數(shù)據(jù)長度可能大于數(shù)組大小,也可能小于數(shù)組大小。不靈活,需要接收數(shù)據(jù)
發(fā)表于 07-22 15:33
?1.1w次閱讀
程序中,經(jīng)常使用環(huán)形緩沖器作為數(shù)據(jù)結構來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形
發(fā)表于 12-28 19:24
?30次下載
在單片機中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數(shù)據(jù)接收與發(fā)送,環(huán)形緩沖區(qū)方式接收數(shù)據(jù)可以更好的保證
發(fā)表于 05-31 11:27
?5802次閱讀
碼代碼的應該學數(shù)據(jù)結構都學過隊列。環(huán)形隊列是隊列的一種特殊形式,應用挺廣泛的。因為有太多文章關于這方面的內(nèi)容,理論知識可以看別人的,下面寫得挺好的:STM32進階之串口環(huán)形緩沖區(qū)實現(xiàn)
發(fā)表于 12-06 10:00
?2768次閱讀
單片機程序開發(fā)一般都會用到UART串口通信,通過通信來實現(xiàn)上位機和單片機程序的數(shù)據(jù)交互。通信中為了實現(xiàn)正常的收發(fā),一般都會有對應的發(fā)送和接收緩存來暫存通信數(shù)據(jù)。這里使用
發(fā)表于 01-17 15:07
?1474次閱讀
Buffer) 環(huán)形緩沖區(qū)(Circular Buffer),也被稱為循環(huán)緩沖區(qū)(Cyclic Buffer)或者環(huán)形隊列(Ring Buffer),是一種
發(fā)表于 11-09 11:21
?1271次閱讀
評論