0

私のOpenCLカーネルでは、これを見つけました:

error += y;
++y;
error += y;
// The following test may be implemented in assembly language in
// most machines by testing the carry flag after adding 'y' to
// the value of 'error' in the previous step, since 'error'
// nominally has a negative value.
if (error >= 0)
{
    error -= x;
    --x;
    error -= x;
}

明らかに、これらの操作は、気の利いたアセンブリ命令を使用して簡単に最適化できます。でこのコードを最適化するにはどうすればよいOpenCLですか?

4

1 に答える 1

2

あなたはそうしない。OpenCL コンパイラは、ターゲット ハードウェアと、カーネルのビルド時にプラグマまたはパラメーターとして設定できる最適化設定に応じて、コードをどう処理するかを決定します。それが十分に賢い場合、カーネルが実行されるプラットフォーム用の気の利いたアセンブリ命令を使用します。そうでない場合は、そうではありません。

OpenCL は、標準的なコンシューマ グレードのプロセッサだけでなく、多くのデバイスに適用可能な一般的なフレームワークであることを覚えておく必要があります。そのため、アセンブリ手順の違いにより、「ボンネットの下」に行くことは実際には不可能です (つまり、OpenCL はたとえば、カーネルで x86 オペコードを書き始めた場合、たとえばグラフィックス カードでどのように動作しますか?)

特定のデバイスで絶対最大のパフォーマンスが必要な場合は、OpenCL、IMHO を使用しないでください。

于 2012-09-02T01:11:47.867 に答える