我々は、「GPU RAMディスク」にGPUメモリを使用する予定の研究プロトタイプに取り組んでいます。現時点では、OpenCLを使用してGPUメモリとの間でデータをコピーするユーザモードモジュールが用意されています。オペレーティングシステムカーネルからのGPUメモリへのアクセス
WindowsカーネルからGPUメモリに直接アクセスする方法を選択します(これにより、コンテキストスイッチによって導入されるオーバーヘッドが削減されます)。これを達成する最良の方法は何ですか?
我々は、「GPU RAMディスク」にGPUメモリを使用する予定の研究プロトタイプに取り組んでいます。現時点では、OpenCLを使用してGPUメモリとの間でデータをコピーするユーザモードモジュールが用意されています。オペレーティングシステムカーネルからのGPUメモリへのアクセス
WindowsカーネルからGPUメモリに直接アクセスする方法を選択します(これにより、コンテキストスイッチによって導入されるオーバーヘッドが削減されます)。これを達成する最良の方法は何ですか?
あなたが探している機能は、ゼロコピーメモリと呼ばれています。 AMDとNVIDIAの両方からの最近のGPUがそれをサポートしています。私はOpenCLのNVIDIAのゼロコピーサポートに個人的に精通していません(私はCUDAで十分サポートされていることを知っています)。 AMDのゼロコピーサポートについては、OpenCLプログラミングガイドに詳しく記載されています。http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf
clCreateBuffer
に渡すフラグについては、表4.2(OpenCLのメモリオブジェクトプロパティ)を参照してください。ほとんどの場合、CL_MEM_USE_PERSISTENT_MEM_AMD
を使用して、ホストからアクセス可能なデバイス(GPU)メモリ内のメモリを割り当てます。
私が知る限り、GPUへのカーネルモードインターフェイスはありませんが、ユーザーモードでメモリを割り当て、参照をカーネルモードに渡してそこのメモリを使用することは簡単です。しかし、なぜあなたはそのようなことをしますか? RAMディスクは理にかなっていませんし、GPUメモリ上のRAMディスクはそれほど意味がありません。 – Christopher
@Christopher:GPUドライバはカーネルモードで動作し、GPUとの間のすべての転送を制御します。 OpenGLやDirectXなどのユーザーモードAPIは、カーネルドライバによって公開されているデバイスインスタンスと通信します。他のドライバは、それらのデバイスインスタンスと同じように話すことができます。しかし、ベンダー固有のものです。 –
@BenVoigtもちろん、これはカーネルドライバからカーネルドライバへのインターフェイスです。そして、私が知る限りは、文書化されたものはありません。 – Christopher