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++ の主な機能には、カーネルと関数のオーバーロード、カーネルとメンバーのテンプレート、継承、フレンド クラスなどがあります。