1

私はopenCLを初めて使用し、現在のプログラムで少し問題に直面しています。デバイスで大量の画像を移動したいのですが、プログラムでそれらを読み取るだけで済みます。私の問題は、私のデバイスでは ca のバッファしか割り当てられないことです。255mb、プログラムはさまざまなパラメーターを処理できる必要があり、複数のマシンで実行できる必要があるため、事前にデバイスに配置できる画像の正確な数はわかりませんが、実行時に評価する必要があります.

そのためには、画像を保存した複数の画像バッファー (テクスチャ) を作成し、これらのバッファーへのポインターだけを含む別のバッファーを作成したいと考えています。

残念ながら、そのようなことができる方法に関する情報を見つけることができません (特に、画像バッファーは常に read_only または write_only のいずれかを宣言する必要があるため)、またはそれが可能かどうかについてはまったくわかりません。

助けてくれてありがとう!

4

2 に答える 2

1

OpenCL は、イメージへのポインター (またはバッファーへのポインター) を許可しません。代わりに、3D テクスチャを使用することもできます。OpenCL 1.2 には、2D テクスチャの配列用の個別のオブジェクトもあります (z 軸に沿った補間はありません)。2D テクスチャに限定した場合でも、複数の画像を異なるオフセットで同じテクスチャに入れることができます。最後に、実行時にカーネル コードを生成して、パラメーターとして渡される画像の数を変更できます。

于 2013-08-15T17:58:25.733 に答える
0

データをバッファとして保存し、必要に応じて入力を画像にコピーして、clEnqueueCopyBufferToImage を使用して最大画像をテクスチャ メモリに保持します。

イメージの読み取りと書き込みに関しては、カーネル引数の読み取り/書き込み専用修飾子と、実際の opencl イメージの読み取りまたは書き込みを混同しています。カーネルごとに、イメージは読み取り専用または書き込み専用のいずれかになりますが、2 つのカーネルを使用する限り、イメージ自体は両方にすることができます。したがって、image2d を作成するときに CL_MEM_READ_WRITE を使用しますが、イメージを読み取るカーネルと書き込むカーネルが 1 つずつありますが、同じイメージのままです。また、多くの場合、入力と出力の opencl イメージを用意してから、バッファーをイメージにコピーし、必要に応じてイメージから取り出す方が簡単です。

于 2013-08-15T19:35:12.417 に答える