OpenCL использует память хоста и устройства одновременно - PullRequest
0 голосов
/ 24 мая 2018

Моя программа OpenCL выглядит следующим образом:

  1. init_opencl
  2. process
  3. 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 МБ одновременно.

память хоста

host memory

память устройства

device memory

Мой вопрос:

Почему работает программа openclЗанимать память хоста, с которой он занимал память устройства?

А как сделать, чтобы программа opencl не занимала память хоста?

Моя тестовая платформа GTX 750.

И в snapdragon820, я также считаю, что системная память увеличивается на 600 МБ.Но на этой платформе я не изменяю память графического процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...