在OpenCL内核中的运算符重载

4
我已经从CUDA转向OpenCL。
在CUDA中,我可以进行运算符重载:
__device__ bool operator != (const uint2 a, const uint b) 
{ 
    return ((a.x != b) && (a.y != b)); 
}

我能在OpenCL内核中完成相同的操作吗?


3
据我所知,OpenCL仅支持C99的一个子集,不支持运算符重载。 - talonmies
不行。在AMD的OpenCL中,我可以在编译选项中添加-x clc++。之后,我可以进行函数重载等操作。 - atom
@atz,你的意思是函数重载是C++的特性而不是C的特性? - mfontanini
1
函数重载不是 C 语言的特性,但这不是我们讨论的话题。 - atom
@atz 无论AMD提供什么专有扩展,在OpenCL中通常是不可能的,因为它是针对C99编写的,正如talonmies所正确指出的那样。但是,正如您自己所述,您可以通过编译器选项在AMD的OpenCL中启用此功能,您似乎已经意识到这一事实并且我无法理解您对talonmies评论的绝对否定。 - Christian Rau
Christian,我认为atz的意思是,“不,你不能重载,但使用AMD的编译器可以。” - vocaro
2个回答

5
不可以。任何当前版本的OpenCL(1.0、1.1或1.2)的OpenCL内核语言都是OpenCL C,它是基于C99的扩展和子集,并不具备运算符重载-或者用户函数重载。未来的OpenCL版本可能会扩展支持基于C ++的OpenCL内核语言,从而允许运算符重载-但这还没有标准化或广泛使用。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接