我从 CUDA 搬到了 OpenCL。
在 CUDA 中,我能够进行运算符重载:
__device__ bool operator != (const uint2 a, const uint b)
{
return ((a.x != b) && (a.y != b));
}
我可以在 OpenCL 内核中做同样的事情吗?
没有。任何当前版本的 OpenCL(1.0、1.1 或 1.2)的 OpenCL 内核语言都是 OpenCL C - C99 的扩展和子集版本,它不具有运算符重载 - 或者就此而言,用户函数的重载。
未来版本的 OpenCL 可能会将其扩展为具有基于 C++ 的 OpenCL 内核语言,从而允许运算符重载——但这尚未标准化或广泛可用。
我不知道他们是否仍处于测试阶段,但 AMD 在他们的最新测试版中提供了支持: OpenCL Static C++ 的关键功能包括内核和函数重载、内核和成员模板、继承、友元类等等。