У меня есть часть кода, в которой я использую clCreateBuffer
с флагом CL_MEM_ALLOC_HOST_PTR
, и я понял, что это выделяет память с устройства. Это правильно, и я пропускаю что-то из стандарта?Почему clCreateBuffer с CL_MEM_ALLOC_HOST_PTR использует дискретную память устройства?
CL_MEM_ALLOC_HOST_PTR: Этот флаг указывает, что приложение хочет, чтобы реализация OpenCL выделяла память из доступной для хоста памяти.
Лично я понял, что этот буфер должен быть буфером на стороне хозяина, который позже может быть отображен с использованием clEnqueueMapBuffer
.
Следит некоторую информацию об устройстве, которое я использую:
Device: Tesla K40c
Hardware version: OpenCL 1.2 CUDA
Software version: 352.63
OpenCL C version: OpenCL C 1.2
Это должен быть намек, а не запрос. Ваше устройство выбирает наилучший способ использования памяти. –
Таким образом, «выделение памяти из доступной памяти хоста» означает: «выделяет буфер в области памяти (на хосте или на стороне устройства), которая может быть доступна - например, с помощью clEnqueueMapBuffer - с хоста»? – Nicola
Было еще одно обсуждение: http://stackoverflow.com/questions/25496656/cl-mem-use-host-ptr-vs-cl-mem-copy-host-ptr-vs-cl-mem-alloc-host- ptr –