【发布时间】:2013-08-19 07:06:51
【问题描述】:
OpenCL NVIDIA SDK 中有一个示例 oclCopyComputeOverlap,它使用 2 个队列交替传输缓冲区/执行内核。 在此示例中使用映射内存。
**//pinned memory**
cmPinnedSrcA = clCreateBuffer(cxGPUContext, CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR, szBuffBytes, NULL, &ciErrNum);
**//host pointer for pinned memory**
fSourceA = (cl_float*)clEnqueueMapBuffer(cqCommandQueue[0], cmPinnedSrcA, CL_TRUE, CL_MAP_WRITE, 0, szBuffBytes, 0, NULL, NULL, &ciErrNum);
...
**//normal device buffer**
cmDevSrcA = clCreateBuffer(cxGPUContext, CL_MEM_READ_ONLY, szBuffBytes, NULL, &ciErrNum);
**//write half the data from host pointer to device buffer**
ciErrNum = clEnqueueWriteBuffer(cqCommandQueue[0], cmDevSrcA, CL_FALSE, 0, szHalfBuffer, (void*)&fSourceA[0], 0, NULL, NULL);
我有两个问题: 1)是否需要使用固定内存来发生重叠? fSourceA 不能只是一个简单的主机指针,
fSourceA = (cl_float *)malloc(szBuffBytes);
...
//write random data in fSourceA
2) 内核中不使用 cmPinnedSrcA,而是使用 cmDevSrcA。设备上的缓冲区占用的空间不是还在增长吗? (cmPinnedSrcA 所需的空间添加到 cmDevSrcA 所需的空间)
谢谢
【问题讨论】:
标签: opencl communication nvidia overlap computation