gpt4 book ai didi

vulkan - 使用管道障碍代替信号灯

转载 作者:行者123 更新时间:2023-12-04 06:40:31 24 4
gpt4 key购买 nike

我想确保我正确理解管道障碍。
因此,如果第二个屏障的源阶段晚于第一个屏障的目标阶段,则屏障能够同步两个命令缓冲区。这样对吗?
当然,如果命令缓冲区在管道的不同迭代期间执行,我将需要使用信号量。

在我看来,同步是Vulkan中最难掌握的部分。 IMO规范对此尚不十分清楚。

最佳答案

前言:

适用于Vulkan管道屏障的大多数内容都适用于通用屏障和内存屏障,因此您可以从那里开始建立直觉。

我要指出的是,尽管该规范不是教程,但它相当清晰易读。同步,也许是最难的部分,规范中的描述也反射(reflect)了这一点。最重要的是,内存障碍对于大多数人来说都是新颖的(通常,它们被更高语言的编译器所屏蔽)。

所需的定义:

管道是工作单元如何处理的抽象方案。共有四种类型(尽管Vulkan并未说供应商只要遵循规则就如何做事):

  • 主机访问伪管道(一级)
  • 转移(一级)
  • 计算(一级)
  • 图形(具有很多阶段,即DI→VI→VS→TCS→TES→GS→EFT→FS→LFT→输出)

  • 有特殊阶段TOP(完成任何操作之前),BOTTOM(完成所有操作之后)和ALL(与设置了所有阶段的位域相同)。

    (操作) 命令是需要(一个或多个)通过管道传递的命令。必须将其记录到命令缓冲区中(主机通过 vkMapMemory()进行读写操作除外)。

    命令缓冲区是一些命令序列(以 记录的顺序!)。 队列也是 记录的命令序列(从提交的命令缓冲区串联)。

    队列在执行命令的顺序上有一定的余地(只要保留用户设置的状态就可以对命令进行重新排序),并且还可能与命令重叠(例如在完成前一个命令的FS之前执行下一个命令的VS)。用户定义的同步原语为该余地设置了界限。 (也有一些隐含的保证,但是最好不要依赖它们,直到自信为止过度同步)

    我对解释管道壁垒的看法:

    (也许是不幸的)流水线障碍融合了三个独立的方面-执行障碍,内存障碍和布局转换(如果是图像的话)。

    执行屏障部分可确保在屏障到达 执行之前,记录的所有命令至少在 srcStageMask 中指定的管道阶段(或多个阶段)之前,在之前,在屏障开始执行其指定阶段(或多个阶段)之后记录的任何命令)在 dstStageMask中。

    它只处理执行依赖关系,而不处理内存! 内存屏障部分确保在该 执行屏障依赖之间(即,在depending之后和从属命令和阶段之前)之间的某处正确地刷新了内存(缓存)并使其无效。

    您可以提供它是哪种类型的内存依赖关系,以及在哪种类型的源/消费者之间(以便驱动程序可以选择适当的操作而无需记住状态本身)。通常情况下,读写依赖关系(读写和读写不需要任何内存同步,而读写通常通常没有多大意义-为什么要覆盖一些数据而不先读取它们)。

    在某些硬件上,内存中不同的数据布局可能是有利的(甚至是必要的)。在处理内存依赖关系的同时,对数据进行重新排序以遵循新的指定布局。

    关于vulkan - 使用管道障碍代替信号灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38582854/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com