我正在写一个在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以了解实际的内存使用情况?
答案 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查询设备的参数。
方法clGetDeviceInfo是用于查询设备信息的方法。它返回您在param_name中请求的参数的值。该链接具有所有可用参数名称的列表,并提供简要说明。 (CL_DEVICE_GLOBAL_MEM_SIZE应该是你要找的那个)。