CL_MEM_USE_HOST_PTR と CL_MEM_COPY_HOST_PTR がどのように機能するかを正確に理解しようとしていました。基本的に、CL_MEM_USE_HOST_PTR を使用して 2D 画像を作成する場合、これはデバイスに何もコピーしません。代わりに、GPU がホスト上のマップされたメモリを参照し (clEnqueueMapBuffer がマップします)、処理を実行し、結果を別の場所に書き込むことができます。 .
一方、CL_MEM_COPY_HOST_PTRを使用すると、デバイス上のホストptrが指すデータのコピーが作成されます(キャッシュだけでなく、別のコピーが作成されると思います)。これで、デバイスにコピーされたデータに対して処理が実行され、結果がホストにコピーされます。正しく理解できたと思います。
だから私の質問は... このようにしたいのは私の好奇心からです。CL_MEM_USE_HOST_PTR を使用し、デバイスがホスト メモリにアクセスできるようになったとしても、GPU カーネルがデバイス自体に別のコピーを作成するようにします (これはホスト自体で行われるため、COPY_HOST_PTR は使用しません)。このデータを処理します。これはどのように行うことができますか??