Vulkan Dispatching commands

来源:互联网 发布:波莫纳学院 知乎 编辑:程序博客网 时间:2024/06/10 00:03

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进行数据的并行处理,加快操作。。。这样对吗?

0 0