2016-12-02 10 views
1

OpenCL 1.2を実行しているGPU用に開発中です。OpenCL 1/2平方根

私はハーフ平方根関数を使用して、私の半分のデータ型の平方根を計算しようとしています。

しかし、すべての半平方根関数については、標準平方根関数へのマクロ展開になります。

この結果、関数のオーバーロードがハーフデータ型と一致しないため、コンパイラのエラーが発生します。 OpenCLの中

私は私のカーネルファイルに以下のプラグマを使用してい#pragma OPENCL EXTENSION cl_khr_fp16 : enable

+0

'half_sqrt(x)'を試すことができます。これにより、最低10ビットの精度が保証されますが、ベンダーはfloatを使用して実装することもできます。 – Neapolitan

答えて

2

half型のサポートはcl_khr_fp16拡張が利用可能な場合にのみ使用可能です。これはオプションであり、一部のデバイスでは使用できません。アプリケーションは、半精度浮動小数点をサポートするOpenCLデバイスに対して、オペコードCL_DEVICE_HALF_FP_CONFIGclGetDeviceInfoを使用してコンフィギュレーション情報を照会することができます。例外は画像がサポートされている場合は、half種類が含まれているイメージを持つことができるということですが、すべての読み取りと書き込みと計算は単精度floatで行われhttps://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/cl_khr_fp16.html

を参照してください。もう1つの例外は、ベクトルデータロード/ストア関数(vload_halfなど)を使用して、halfの値をメモリからロードして、floatスカラーとベクトルに保存できることです。どちらの場合も、sqrtのような計算はhalfで行われ、保存は行われません。

+0

私はNvidea K20 GPUを使用しています。半分のストレージが利用できるようですが、計算はできません。ご回答有難うございます。 – johng