【发布时间】:2014-08-01 06:34:04
【问题描述】:
为了减少我的应用程序从主机到设备的传输时间,我想使用固定内存。 NVIDIA's best practices guide 建议使用以下代码映射缓冲区并写入数据:
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's optimization guide 建议使用对 clEnqueueMapBuffer 和 clEnqueueUnmapBuffer 的调用,而不是对 clEnqueueReadBuffer 或 clEnqueueWriteBuffer 的调用。
使用固定内存/映射内存的正确方法是什么?是否需要使用 enqueueWriteBuffer 写入数据或 enqueueMapBuffer 是否足够?
另外,CL_MEM_ALLOC_HOST_PTR 和 CL_MEM_USE_HOST_PTR 有什么区别?
【问题讨论】:
标签: memory opencl gpu gpgpu data-transfer