【问题标题】:How do I determine available device memory in OpenCL?如何确定 OpenCL 中的可用设备内存?
【发布时间】:2011-04-03 20:16:34
【问题描述】:

我想在分配缓冲区之前知道我的设备上有多少可用内存。这可能吗?我知道有CL_DEVICE_GLOBAL_MEM_SIZE 表示总内存,CL_DEVICE_MAX_MEM_ALLOC_SIZE 表示单个对象的最大大小,但我想知道当前的内存状态。

就目前而言,我可能不得不使用 OpenGL 供应商特定的扩展。

【问题讨论】:

    标签: memory memory-management opencl


    【解决方案1】:

    您可以在 nVidia 上使用GL_NVX_gpu_memory_info

    【讨论】:

    • 这就是我最终使用的,以及 ATI 上的 ATI_meminfo,但那是 GL,而不是 CL。
    【解决方案2】:

    不,没有办法,也不需要知道,GPU内存可以虚拟化,驱动程序会在需要/不需要时从GPU换入/换出内存。

    【讨论】:

    • 很高兴知道没有办法,但为什么说没有必要呢?我不想换入/换出内存,而且由于我也在使用 GL,所以我不想占用 GL 的所有内存。
    • 没有必要,因为驱动程序会处理这些。 GL 资源也是虚拟化的。交换并不是很糟糕,它只是将 VRAM 中的数据复制到 RAM,必要时反之亦然。如果发现 VRAM 不够用怎么办?
    • 目前,它正在使 GL 子系统崩溃并等待 TDR 重新启动它。这可能是由于我的代码中的错误,但分配较小的缓冲区可以修复它。我想确定一个最佳缓冲区大小。所以这更像是一种预防措施。
    • 这看起来像是 GL/CL 实现中的一个错误,您的代码不应使 GL/CL 实现崩溃。
    • 我不想要交换开销的情况怎么办?例如,我正在为 3d 动画包 (Maya) 编写插件。如果我在一个场景中有两个角色,一个用完所有 VRAM,我只想让另一个使用 CPU 设备。当它们都在制作动画时,交换开销不会影响性能吗?
    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多