1

OpenCLでは、画像の読み取りを行うときに対象となるサンプラー(read_image *)を定義する必要があり、そのサンプラーでは、アドレスをクランプする方法を指定します(たとえば、CLK_ADDRESS_CLAMP_TO_EDGEを実行できます)。ただし、イメージ書き込み用のサンプラー(write_image *)はありません。したがって、クランプは指定されていません。次に、画像境界を出るピクセルアドレスはどうなるのでしょうか。それは単に指定されておらず、ベンダーに任されているのでしょうか?Webを見ると、write_imagesを持つほとんどのOpenCLコードは、クランプを使用していないか、独自のクランプ関数を使用しているようです。クランプが書き込みに指定されていないのに、読み取りに指定されている理由がわかりません。ここで何かが足りませんか?私はグーグルで仕様をダブルリードしましたが、書き込みがどのようにクランプされるかを説明するものは何もありません。

4

2 に答える 2

3

OpenCL 1.2 仕様 6.12.14.4 から:

上記の説明で指定されていない image_channel_data_type 値、または (x, y) 座標値が範囲 (0 ... 画像幅 – 1, 0 ...画像の高さ – 1) はそれぞれ定義されていません。

書き込みクランプはなく、座標が有効であることを確認するのはユーザー カーネル コードに任されています。

于 2013-01-17T03:02:02.097 に答える
3

一部のデバイス (古い NVIDIA ハードウェアなど) では、イメージの書き込みクランプがないだけでなく、イメージの境界外に書き込むと、デバッグが困難な方法でクラッシュすることがよくあります (GPU クラッシュであるため)。これは避けてください。

于 2013-01-19T19:40:21.180 に答える