CPU与GPU维护数据结构来保证环形缓冲区的正确工作

电子说

1.2w人已加入

描述

drm 给 GPU 发送硬件命令时,会将命令放置在一个环形缓冲区,显卡将会从这个环形缓冲区取命令执行。它的工作原理基于一个循环队列,数据存放在一个环装区域。CPU 会将命令从队列尾插入,GPU 会从队头取数据,队头和队尾在不断地更新中。这个环形缓冲区存放在 GTT 内存中,以便显卡可以访问到。

CPU 和 GPU 将各自维护一些数据结构来保证环形缓冲区的正确工作。这些 数据结构有缓冲区的基地址,缓冲区大小,写指针和读指针。其中写指针和读指针分别指向 CPU 将要写入命令的地址和 GPU 将要读取命令的地址。当这一次的读取命令或者写入命令结束之后,这两个指针都会往前移动。当指针到达队列的末尾时,将会移到队列的头部继续执行。如果我们不加处理的话,就可能会发生读指针读取了没有写入新命令的地址, 或者是写指针把命令写到了命令还没有被 处理的区域。

因而当 CPU 写入命令时,它应该通知 GPU。而 GPU 在读取命令之后,应该通知 CPU。通知操作借由写 CPU 中的读指针副本和 GPU 中的写指针副本完成。环形缓冲区示意图如下图。

数据结构

初始阶段,读指针和写指针指向同一区域,随着程序的运行,读指针和写指针可能会再次相遇,这时有可能是队列空,也有可能是队列满,为了避免二义性,我们避免发生队列满的情况,总在队列将满时,将命令流装入新的缓冲区。那么驱动要时时监控着缓冲区的操作,当队列空时停止读取,当队列将满时,将读操作挂起。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分