私のOpenCLプログラムでは、各カーネルがアクセスできる必要がある60以上のグローバルメモリバッファで終わるつもりです。各カーネルにこれらのバッファのそれぞれの位置を知らせるための推奨される方法は何ですか?多くのメモリオブジェクトのOpenCLカーネルに通知する適切な方法はありますか?
バッファ自体はアプリケーションの存続期間中は安定しています。つまり、アプリケーションの開始時にバッファを割り当て、複数のカーネルを呼び出した後、アプリケーション終了時にバッファの割り当てを解除します。しかし、それらの内容はカーネルの読み書きによって変わることがあります。
CUDAでは、私がこれをやったのは、私のCUDAコードで60個以上のプログラムスコープのグローバル変数を作成することでした。私は、ホスト上で、私がこれらのグローバル変数に割り当てたデバイスバッファのアドレスを書きます。そして、カーネルはこれらのグローバル変数を使って、必要なバッファを見つけるだけです。
OpenCLでこれを行うにはどうすればよいでしょうか? CLのグローバル変数はCUDAとは少し違いますが、私のCUDAメソッドが機能するかどうかについての明確な答えを見つけることはできません。もしそうならば、バッファポインタをグローバル変数に移す方法。それがうまくいかない場合は、それ以外は何が最善の方法ですか?
60の議論は、私が参加している研究プロジェクトのための特別なコードシンセサイザによってこのコードが生成されているためです。残念ながら、私はその部分を制御することはできません。私は、あなたが概説したバッファ充填方法を使用して終了しました。うまくいけば、それは60の議論よりも良い方法です。ご協力いただきありがとうございます! – int3h