이전에 CUDA로 작성된 코드를 OpenCL을 사용하여 구현하여 Altera FPGA에서 실행하려고합니다. 버퍼에 있어야하는 데이터를 다시 읽는 데 문제가 있습니다. CUDA 버전과 동일한 구조를 사용합니다. 다른 점은 cudaMalloc이 모든 유형의 포인터에 대해 메모리를 할당 할 수있는 반면 clCreateBuffer는 cl_mem을 사용해야한다는 것입니다. 내 코드는 다음과 같습니다OpenCL, 호스트에서 장치 버퍼 포인터를 관리합니까?
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을 시도, 그 중 하나가 작동하지 않습니다.