我的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。
在snapdragon 820中,我还发现系统内存增加了600MB。但是在这个平台上,我并不知道GPU内存的变化。