首页 / 资讯中心 / 文章详情

第十章 GPU 虚拟地址空间管理:10.7 异步 VM_BIND:绑定作业与信号路径

第十章 GPU 虚拟地址空间管理:10.7 异步 VM_BIND:绑定作业与信号路径 ★ FEATURED ARTICLE
Vulkan 的稀疏绑定以队列操作的形式提交:vkQueueBindSparse等待一组信号量,完成绑定后再发出另一组信号量,绑定与同一队列上的其他操作按提交顺序执行。内核的 VM_BIND 要支持这种语义,就不能在 ioctl 中同步完成页表写入,而是把一次绑定请求转化为在队列上执行的作业,以 fence 表达它与其他工作的先后关系。作业的 fence 一旦发布,就可能被任何等待者依赖,包括内存回收路径,由此产生约束 3:作业执行所依赖的 fence 信号路径上不允许分配内存,也不允许等待可能被回收路径持有的锁。本篇说明绑定队列的接口形式、绑定请求在 ioctl 阶段与作业阶段之间的划分、视图的更新时机,以及作业执行失败时的处理方式。1. 绑定队列1.1 各驱动的接口框架不提供绑定队列,各驱动基于 drm_sched 自行实现。接口形式如表 10.7.1 所示。表 10.7.1 各驱动的绑定队列驱动队列依赖与完成通知同步方式Xeexec_queue_id指定带EXEC_QUEUE_FLAG_VM的绑定队列,未指定时使用 VM 自带的队列;作业在 migrate 引擎上执行syncs 数组,支持 syncobj、时间线
阅读完成 · 觉得有帮助?
咨询建站