gpu分支序列化与预测

时间:2017-06-21 18:18:42

标签: serialization branch gpu

考虑以下GPU内核代码:

if (p)
  A
else
  B

假设此分支导致扭曲发散。我已经阅读了许多文档(例如,here),这些分支通过序列化两个分支或通过分支预测来处理,通常根据分支的大小选择使用哪种方案。

我的问题是:这两个方案是否有效相同?通过序列化,首先在A线程上执行A块,而B线程停止,然后在A线程停止时在B线程上执行B块;在预测中,首先在所有线程上执行A块但实际上仅在A线程上执行,然后在所有线程上执行B块,但实际上仅在B线程上执行。

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

我是否正确,或者我忽视序列化和预测之间是否存在某些差异?

1 个答案:

答案 0 :(得分:0)

当A和B中的指令数量很少时,分支谓词具有其优势。这是一个已经存在多年的通用计算机体系结构概念。例如,查看Wikipedia文章中列出的优势:

https://en.m.wikipedia.org/wiki/Predication_(computer_architecture)

有了预测,预计总时间会减少。