gpt4 book ai didi

cuda - 在 GPU 编程中使用条件时,工作项执行什么?

转载 作者:行者123 更新时间:2023-12-04 10:21:11 26 4
gpt4 key购买 nike

如果您在波前执行工作项并且有条件,例如:

  if(x){
...
}
else{
....
}

工作项执行什么?波前中的所有工作项是否都将执行第一个分支(即 x == true )。如果没有 x 为假的工作项,则跳过其余的条件?

如果一个工作项采用替代路径会发生什么。我是否被告知所有工作项也将执行备用路径(因此执行两条路径?)。为什么会这样,怎么不打乱程序执行

最佳答案

NVIDIA GPU 使用条件执行来处理 SIMD 组内的分支分歧(“warp”)。在您的 if..else例如,两个分支都由发散扭曲中的每个线程执行,但那些不遵循给定分支的线程被标记并执行空操作。这是经典的分支发散惩罚 - interwarp 分支发散需要两次通过代码部分才能退出 warp。这并不理想,这就是面向性能的代码试图将其最小化的原因。经常引起人们注意的一件事是假设“首先”执行不同路径的哪一部分。由于在发散扭曲中再次猜测内部执行顺序,导致了一些非常微妙的错误。

对于更简单的条件,NVIDIA GPU 支持 ALU 处的条件评估,这不会导致发散,而对于整个扭曲遵循相同路径的条件,显然也没有惩罚。

关于cuda - 在 GPU 编程中使用条件时,工作项执行什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897454/

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