【问题标题】:Pass condition as argument to an OpenCL kernel将条件作为参数传递给 OpenCL 内核
【发布时间】:2022-01-14 16:54:57
【问题描述】:

我正在尝试编写一个将条件(即布尔值)作为参数的 OpenCL 内核。我的目标是编写一个以下列方式运行的内核:

__kernel void operation(
    __global double *vec,
    const bool condition,  // is this possible?
    const int n)
{
    // ...
    if(condition){
        // do this ...
    }
    else{
        // do that ...
    }
}

我发现这个thread 说不可能做我想做的事,但讨论有点过时了,我想知道是否有任何改变。

所以基本上就是这样。我完全愿意接受建议。

提前致谢!

【问题讨论】:

    标签: if-statement conditional-statements gpu opencl


    【解决方案1】:

    基本上你可以做到这一点。但是,bool(1 位)不允许作为内核参数。您必须使用char(8 位)或int(32 位)作为condition 变量的数据类型。如果您将condition 的值设置为0 (false) 或1 (true),您可以直接将其插入if(condition)

    我假设condition 在您的情况下对于所有线程来说都是相同的值。出于性能原因,我建议制作两个单独的内核,一个用于if 分支,一个用于else 分支,并将condition 移动到C++ 端以将两个内核中的任何一个排入队列。

    【讨论】:

      猜你喜欢
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 2012-10-18
      相关资源
      最近更新 更多