当前位置: 首页 > news >正文

Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(七)

围栏排队操作的 CPU 时间戳

鉴于以下情况,让 UMD 记录这些 CPU 时间戳没有什么好处:

  • 可以在 GPU 执行包括命令列表的命令缓冲区之前几分钟记录命令列表。
  • 这几分钟可能与同一命令缓冲区中的其他同步对象不同步。

将 CPU 时间戳包含在 UMD 向 GPU 写入的日志缓冲区的指令中是有代价的,因此 CPU 时间戳不包含在日志条目有效负载中。

相反,运行时或 UMD 可以在记录命令列表时发出带有 CPU 时间戳的本机围栏排队 ETW 事件。 因此,工具可以通过组合来自该新事件的 CPU 时间戳和来自日志缓冲区条目的 GPU 时间戳来构建围栏排队和已完成事件的时间线。

发出信号或取消阻止围栏时 GPU 上的操作顺序

UMD 必须确保在构建命令列表指示 GPU 发出信号/取消阻止围栏时保持以下顺序:

  • 将新围栏值写入围栏 GPU VA/CMP VA。
  • 将日志有效负载写入相应的日志缓冲区 GPU VA/CMP VA。
  • 如有必要,引发本机围栏信号中断。

此操作顺序确保当中断引发到 OS 时,Dxgkrnl 看到最近的日志条目。

允许日志缓冲区溢出


GPU 可以通过覆盖 OS 尚未看到的条目来溢出日志缓冲区。 它通过递增 WraparoundCount 来执行此操作。

当 OS 最终读取日志时,它可以通过将日志标头中的新 WraparoundCount 值与其缓存的值进行比较来检测是否发生了溢出。 如果发生溢出,OS 有以下回退选项:

  1. 为了在发生溢出时取消阻止围栏,OS 会扫描所有围栏,并确定哪些等待程序被取消阻止。
  2. 如果启用了跟踪,OS 可以在跟踪中发出标志,以通知用户事件丢失。 此外,启用跟踪后,OS 首先会增加日志缓冲区的大小,以防止首次溢出。

UMD 没有必要在处理日志缓冲区条目时实现回压支持。

日志缓冲区时间戳为空或重复

在一般情况下,Dxgkrnl 期望日志条目中的时间戳单调递增。 但是,在某些情况下,后续日志条目的时间戳为零或与以前的日志条目相同。

例如,在具有链接显示适配器的方案中,LDA 中的链接适配器之一可以跳过围栏写入操作。 在这种情况下,其日志缓冲区条目的时间戳为零。 Dxgkrnl 处理此类情况。 也就是说, Dxgkrnl 从不期望给定日志条目的时间戳小于上一个日志条目的时间戳;即,时间戳永远不会倒退。

http://www.dtcms.com/a/58214.html

相关文章:

  • 初阶数据结构(C语言实现)——4.1栈
  • blender学习25.3.8
  • 【Java学习笔记】三、运算符,表达式、分支语句和循环语句
  • 为什么js小数相加,会产生精度缺失的问题,怎么解决?
  • 模拟调制技术详解
  • 前后端数据加密传输【最佳方案】
  • 如何结合NLP(自然语言处理)技术提升OCR系统的语义理解和上下文感知能力?
  • Docker Engine 配置指南
  • 【高级篇】大疆Pocket 3加ENC编码器实现无线RTMP转HDMI进导播台
  • 《白帽子讲 Web 安全》之身份认证
  • 一篇文章讲解清楚ARM9芯片启动流程
  • 网络版汉译英服务(muduo)
  • HJ C++11 Day2
  • ControlNet
  • 多模式数据库如何向现代数据管理变革
  • 神经网络|(十四)|霍普菲尔德神经网络-Hebbian训练
  • 安装anaconda在cmd中找不到安装版本
  • 蓝桥杯备赛攻略(怒刷5个月拿省一)
  • 2025最新Postman、Apipost和Apifox API 协议与工具选择方案解析
  • LeetCodeHot100
  • C/S架构与B/S架构
  • 聚簇索引 VS 非聚簇索引
  • 爬虫案例八js逆向爬取网易音乐
  • 考研数一非数竞赛复习之Stolz定理求解数列极限
  • 关于AI数据分析可行性的初步评估
  • SQLAlchemy系列教程:如何防止SQL注入
  • Mysql表的复合查询
  • MongoDB(一) - MongoDB安装教程(Windows + Linux)
  • Qt中实现多个QMainWindow同时显示
  • Spring MVC笔记