使用JOCL确定GPU上可用的全局内存?

时间:2011-05-06 16:31:22

标签: cuda gpu jocl

我正在写一个在GPU上运行的JOCl.org(与jogamps jocl不同)。正在处理足够的数据,我需要小心保持GPU的全局内存限制。为此,我需要一种以编程方式确定GPU具有多少内存的方法。我假设必须有一个简单的JOCL方法/变量来执行此操作,但由于某种原因,我似乎无法弄清楚它是什么。我查看了CL.CL_MEM_SIZE和CL_DEVICE_GLOBAL_MEM_CACHE_SIZE,但这些都返回了4100左右;我知道我目前正在使用一个假设包含512 MB的显卡。

另外,我似乎无法使用尽可能多的内存。在我最糟糕的情况下,我必须运行一个内核来处理2 ^ 22个浮点数的帧,并且内部需要两倍于帧大小的数据。如果我尝试缓存两个帧(所以2帧* 2 ^ 22 * 2 ^ 2字节/浮点* 2用于开销= 2 ^ 26)我可以毫不费力地缓存,但是当我增加缓存时所以我处理三个帧时间(或2 ^ 25 * 3)我似乎内存不足。但是,我相信我应该只使用我的512 MB全局内存中的~100。我相信我在没有使用时正确地释放内存,但显然我要么做错了,要么误解了GPU的广告512 MB。谁能帮我解释这个混乱?

有没有办法可以分析GPU以了解实际的内存使用情况?

2 个答案:

答案 0 :(得分:0)

看一下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属性可能是您正在寻找的道具。

[edit]属性记录在此处:http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html

答案 1 :(得分:0)

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应该是你要找的那个)。