私は最近OpenCLをいじっていますが、深刻な制限に遭遇しました。カーネルにポインターの配列を渡すことはできません。これにより、たとえば画像の任意のサイズのリストをカーネルに渡すことが困難になります。私はこれについていくつか考えましたが、誰かが彼らがうまくいくかどうかを確実に言うことができるか、またはより良い提案を提供できるかどうか疑問に思いました。
カーネルに渡したいx個の画像オブジェクトがあるとしましょう。それらがすべて2Dのみである場合、1つの解決策は、それらすべてを3D画像にパックし、スライスにインデックスを付けることです。これに伴う問題は、画像のサイズが異なる場合、3D画像は最も広い画像の幅、最も高い画像の高さ、および深さが画像の数になる必要があるため、スペースが無駄になることです。
ただし、バッファオブジェクトをカーネルに渡すと、カーネルにポインタとして表示されることも考えていました。任意のデータバッファを取得するカーネルと、ポインタを格納するためだけに指定されたバッファがあり、最初のバッファへのポインタを2番目のバッファの最後に追加した場合(もちろん十分な割り当てスペースがある場合)、デバイス上の他のバッファへのポインタのバッファを保持できます。次に、このバッファを他のカーネルに渡すことができます。他のカーネルは、興味深いキャストを使用して、デバイス上のこれらの任意のバッファにアクセスできます。唯一の問題は、特定のバッファポインタがバッファの存続期間を通じて同じままであるかどうかです。また、画像を渡すと、引数として構造体を取得します。今、この構造体は実際にデバイスメモリにホームを持っていますか?それとも、カーネルに渡されるのに十分な長さですか?これらのことは、ポインタバッファトリックが画像でも機能するかどうかを判断するという点で重要です。
バッファトリックが機能するかどうか誰かが知っていますか?任意のサイズのリストをカーネルに渡すために誰かが考えることができる他の方法はありますか?
編集:バッファトリックは機能しません。私はそれをテストしました。正確な理由はわかりませんが、デバイス上のポインターは、呼び出しごとに同じままではないようです。