当前位置:  开发笔记 > 编程语言 > 正文

使用布尔代数和传递的参数在CUDA中实现类似内核的两个版本是否有效?

如何解决《使用布尔代数和传递的参数在CUDA中实现类似内核的两个版本是否有效?》经验,为你挑选了1个好方法。

我有以下CUDA核心,其中执行计算上昂贵的计算然后在两个操作中使用.

偶尔,我想myKernel没有operationOne.我知道代码分支通常是个坏主意,但是如果所有线程都运行相同的分支,那么仍然存在很大的低效率吗?即以下是一个坏主意?

__global__ void myKernel(bool doOpOne, ...) {
    // usefulValue is computed

    if(doOpOne) {
         // perform operation one
    }
    // perform operation two
}

Robert Crove.. 5

这不一定是个坏主意.根据你所展示的内容和你的规定,我不应该看到任何明显的扭曲分歧.

但是,你也可以考虑这里描述的模板 (我相信你的问题几乎与那个问题重复 - 也许这个问题应该标记为那个问题的副本).这将允许您为这样一个在编译时优化的简单示例(只有两个选项)创建内核,因此不会因使用而导致分支doOpOne.



1> Robert Crove..:

这不一定是个坏主意.根据你所展示的内容和你的规定,我不应该看到任何明显的扭曲分歧.

但是,你也可以考虑这里描述的模板 (我相信你的问题几乎与那个问题重复 - 也许这个问题应该标记为那个问题的副本).这将允许您为这样一个在编译时优化的简单示例(只有两个选项)创建内核,因此不会因使用而导致分支doOpOne.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有