将条件作为参数传递给 OpenCL 内核
Posted
技术标签:
【中文标题】将条件作为参数传递给 OpenCL 内核【英文标题】:Pass condition as argument to an OpenCL kernel 【发布时间】: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 说不可能做我想做的事,但讨论有点过时了,我想知道是否有任何改变。
所以基本上就是这样。我完全愿意接受建议。
提前致谢!
【问题讨论】:
【参考方案1】:基本上你可以做到这一点。但是,bool
(1 位)不允许作为内核参数。您必须使用char
(8 位)或int
(32 位)作为condition
变量的数据类型。如果您将condition
的值设置为0
(false) 或1
(true),您可以直接将其插入if(condition)
。
我假设condition
在您的情况下对于所有线程来说都是相同的值。出于性能原因,我建议制作两个单独的内核,一个用于if
分支,一个用于else
分支,并将condition
移动到C++ 端以将两个内核中的任何一个排入队列。
【讨论】:
以上是关于将条件作为参数传递给 OpenCL 内核的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GRUB 0.97 menu.lst 将参数传递给内核?