当我在400K元素的循环中运行以下OpenCL代码时,内存开始泄漏。为什么在此OpenCL代码中enqueueAcquireGLObjects()泄漏内存?
std::vector<cl::Memory> cl_vbos;
glFinish();
cl_vbos.push_back(cl::BufferGL(context, CL_MEM_READ_WRITE, VBOs.back(), &err));
queue.enqueueAcquireGLObjects(&cl_vbos, NULL, &event);
queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(globalWorkSize), cl::NDRange(localWorkSize), NULL, &event);
queue.enqueueReleaseGLObjects(&cl_vbos, NULL, &event);
glFinish();
queue.finish();
即使我不启动内核,也会泄漏内存。只有当我评论时:
queue.enqueueAcquireGLObjects(&cl_vbos, NULL, &event);
该程序停止泄漏内存。奇怪的是,内存不是在GPU上泄漏,而是在CPU上。难道我做错了什么?忘了发布一些东西?
我正在使用NVIDIA®OpenCL 1.1以及Windows 7 64位和VC++上的最新驱动程序。
你确定它是一个真正的泄漏?或者其中一个图书馆泄漏事件并没有真正泄漏到Infinity数量的内存?它看起来像在nVIDIA驱动程序方面糟糕的编程。 – DarkZeros
你可以试试&cl_vbos [0]? –