[branch] 如何在 HLSL 中执行?

How does [branch] get executed in HLSL?

[branch] attribute can mark an if statement in HLSL to make it execute only one branch 而不是所有分支并丢弃结果,就像使用 [flatten] 时那样。

我的问题是,当分支与 warp/wavefront 分叉时,这实际上如何工作?据我所知,在这种情况下,所有线程都必须执行 warp 中任何线程采用的所有分支(比如使用 [flatten] 时),这是因为它们都在同一个 SIMD 块中并且必须执行相同的指令。

由于 GeForce 系列 6xx GPU 实际上支持分支,尽管形式有限且性能成本较高。 [branch][flatten] 标签只是提示编译器更喜欢其中一个 如果支持且可能 。它基本上取决于硬件和驱动程序,因此不同的硬件或不同的驱动程序版本最终可能会确定与您使用标签指定的执行方式不同。

您可以在网上找到更多信息,例如check this link