等待栅栏时间太长

Tro*_*rop 2 c# vulkan

我将 Vulkan 与 C# 和 Silk.net 结合使用。并且无法理解为什么即使是很小的命令队列也需要这么长时间才能完成。请看一下这个CPU时间线:

在此输入图像描述

正如您所看到的,等待时间太长,而GPU工作时间却很短:

在此输入图像描述

我知道等待栅栏的效率很低。但我觉得有些奇怪。当使用 OpenGL 时,可以在每次绘制后同步 CPU 和 GPU。即使使用不同的着色器、纹理和大量工作。所以,不用这样的等待,一定是可以的。

这是 Vulkan 的错误还是正常行为?

Nic*_*las 5

Vulkan 没有指定时间方面的行为。所以这既不是“错误”也不是“正常”。此类性能问题与 API 定义无关。它们是对系统的合理期望。

您所说的延迟时间似乎约为十分之一毫秒。就在无信号围栏上等待的开销而言,这并非完全不合理。期望在等待的 GPU 操作完成后立即唤醒 CPU 线程是不合理的。

只有当 CPU 开始超过 GPU 的运行速度时,才会在未发出信号的栅栏上等待。您应该仅检查前一帧中的栅栏,并且仅当您需要使用该帧使用的某些内存资源或交换链图像时。如果它仍然没有发出信号,请继续执行不需要使用这些资源的任何 CPU 工作。只有当您没有其他工作要做时,您才应该以非零时间真正观望。