1

我正在编写在 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 以了解实际内存使用情况?

4

2 回答 2

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

[编辑] 属性记录在这里:http ://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html

于 2011-05-06T22:07:03.083 回答
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 应该是您正在寻找的那个)。

于 2011-05-09T13:26:31.127 回答