2010-08-25 56 views
6

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

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

回答

2

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

+1

很高兴知道有没有办法,但为什么你会说没有必要?我不想交换进/出内存,而且我也与GL一起工作,所以我不想吃掉GL的所有内存。 – nullspace 2010-08-25 17:06:22

+0

因为驾驶员需要照顾,所以没有必要。 GL资源也是虚拟化的。交换并不是很糟糕,它只是将VRAM中的数据复制到RAM中,反之亦然。如果你发现没有足够的VRAM,你会怎么做? – 2010-08-25 17:34:41

+0

目前,它正在崩溃GL子系统并等待TDR重新启动它。这可能是由于我的代码中存在一个错误,但分配较小的缓冲区会修复它。我想确定一个最佳的缓冲区大小。所以这更多的是预防性的事情。 – nullspace 2010-08-25 18:21:02