Моя программа OpenCL выглядит следующим образом:
- init_opencl
- process
- release_opencl
In 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.В процессе память хоста и память устройства увеличиваются примерно на 600 МБ одновременно.
память хоста
память устройства
Мой вопрос:
Почему работает программа openclЗанимать память хоста, с которой он занимал память устройства?
А как сделать, чтобы программа opencl не занимала память хоста?
Моя тестовая платформа GTX 750.
И в snapdragon820, я также считаю, что системная память увеличивается на 600 МБ.Но на этой платформе я не изменяю память графического процессора.