vulkan 中的连续计算内核

问题描述 投票:0回答:1

我有三个计算内核,它们必须连续运行、同步,以便前一个内核在下一个内核启动之前完成。

这是因为前一个内核写入了下一个内核使用的缓冲区。

这可能是一个错误,但我现在所拥有的:

  • 1 台设备
  • 1 个队列
  • 1 个命令缓冲区
  • 3 个计算管道,每个内核一个

我尝试添加

VkMemoryBarrier
VkBufferMemoryBarrier
,但我认为我没有同步它们,因为它们被放置在管道上,而且我认为不是在管道之间?我用
vkCmdPipelineBarrier

添加了它们

确保三个计算内核连续运行并刷新它们之间的缓存的好方法是什么?

synchronization vulkan memory-barriers
1个回答
0
投票

https://github.com/KhronosGroup/Vulkan-Docs/wiki/Synchronization-Examples https://themaister.net/blog/2019/08/14/yet-another-blog-explaining-vulkan-synchronization/ https://www.khronos.org/blog/understanding-vulkan-synchronization

我认为第一个链接中的第一个示例几乎回答了您的问题。只要您指定正确的阶段和访问掩码,您的方法可能就有效,但您没有说明您正在使用哪些。

障碍也没有“管道上”或“管道之间”的概念。管道绑定只是说明下一次调度应该有效的管道,并且不与屏障交互。

因此,如果您放入命令缓冲区:

绑定 A、调度 A、屏障、绑定 B、调度 B

这应该与:

相同

绑定A,调度A,绑定B,障碍,调度B

B 的绑定直到 B 的调度才真正生效,并且直到满足屏障才发生。

© www.soinside.com 2019 - 2024. All rights reserved.