【问题标题】:openCL release GPU memoryopenCL 释放 GPU 内存
【发布时间】: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(&notNeed);
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

标签: c++ memory opencl gpu


【解决方案1】:

好的,所以我将缓冲区和清理缓冲区替换为 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;

运行后我看不出有什么不同

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 2017-04-23
    • 2020-07-20
    • 2022-01-27
    • 2019-02-11
    • 2020-11-18
    • 2020-08-16
    • 2017-04-22
    • 2021-07-30
    相关资源
    最近更新 更多