DirectX12 - CPU&GPU Sync(Fence机制)

这里是SunshineBooming,GPU公司一枚小小的Driver工程师,主要工作是写DirectX12 Driver,我会持续更新这个DX12 Spec系列,可能比较冷门,但是都是干货和工作中的心得体会,有任何GPU相关的问题都可以在评论区互动,知无不言:

DirectX12 Spec 总目录

1. 基本概念

  • 一个常见问题:步骤(1)CPU向GPU提交一块Resource,步骤(2)CPU命令GPU利用Resouce进行渲染。从步骤(1)到(2)之间,CPU需要确认Resource完全提交到GPU内存中,如何确保?
  • 一个可行方案:在步骤(1)(2)之间CPU插入一个同步指令,确认Resouce提交完成之后,再下发渲染指令。
  • 当CPU/GPU两种处理器并行工作时,自然而然地就会产生各种同步问题,在DirectX12中用到的是Fence机制,如果CPU想确认前面的所有Command执行完毕,就在Command后插入一个Fence,待GPU返回这个Fence,就能确认之前的所有Command执行完毕。
  • 实际上Fence在GPU Driver中就是一块存有数值的Memory,初始值为0,执行一次Fence同步就向上+1递增。CPU提交Fence之前知道Fence Value是n,GPU收到Fence后确认当前Command执行完毕,并改写Fence Value为n+1,CPU循环检测并确认Fence Value为n+1即完成Fence同步

2. Fence机制

  • 更详细的解释可以参考下图:
    Fence
    1. CPU下发Comamnd1
    1. CPU插入Fence + GPU执行Command1
    1. CPU等待Fence… + GPU执行Command1
    1. GPU递增Fence(注意GPU Hardware在递增Fence前,会确认此前所有Command执行完毕)
    1. CPU确认Fence返回,继续其他Command
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值