一个前端有用户代理,后端有GPU的计算机系统,其组件并行地在不同的时间线上工作:
- Content timeline 内容时间线
- Device timeline 设备时间线
- Queue timeline 队列时间线
内容时间线 :与 web 页面脚本的执行有关;
设备时间线 :与用户代理发出的GPU设备操作相关联。它包括适配器、设备、GPU资源和状态对象的创建,从控制GPU的用户代理部分的角度来看,这些操作通常是同步的,但可以存在于单独的操作系统进程中。
队列时间线: 与GPU计算单元上的操作执行相关联。它包括在GPU上运行的实际绘制、复制和计算作业。
例如:
GPUComputePassEncoder.dispatchWorkgroups()
:
-
用户通过调用GPUComputePassEncoder的方法来编码dispatchWorkgroups命令,该方法发生在Content时间轴上。
-
用户调用GPUQueue.submit(),将GPUCommandBuffer交给用户代理,用户代理通过调用操作系统驱动程序来进行低级提交操作,从而在设备时间轴上处理它。
-
提交由GPU调用调度器分派到实际的计算单元上执行,这发生在Queue时间轴上。
GPUDevice.createBuffer()
:
-
用户填写一个GPUBufferDescriptor并用它创建一个GPUBuffer,这发生在Content时间轴上。
-
用户代理在设备时间轴上创建一个低级缓冲区。
在此规范中,当结果值依赖于发生在除Content时间轴以外的任何时间轴上的工作时,将使用异步操作,它们在JavaScript中由callbacks和promises表示。
GPUBuffer.mapAsync()
:
-
用户请求在Content时间轴上映射一个GPUBuffer,并返回一个promise。
-
用户代理检查缓冲区当前是否被GPU使用,并提醒自己在使用结束时进行检查
-
在队列时间轴上操作的GPU使用缓冲区完成后,用户代理将其映射到内存并解析promise。文章来源:https://www.toymoban.com/news/detail-468945.html
文章来源地址https://www.toymoban.com/news/detail-468945.html
到了这里,关于WebGPU 编程模型之时间轴的概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!