Dispatching commands
Dispatching cmd used to dispatch workgroups into the boundedcompute pipeline。
Q: 啥是workgroup呢?
A work group is fundamentally a 3D block of work items,where each work item is processed by an invocation of a compute shader runningyour code,就是说 work group 是一个三维工作组,其中每一个维度都有一个或多个 invocation来处理我们的代码,这样看来,最大的并行操作为:x* y * z, 目前我们的代码是1Dwork group. Compute shader processor将每一个维度的workgroup分成多个chunks, 这些chunks切成多个时间片并行处理。
Workgroup规定了SPIR-V模块的操作范围,即SPIR-V模块的操作限定在一个workGroup之内。
Dispatch的两种方式
1. 调用vkCmdDispatch函数来记录一个dispatch,需要注意的是,这个命令只能在renderpass instance之外调用。
vkCmdDispatch入参
1. VkCommandBuffer:
2. X : number of workgroups to dispatch in the Xdimension.
3. Y: number of workgroups to dispatch in the ydimension
4. Z: number of workgroups to dispatch in the zdimension.
5. If set z parameter to 1, it indicatetwo-dimensional work groups can be dispatched, if set y and z parameters to 1,one-dimensional work group can be dispatched, 代码当中是one dimensional work group.
6. X, y, z 参数的大小由绑定的compute pipeline决定。
Q: Dispatch & workgroup 与Compute Pipeline/shader的关系?
A: compute shader 和图像处理有关的组织架构和细节描述为:workgroupsand Dispatch.
2. 也可以调用vkCmdDispatchIndirect函数记录一个indirectdispatch.
Q: 啥是indirectdispatch呢?
以上两个dispatch命令功能相似,只不过indirect dispatch的入参是read by the device from a buffer, 就是说划分的workgroup是从其他变量间接获取的:
1. Vkcommandbuffer
2. Vkbuffer, 包含dispatch 参数的buffer.
3. Vkdevicesize
所以:
理解dispatchcommand命令前提是需要理解computeshader是怎么工作的….
Compute Shader: 可以为图形处理器提供强大的并行计算能力, 问题是:computeshader 的硬件结构是如何?例如:
1. 在进入并行运算之前有没有对应的dispatch processor,即Dispatchprocessor是否是computeshader的一部分?
2. 因为都涉及到并行运算,所以Compute shader与市面上常说的流处理器有什么关系吗?
3. 因为 computeshader与其他graphicshader独立分开的,所以所有涉及到并行运算的处理都可以交由computeshader来办理?还有由APP来决定是否做commanddispatch? 还是由硬件本身决定?
是否理解为如果需要资源在CPU与GPU之间传输时,需要使用computeshader进行数据的并行处理,加快操作。。。这样对吗?