Чтобы сократить время передачи от хоста к устройству для моего приложения, я хочу использовать закрепленную память. Руководство по лучшей практике NVIDIA предлагает отображать буферы и записывать данные, используя следующий код:
cDataIn = (unsigned char*)clEnqueueMapBuffer(cqCommandQue, cmPinnedBufIn, CL_TRUE,CL_MAP_WRITE, 0, memSize, 0, NULL, NULL, NULL);
for(unsigned int i = 0; i < memSize; i++)
{
cDataIn[i] = (unsigned char)(i & 0xff);
}
clEnqueueWriteBuffer(cqCommandQue, cmDevBufIn, CL_FALSE, 0,
szBuffBytes, cDataIn, 0, NULL, NULL);
Руководство по оптимизации Intel рекомендует использовать вызовы clEnqueueMapBuffer и clEnqueueUnmapBuffer вместо вызовов clEnqueueReadBuffer или clEnqueueWriteBuffer.
Каков правильный способ использования закрепленной памяти/карты памяти? Нужно ли писать данные с помощью enqueueWriteBuffer или достаточно enqueueMapBuffer?
Кроме того, в чем разница между CL_MEM_ALLOC_HOST_PTR и CL_MEM_USE_HOST_PTR?