Serialization gpu分支序列化与谓词

Serialization gpu分支序列化与谓词,serialization,branch,gpu,Serialization,Branch,Gpu,考虑以下GPU内核代码: if (p) A else B 假设此分支导致扭曲发散。我在许多文档(例如)中读到过这样的分支,它们要么通过序列化两个分支,要么通过分支谓词来处理,通常根据分支的大小来选择使用哪个方案 我的问题是:这两个方案实际上不是相同的吗?对于序列化,首先在A线程上执行A块,而B线程停止,然后在A线程停止时在B线程上执行B块;使用谓词时,首先在所有线程上执行A块,但实际上仅在A线程上执行,然后在所有线程上执行B块,但实际上仅在B线程上执行 在这两种方案中,A线程(实际)执

考虑以下GPU内核代码:

if (p)
  A
else
  B
假设此分支导致扭曲发散。我在许多文档(例如)中读到过这样的分支,它们要么通过序列化两个分支,要么通过分支谓词来处理,通常根据分支的大小来选择使用哪个方案

我的问题是:这两个方案实际上不是相同的吗?对于序列化,首先在A线程上执行A块,而B线程停止,然后在A线程停止时在B线程上执行B块;使用谓词时,首先在所有线程上执行A块,但实际上仅在A线程上执行,然后在所有线程上执行B块,但实际上仅在B线程上执行

在这两种方案中,A线程(实际)执行A块,然后B线程(实际)执行B块。实现细节显然有所不同,但就我所知,基本行为和性能实际上是相同的


我是对的,还是我忽略了序列化和谓词之间的一些区别?

当A和B中的指令数较少时,分支谓词有其优势。这是一个通用的计算机体系结构概念,已经存在好几年了。例如,看看维基百科文章中列出的优势:


使用预测时,总时间预计会更短。

分支预测在A和B中的指令数较少时有其优势。这是一个通用的计算机体系结构概念,已经存在好几年了。例如,看看维基百科文章中列出的优势:

通过预测,预计总时间将更短