我有以下CUDA核心,其中执行计算上昂贵的计算然后在两个操作中使用.
偶尔,我想myKernel
没有operationOne
.我知道代码分支通常是个坏主意,但是如果所有线程都运行相同的分支,那么仍然存在很大的低效率吗?即以下是一个坏主意?
__global__ void myKernel(bool doOpOne, ...) { // usefulValue is computed if(doOpOne) { // perform operation one } // perform operation two }
Robert Crove.. 5
这不一定是个坏主意.根据你所展示的内容和你的规定,我不应该看到任何明显的扭曲分歧.
但是,你也可以考虑这里描述的模板 (我相信你的问题几乎与那个问题重复 - 也许这个问题应该标记为那个问题的副本).这将允许您为这样一个在编译时优化的简单示例(只有两个选项)创建内核,因此不会因使用而导致分支doOpOne
.
这不一定是个坏主意.根据你所展示的内容和你的规定,我不应该看到任何明显的扭曲分歧.
但是,你也可以考虑这里描述的模板 (我相信你的问题几乎与那个问题重复 - 也许这个问题应该标记为那个问题的副本).这将允许您为这样一个在编译时优化的简单示例(只有两个选项)创建内核,因此不会因使用而导致分支doOpOne
.