CUDA のカーネルや openCL のような GPU コードで SIMD 組み込み関数を使用できるかどうか疑問に思っています。それは可能ですか?
4 に答える
いいえ、SIMD組み込み関数はASMコードの小さなラッパーにすぎません。これらはCPU固有です。それらについての詳細はこちら。
一般的には、なぜあなたはそれをするのですか?CUDAとOpenCLには、実際には「GPU組み込み関数」である多くの「関数」がすでに含まれています(たとえば、これらはすべて、GPUのシングルポイント数学組み込み関数です) 。
OpenCL C 言語に組み込まれているベクトル データ型を使用します。たとえば、float4 または float8 です。Intel または AMD デバイス ドライバーで実行する場合、これらはベンダーの OpenCL デバイス ドライバーの SSE/AVX 命令に変換されます。OpenCL には、SSE/AVX ドット生成命令を使用する dot(v1, v2) などの関数がいくつか含まれています。OpenCL C 言語からは取得できないと思われる特定の組み込み関数に興味がありますか?
はい、コンパイラがこれらの組み込み関数の使用をサポートしていれば、CPU または GPU のカーネル コードで SIMD 組み込み関数を使用できます。
通常、SIMD を使用するより良い方法は、カーネルで Vector データ型を使用することです。これにより、コンパイラーは可用性に基づいて SIMD を使用することを決定します。これにより、カーネル コードも移植可能になります。
Mostly no, because GPU programming languages use different programming model (SIMT). However, AMD GPU do have an extension to OpenCL which provides intrinsics for some byte-granularity operations (thus allowing to pack 4 values into 32-bit GPU registers). These operations are intended for video processing.