首页 > 解决方案 > OpenCL 同时吃掉主机内存和设备内存

问题描述

我的 OpenCL 程序是这样的:

  1. init_opencl
  2. 过程
  3. release_opencl

1. init_opencl中,我预先创建了所有将要使用的缓冲区,如下所示:

g_mem_under_down_lap_pyr_32FC3 = clCreateBuffer(g_ctx, CL_MEM_READ_WRITE,
        g_sizeMgr->getPyrCapacity() * 3 * sizeof(float), nullptr, &err);
g_mem_mean_down_lap_pyr_32FC3 = clCreateBuffer(g_ctx, CL_MEM_READ_WRITE,
        g_sizeMgr->getPyrCapacity() * 3 * sizeof(float), nullptr, &err);

然后在2. 进程中,我使用clEnqueueWriteBuffer先将数据从主机内存传输到缓冲区,然后运行内核。最后,我使用clEnqueueReadBuffer从缓冲区中读出数据。

最后在3. release_opencl中,我调用了clReleaseMemObject来释放所有的缓冲区。

但是当我运行程序时,我观察到在2. 进程中,主机内存和设备内存同时增加了大约 600MB。

主机内存

主机内存

设备内存

设备内存

我的问题是:

为什么opencl程序占用了设备内存,却占用了主机内存?

以及如何使opencl程序不占用主机内存?

我的测试平台是 GTX 750。

而在骁龙820中,我也发现系统内存增加了600MB。但是在这个平台上,我并没有改变 GPU 内存。

标签: opencl

解决方案


推荐阅读