Memory 如何确定OpenCL中的可用设备内存?

Memory 如何确定OpenCL中的可用设备内存?,memory,memory-management,opencl,Memory,Memory Management,Opencl,在分配缓冲区之前,我想知道我的设备上有多少可用内存。这可能吗?我知道总内存有CL\u DEVICE\u GLOBAL\u MEM\u SIZE,单个对象的最大大小有CL\u DEVICE\u MAX\u MEM\u ALLOC\u SIZE,但我想知道当前的内存状态 目前,我可能不得不使用OpenGL供应商特定的扩展。不,没有办法,也没有必要知道它,GPU内存可以虚拟化,驱动程序将在需要/不需要时从GPU交换内存。你可以在nVidia上使用。知道没有办法很好,但你为什么说没有必要?我不想交换内存

在分配缓冲区之前,我想知道我的设备上有多少可用内存。这可能吗?我知道总内存有
CL\u DEVICE\u GLOBAL\u MEM\u SIZE
,单个对象的最大大小有
CL\u DEVICE\u MAX\u MEM\u ALLOC\u SIZE
,但我想知道当前的内存状态


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

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

你可以在nVidia上使用。

知道没有办法很好,但你为什么说没有必要?我不想交换内存,因为我也在使用GL,所以我不想占用GL的所有内存。没有必要,因为驱动程序会处理这些。GL资源也被虚拟化。交换并不是很糟糕,它只是将VRAM中的数据复制到RAM中,并在必要时反之亦然。如果发现剩下的VRAM不够,您会怎么做?目前,它正在使GL子系统崩溃,并等待TDR重新启动。这可能是因为我的代码中有一个bug,但分配较小的缓冲区可以修复它。我想确定一个最佳的缓冲区大小。所以这更像是一件预防性的事情。这看起来像是GL/CL实现中的一个bug,您的代码不应该使GL/CL impl崩溃。如果我不想增加交换的开销,该怎么办?例如,我正在为3d动画包(Maya)编写插件。如果我在一个场景中有两个角色,其中一个用完了所有的VRAM,我只希望另一个使用CPU设备。当它们都在制作动画时,交换开销不会影响性能吗?这就是我最后使用的,ATI上的ATI_meminfo,但这是GL,而不是CL。