我正在写一个在GPU上运行的JOCl.org (和jogamps jocl不同)。我们处理了足够多的数据,我需要小心地保持在GPU的全局内存限制之下。为此,我需要一种以编程方式确定GPU有多少内存的方法。我假设必须有一个简单的JOCL方法/变量来做这件事,但由于某些原因,我似乎无法弄清楚它是什么。我看过CL.CL_MEM_SIZE和CL_DEVICE_GLOBAL_MEM_CACHE_SIZE,但它们都返回4100左右的内容;我知道我目前使用的图形卡应该有512MB。
而且,我似乎不能使用我应该使用的内存。在我最坏的情况下,我必须运行一个内核来处理2^22个浮点数的帧,并且在内部需要的数据是帧大小的两倍。如果我尝试缓存两个帧(因此2个帧* 2^22 * 2^2字节/浮点数*2,开销= 2^26),我可以毫不费力地缓存,但是当我增加缓存以便一次处理三个帧(或2^25*3)时,我似乎耗尽了内存。然而,我认为我应该只使用我的512MB全局内存中的大约100个。我相信我在不使用的时候释放了适当的内存,但显然我要么做错了什么,要么曲解了GPU宣传的512MB。有人能帮我解释一下这个困惑吗?
有没有一种方法可以让我分析GPU以了解实际的内存使用情况?
发布于 2011-05-09 21:26:31
CL.CL_MEM_SIZE和CL_DEVICE_GLOBAL_MEM_CACHE_SIZE是常量值,用作clGetDeviceInfo查询设备的参数。
http://www.jocl.org/doc/org/jocl/CL.html#clGetDeviceInfo(org.jocl.cl_device_id, int, long, org.jocl.Pointer, long[])
clGetDeviceInfo方法是您查询设备信息的方法。它返回您在param_name中请求的参数值。该链接列出了所有可用的参数名称,并提供了简要说明。(CL_DEVICE_GLOBAL_MEM_SIZE应该就是你要找的那个)。
发布于 2011-05-07 06:07:03
查看webstart CLInfo应用程序:http://jogamp.org/deployment/webstart-next/jocl-demos/clinfo.jnlp (项目:http://jogamp.org/jocl-demos/www/)或启动命令行版本:
java -jar jocl.jar:gluegen-rt.jar -Djava.library.path="path/to/jocl/libs:path/to/gluegen-rt/libs" com.jogamp.opencl.util.CLInfo它将显示所有设备属性的完整读数。CL_DEVICE_GLOBAL_MEM_SIZE和CL_DEVICE_MAX_MEM_ALLOC_SIZE属性可能就是您要寻找的属性。
编辑属性的文档如下:http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html
https://stackoverflow.com/questions/5914333
复制相似问题