これが明らかな場合は申し訳ありませんが、私は現在c ++とCudaを研究しており、これが可能かどうかを知りたいので、関連するセクションにさらに焦点を当てることができます。
基本的に、私の問題は高度に並列化可能です。実際、現在、複数のサーバーで実行しています。私のプログラムは作業項目(非常に小さなリスト)を取得し、その上でループを実行して、次の3つの決定のいずれかを実行します。
- データを保持する(保存する)、
- データを破棄します(データは何もしません)、
- データをさらに処理します(何をすべきかわからないため、データを変更し、処理するためにキューに再送信します。
これは以前は再帰でしたが、各部分を独立させました。1つのCPUに拘束されることはなくなりましたが、その悪影響として、メッセージが何度も行き来することがあります。CUDAがどのように機能し、どのように作業を送信するかを大まかに理解していますが、CUDAがデバイス自体のキューを管理することは可能ですか?
私の現在の思考プロセスは、c ++ホストでキューを管理し、処理をデバイスに送信した後、結果がホストに返され、デバイスに返送されることでした(以下同様)。それはうまくいくと思いますが、CUDAメモリ自体にキューを置き、カーネルが作業を引き受けて直接そこに送信できるかどうかを確認したかったのです。
CUDAでこのようなことが可能ですか、それともこれを行うためのより良い方法がありますか?