【发布时间】:2018-09-07 08:02:16
【问题描述】:
我尝试使用 OpenCL 释放 GPU 中分配的内存
int arraySize = 130000000;
cl_int* A = new cl_int[arraySize];
cl::Buffer gpuA(context, CL_MEM_READ_ONLY, sizeof(cl_int) * arraySize);
inA.setDestructorCallback(¬Need);
cl::Event event;
queue.enqueueWriteBuffer(gpuA, CL_TRUE, 0, sizeof(cl_int) * arraySize, A, NULL, &event);
event.setCallback(CL_COMPLETE, &whenWritten);
event.wait();
几秒后,当Written 运行时回调(写入文本完成) 程序内存正在增加并在 windows10 中使用 TaskManager - GPU(专用内存使用)我在图表中也看到了内存级别的增加。 非常好;-)
然后我运行睡眠 10 秒
现在我想清除 GPU 中的内存 对于我使用的局部变量 A
delete A; //local memory is decresing
但是当我使用时
clReleaseMemObject(gpuA());
我没有看到 GPU 内存有任何变化
我做错了什么?什么是最好的解决方案?
感谢您的建议
【问题讨论】:
-
clReleaseMemObject(gpuA());对于 OpenCL C++ 绑定不正确,clReleaseMemObject 是 C API。 cl::Buffer 析构函数将调用clReleaseMemObject