openCL发布GPU内存

时间:2018-03-28 14:54:49

标签: c++ memory opencl gpu

我尝试使用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(&notNeed);
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内存的任何变化

我做错了什么?对此最好的解决方案是什么?

感谢您的任何建议

1 个答案:

答案 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;

在跑步后我看不出任何差异

相关问题