2012-02-10 6 views
0

我々は、「GPU RAMディスク」にGPUメモリを使用する予定の研究プロトタイプに取り組んでいます。現時点では、OpenCLを使用してGPUメモリとの間でデータをコピーするユーザモードモジュールが用意されています。オペレーティングシステムカーネルからのGPUメモリへのアクセス

WindowsカーネルからGPUメモリに直接アクセスする方法を選択します(これにより、コンテキストスイッチによって導入されるオーバーヘッドが削減されます)。これを達成する最良の方法は何ですか?

+1

私が知る限り、GPUへのカーネルモードインターフェイスはありませんが、ユーザーモードでメモリを割り当て、参照をカーネルモードに渡してそこのメモリを使用することは簡単です。しかし、なぜあなたはそのようなことをしますか? RAMディスクは理にかなっていませんし、GPUメモリ上のRAMディスクはそれほど意味がありません。 – Christopher

+0

@Christopher:GPUドライバはカーネルモードで動作し、GPUとの間のすべての転送を制御します。 OpenGLやDirectXなどのユーザーモードAPIは、カーネルドライバによって公開されているデバイスインスタンスと通信します。他のドライバは、それらのデバイスインスタンスと同じように話すことができます。しかし、ベンダー固有のものです。 –

+0

@BenVoigtもちろん、これはカーネルドライバからカーネルドライバへのインターフェイスです。そして、私が知る限りは、文書化されたものはありません。 – Christopher

答えて

0

あなたが探している機能は、ゼロコピーメモリと呼ばれています。 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)メモリ内のメモリを割り当てます。

関連する問題