【问题标题】:determine global memory available on GPU with JOCL?使用 JOCL 确定 GPU 上可用的全局内存?
【发布时间】:2011-05-06 16:31:21
【问题描述】:

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

【问题讨论】:

  • 1) 您是否在显示和计算上使用同一张卡?如果是这样,您可能无法访问完整的内存,因为某些内存将被显示屏锁定。
  • 是的,我只有一张显卡。但是我怎么知道有多少内存“空闲”供我使用?
  • 我不太确定opencl。但是 CUDA 有函数 cuGetMemInfo。可能这就是你正在寻找的开始..

标签: cuda gpu jocl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看看 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

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 2020-04-21
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2012-09-03
      • 2019-03-03
      • 2012-10-27
      • 1970-01-01
      相关资源
      最近更新 更多