我尝试使用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();
并在几秒后回调whenWritten正在运行(写文本完成) 程序内存正在开发并在windows10中使用TaskManager - GPU(专用内存使用)我在图表中也看到了内存级别。 非常好; - )
然后我睡了10秒
现在我想在GPU中清除内存 对于局部变量A我使用
delete A; //local memory is decresing
但是当我使用
时clReleaseMemObject(gpuA());
我没有看到GPU内存的任何变化
我做错了什么?对此最好的解决方案是什么?
感谢您的任何建议
答案 0 :(得分:0)
好的,所以我将缓冲区和清理缓冲区替换为C而不是C ++
cl_mem gpuA2 = clCreateBuffer(context(), CL_MEM_READ_ONLY, sizeof(cl_int) * arraySize, NULL, NULL);
clEnqueueWriteBuffer(queue(), gpuA2, CL_TRUE, 0, sizeof(cl_int) * arraySize, A, 0, NULL, NULL);
queue.finish();
clReleaseMemObject(gpuA2);
delete A;
在跑步后我看不出任何差异