繁体   English   中英

Vulkan - 等待栅栏太久

[英]Vulkan - too long waiting for fence

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

在此处输入图像描述

如您所见,等待时间太长,而GPU工作时间很小:

在此处输入图像描述

我知道等待围栏效率不高。 但我认为这里有些奇怪。 当它是 OpenGL 时,可以在每次抽奖后同步 CPU 和 GPU。 即使使用不同的着色器、纹理和大量工作。 所以,没有这样的等待一定是可能的。

Vulkan 是一些错误还是正常行为?

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

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

只有当 CPU 开始超过 GPU 时,才会在无信号围栏上等待。 您应该只检查前一帧的栅栏,并且仅当您需要使用该帧使用的一些 memory 资源或交换链图像时。 如果它仍然没有信号,go 会做任何不需要使用这些资源的 CPU 工作。 只有当您没有其他工作要做时,您才应该真正在非零时间的围栏上等待。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM