2012-02-10 74 views
0

我们正在研究一个研究原型,我们打算将GPU内存用于“GPU RAM磁盘”。目前,我们有一个用户模式模块,它使用OpenCL将数据复制到GPU内存和从GPU内存复制数据。从操作系统内核访问GPU内存

我们宁愿直接从Windows内核访问GPU内存的方式(从而减少由上下文切换引入的开销)。达到此目的的最佳方法是什么?

+1

据我所知,GPU没有内核模式接口,但你可以很容易地在用户模式下分配内存,将引用传递到内核模式,并在那里使用内存。但为什么你会做这样的事情? RAM磁盘没有任何意义,而GPU内存上的RAM磁盘更不理智。 – Christopher 2012-02-10 15:44:43

+0

@Christopher:GPU驱动程序以内核模式运行,并且控制与GPU之间的所有传输。用户模式API(如OpenGL和DirectX)与内核驱动程序公开的设备实例进行通信。其他驱动程序可以很好地与这些设备实例进行通信但它们是特定于供应商的。 – 2012-02-24 23:39:16

+0

@BenVoigt当然,这是关于内核驱动程序接口的内核驱动程序。据我所知,没有文件记录。 – Christopher 2012-02-26 17:07:54

回答

0

您正在查找的功能称为零复制内存。 AMD和NVIDIA最近的GPU都支持它。我不熟悉NVIDIA在OpenCL中的零拷贝支持(我知道它在CUDA中得到了很好的支持)。 AMD的零拷贝支持在其OpenCL编程指南中有详细记录:http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

请参阅表4.2(OpenCL存储器对象属性),专门用于描述要传递给clCreateBuffer的标志。很可能你会想要使用CL_MEM_USE_PERSISTENT_MEM_AMD,它可以从主机访问的设备(GPU)内存中分配内存。