4

CUDA から OpenCL に移行しました。

CUDA では、演算子のオーバーロードを行うことができました。

__device__ bool operator != (const uint2 a, const uint b) 
{ 
    return ((a.x != b) && (a.y != b)); 
}

OpenCL カーネル内で同じことを行うことはできますか?

4

2 に答える 2

5

いいえ。OpenCL の現在のバージョン (1.0、1.1、または 1.2) の OpenCL カーネル言語は OpenCL C です。これは、C99 の拡張およびサブセット化されたバージョンであり、演算子のオーバーロードを特徴としません。さらに言えば、ユーザー関数のオーバーロードもありません。

OpenCL の将来のバージョンでは、C++ ベースの OpenCL カーネル言語を使用するようにこれが拡張され、オペレーターのオーバーロードが許可される可能性がありますが、これはまだ標準化されておらず、広く利用可能ではありません。

于 2012-05-01T19:55:28.917 に答える
1

それらがまだベータ版であるかどうかはわかりませんが、AMD はこれに従って最新のベータ版でサポートを提供しています: OpenCL Static C++ の主な機能には、カーネルと関数のオーバーロード、カーネルとメンバーのテンプレート、継承、フレンド クラスなどがあります。

于 2012-04-27T19:00:10.607 に答える