【发布时间】:2017-10-05 18:14:58
【问题描述】:
我正在尝试使用 OpenCL 实现以前在 CUDA 中编写的代码,以便在 Altera FPGA 上运行。我在读回应该在缓冲区中的数据时遇到问题。我使用与 CUDA 版本相同的结构,唯一不同的是 cudaMalloc 可以为所有类型的指针分配内存,而对于 clCreateBuffer 我必须使用 cl_mem。我的代码如下所示:
cl_mem d_buffer=clCreateBuffer(...);
//CUDA version:
//float* d_buffer;
//cudaMalloc((void **)&d_buffer, MemSz);
clEnqueueWriteBuffer(queue, d_buffer, ..., h_data, );
//cudaMemcpy(d_buffer, h_Data, MemSz, cudaMemcpyHostToDevice);
#define d_buffer(index1, index2, index3) &d_buffer + index1/index2*index3
//#define d_buffer(index1, index2, index3) d_buffer + index1/index2*index3
cl_mem* d_data=d_buffer(1,2,3);
clEnqueueReadBuffer(queue, *d_data,...)// Error reading d_data
我为 clCreateBuffer 尝试了 clEnqueueMapBuffer 或 CL_MEM_ALLOC_HOST_PTR,它也不起作用。
【问题讨论】: