0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Dbwd_Imgtec 来源:未知 作者:李倩 2018-03-30 15:01 次阅读

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

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

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

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

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

    关注

    68

    文章

    10824

    浏览量

    211088
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4700

    浏览量

    128673
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    40087

原文标题:CPU 与 GPU 之间的缓冲区

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32进阶之串口环形缓冲区实现

    完了数据,‘0’地址空间的数据进行释放掉,列队头指向下一个可以处理数据的地址‘1’。从而实现整个环形缓冲区
    发表于 06-08 14:03

    MCU进阶之串口环形缓冲区实现

    歌曲一步步用代码实现吧:从队列到串口缓冲区的实现串口环形缓冲区收发:在很多入门级教程中,我们知道的串口收发都是:接收一个数据,触发中断,然
    发表于 08-17 13:11

    STM32串口环形缓冲区的实现

    [RINGBUFF_LEN];}RingBuff_t;RingBuff_t ringBuff;//创建一个ringBuff的缓冲区②初始化结构体相关信息:使得我们的环形缓冲区是头尾相连
    发表于 10-16 11:40

    基于ARM和FPGA的环形缓冲区接口设计方案

    高速数据收发情况下,需要设计一种合理的缓冲区进行数据传输速率的匹配和缓冲。另外,对于ARM CPU来说,由于
    发表于 05-30 05:00

    环形缓冲区的设计分享!

    以下内容转自网络,感谢网友:玩笑joker 环形缓冲区是嵌入式系统中十分重要的一种数据结构,比如在一个视频处理的机制中,环形缓冲区就可以理
    发表于 10-28 23:29

    环形缓冲区简介

    程序中,经常使用环形缓冲器作为数据结构存放通信中发送和接收的数据环形
    发表于 08-17 06:56

    请问串口的DMA接收缓冲区是不是环形缓冲区

    、系统在创建DMA缓冲区的时候,建立了put_index和get_index,会随着数据的写入和读取修改它们的值;3、以上两个相互配合,客观上将DMA的缓冲区维护成了一个
    发表于 08-30 14:27

    环形缓冲区读写操作的分析与实现

    环形缓冲区是嵌入式系统中一种重要的常用数据结构。在多任务环境下实现时,如果有多个读写任务,一般需要用信号量保护多个任务共享的环形
    发表于 04-15 11:35 40次下载

    环形缓冲区的实现原理

    在通信程序中,经常使用环形缓冲区作为数据结构存放通信中发送和接收的数据环形
    的头像 发表于 03-22 10:03 7493次阅读
    <b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b>的实现原理

    缓冲区是啥意思 STM32串口数据接收之环形缓冲区

    完成。 缺点: ①缓冲数据组数一定,且有多变量,代码结构不太清晰。 ②接收数据长度可能大于数组大小,也可能小于数组大小。不灵活,需要接收数据
    的头像 发表于 07-22 15:33 1.1w次阅读

    STM32串口数据接收 --环形缓冲区

    程序中,经常使用环形缓冲器作为数据结构存放通信中发送和接收的数据环形
    发表于 12-28 19:24 30次下载
    STM32串口<b class='flag-5'>数据</b>接收 --<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b>

    环形缓冲区简介 STM32环形缓冲区示例

    在单片机中串口通信是我们使用最频繁的,使用串口通信就会用到串口的数据接收与发送,环形缓冲区方式接收数据可以更好的保证
    的头像 发表于 05-31 11:27 5990次阅读
    <b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b>简介 STM32<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b>示例

    STM32进阶之串口环形缓冲区实现

    码代码的应该学数据结构都学过队列。环形队列是队列的一种特殊形式,应用挺广泛的。因为有太多文章关于这方面的内容,理论知识可以看别人的,下面写得挺好的:STM32进阶之串口环形缓冲区实现
    发表于 12-06 10:00 2928次阅读

    环形缓冲区的实现思路

    单片机程序开发一般都会用到UART串口通信,通过通信实现上位机和单片机程序的数据交互。通信中为了实现正常的收发,一般都会有对应的发送和接收缓存暂存通信数据。这里使用
    的头像 发表于 01-17 15:07 1580次阅读

    C++环形缓冲区设计与实现

    Buffer) 环形缓冲区(Circular Buffer),也被称为循环缓冲区(Cyclic Buffer)或者环形队列(Ring Buffer),是一种
    的头像 发表于 11-09 11:21 1847次阅读
    C++<b class='flag-5'>环形</b><b class='flag-5'>缓冲区</b>设计与实现