Ich versuche, einen Code zu implementieren, der zuvor in CUDA mit OpenCL geschrieben wurde, um auf Altera FPGA zu laufen. Ich habe Probleme beim Zurücklesen von Daten, die sich im Puffer befinden sollen. Ich benutze die gleiche Struktur wie CUDA Version, nur etwas anderes ist cudaMalloc kann Speicher für alle Arten von Zeiger zuweisen, während für clCreateBuffer ich cl_mem verwenden muss. Mein Code sieht wie folgt aus:OpenCL, Gerätepufferzeiger vom Host verwalten?
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
Ich versuchte clEnqueueMapBuffer oder CL_MEM_ALLOC_HOST_PTR für die clCreateBuffer, es funktioniert auch nicht.