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

    文章

    10428

    浏览量

    206517
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4410

    浏览量

    126635
  • 数据结构
    +关注

    关注

    3

    文章

    562

    浏览量

    39898

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    杰杰带你解读【机智云】环形缓冲区源码

    结构体。#define min(a, b) (a)rbHead = rb->rbBuff; rb->rbTail = rb->rbBuff; return 0;}这是个创建环形缓冲区
    发表于 07-17 14:58

    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

    怎么实现串口环形缓冲区

    怎么实现串口环形缓冲区
    发表于 12-06 06:01

    stm32是怎样使用环形缓冲区形式去接收数据

    stm32是怎样使用环形缓冲区形式去接收数据的?如何去实现其代码呢?
    发表于 12-07 06:24

    实现队列环形缓冲的方法

    串口队列环形缓冲区队列串口环形缓冲的好处代码实现队列  要实现队列环形缓冲,还需要一定的
    发表于 02-21 07:11

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

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

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

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

    环形缓冲区的实现原理

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

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

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

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

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