2012-02-24 18 views
4

タイプの計算のための重要な改善を約束するOpenCLで利用可能な怒っ機能に関してれるこの質問:乗算と追加機能

* bの+怒っ(A、B、Cとして使用する場合は、C

)、cl-mad-enableでコンパイルします。

非常に大きなサイズのmadを使用してa + b * c + d * eという形式の計算を試みましたが、大幅な改善が期待されていました。驚いたことに、同じ時間がかかりました。

誰かがこれを経験していれば、私はいくつかの洞察に感謝します。私はリソースの大部分が怒りのために賞賛に満ちているので、うまくいくはずのジストを持っています。注:私が使用しているデータ型はすべてdouble型ですが、重要な場合は、私の使用方法が大きな精度の損失となりました。

+1

GPUは実際に倍精度をサポートしていますか?彼らの多くはフロートだけをサポートしています。 –

+0

デフォルトではなく、cl_khr_fp64を有効にすることで、私はそれらを操作できます。ポイントがあるかもしれません、私はフロートに変換してチェックします。コードは非常に大きいので、時間がかかるでしょう。私は何かがあると私はコメントします。 –

答えて

2

(1)倍精度を処理でき、倍精度を効率的に処理できることに大きな違いがあります。最新のGPUは倍精度を処理しますが、単精度より2〜4倍遅いです。

しかし、AFAIKでは、2倍を処理するすべてのGPUにmadd命令があります。 AMDはこれを文書化しています。 2008年のhttp://developer.amd.com/gpu_assets/r600isa.pdf、MULADD_64命令を参照してください。 Nvidiaの詳細なドキュメントはまだありませんが、http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/Floating_Point_on_NVIDIA_GPU_White_Paper.pdfのようなドキュメントでは、NvidiaにはFMA(Fused Multiply Add)があります。 www.x.org/docs/intelのインテルGPUのマニュアルには、倍精度は言及されていません(少なくともGoogleでは不可)。

(2)しかし、おそらく、madd()を使用しても差異がない主な理由は、maddを使用できることをコンパイラーが認識しているからです。

一部のGPUでは、生成されたコードを見ることができます。例えば。 AMD CodeAnalyst、またはShaderAnalyzer、OpenGLコードの場合はhttp://developer.amd.com/tools/shader/Pages/default.aspx

私はこれらのツールで生成されたコードを調べるのに多くの時間を費やし、IIRCは最適化されました。 TBD:ここに例を示します。

関連する問題