小编kri*_*isg的帖子

如何在OpenCL中使用固定内存/映射内存

为了减少我的应用程序从主机到设备的传输时间,我想使用固定内存.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);
Run Code Online (Sandbox Code Playgroud)

英特尔的优化指南建议使用对clEnqueueMapBuffer和clEnqueueUnmapBuffer的调用,而不是调用clEnqueueReadBuffer或clEnqueueWriteBuffer.

使用固定内存/映射内存的正确方法是什么?是否有必要使用enqueueWriteBuffer写入数据或者enqueueMapBuffer是否足够?

另外,CL_MEM_ALLOC_HOST_PTR和CL_MEM_USE_HOST_PTR之间有什么区别?

memory gpu data-transfer gpgpu opencl

18
推荐指数
1
解决办法
6119
查看次数

标签 统计

data-transfer ×1

gpgpu ×1

gpu ×1

memory ×1

opencl ×1