我想知道在分配缓冲区之前,我的设备上有多少可用内存。这可能吗?我知道有CL_DEVICE_GLOBAL_MEM_SIZE
为总内存,和CL_DEVICE_MAX_MEM_ALLOC_SIZE
单个对象的最大大小,但我想知道当前的内存状态。如何确定OpenCL中的可用设备内存?
现在,我可能不得不使用OpenGL供应商特定的扩展。
我想知道在分配缓冲区之前,我的设备上有多少可用内存。这可能吗?我知道有CL_DEVICE_GLOBAL_MEM_SIZE
为总内存,和CL_DEVICE_MAX_MEM_ALLOC_SIZE
单个对象的最大大小,但我想知道当前的内存状态。如何确定OpenCL中的可用设备内存?
现在,我可能不得不使用OpenGL供应商特定的扩展。
不,没有办法,也不需要知道它,GPU内存可以被虚拟化,驱动程序可以在不需要时从GPU中交换进/出内存。
您可以在nVidia上使用GL_NVX_gpu_memory_info。
这就是我最终使用的,ATI上的ATI_meminfo,但这是GL,而不是CL。 – nullspace 2010-08-27 22:28:11
很高兴知道有没有办法,但为什么你会说没有必要?我不想交换进/出内存,而且我也与GL一起工作,所以我不想吃掉GL的所有内存。 – nullspace 2010-08-25 17:06:22
因为驾驶员需要照顾,所以没有必要。 GL资源也是虚拟化的。交换并不是很糟糕,它只是将VRAM中的数据复制到RAM中,反之亦然。如果你发现没有足够的VRAM,你会怎么做? – 2010-08-25 17:34:41
目前,它正在崩溃GL子系统并等待TDR重新启动它。这可能是由于我的代码中存在一个错误,但分配较小的缓冲区会修复它。我想确定一个最佳的缓冲区大小。所以这更多的是预防性的事情。 – nullspace 2010-08-25 18:21:02