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