openclのバッファオブジェクトとイメージバッファオブジェクトの違いは何ですか?画像バッファはより速いが、どれくらいの程度であることは明らかであるか?どこで使用する必要がありますか?OpenCLのバッファオブジェクトとイメージバッファオブジェクト
答えて
OpenCLバッファは、グローバルメモリ内の1Dまたは2Dまたは3Dアレイです。ポインタを介してアドレス指定できる抽象オブジェクト です。バッファは読み取り専用、またはWrite_onlyまたはRead-Writeです。 イメージバッファはGPUテクスチャメモリを表します。これはピクセルx、y、z座標を指定する関数を介して がアクセスできるピクセルの配列を表します。 GPU上のイメージピクセルへのポインタアクセスはありません。
ハードウェアは、これらの2種類のバッファを別々に扱います。 OpenCLバッファは、 ホストRAMまたはGPU RAMのいずれかにあり、その2つの間で転送されます。 OpenCLイメージバッファには、OpenCLバッファの類似の 特性があります。しかし、違いはイメージバッファは読み取り専用か書き込み専用かです。読み取り専用イメージバッファの場合、GPUはイメージピクセルのコピーをすべての計算単位(= 32または64 ALU)にキャッシュできます。典型的なキャッシュサイズは8K(バイトまたはピクセルですか?)です。 また、画像ピクセルはGPU上のポインタを介してアクセスすることができないため、 x、y、z座標から物理アドレスへのマッピングは、いくつかの方法でマッピングできます。 1つの方法は、Zオーダリングです。これは、ピクセルを2次元でクラスタ化し、 x、y方向の隣接ピクセルが直線的に格納されるようにします。これにより、画像フィルタの隣接ピクセルへのアクセスが高速になります。
OpenCLバッファは一般的な配列、特に読み書き可能な配列の場合には、 または倍精度です。 OpenCL Imageバッファは、画像処理やその他の信号処理に使用されます。 入力画像/信号は読み取り専用として扱うことができます。
FYIは、OpenCL 2.xから始まり、イメージオブジェクトは読み書き可能です。
リプレイに感謝します。多くのことを学んだだけでなく、どちらがより速く、何パーセントであるかを知りたかった。 – Megharaj
速く、何%であるかには一般的な答えはない。コードがメモリにどのようにアクセスし、どのデバイスを実行するかによって異なります。 –