【发布时间】:2013-07-25 01:59:51
【问题描述】:
我正在关注Heterogeneous Computing with OpenCL,这让我悬而未决。
他们将图像作为浮点数组传递给 enqueueWriteBuffer。我认为在这种情况下,图像没有颜色值。它只是 {col,row,col,row,col,row} 例如{0,0,0,1,0,2,1,0,1,1,1,2...}。
但是当他们执行 enqueueReadBuffer 时,他们期望的大小是 HW,如果你要像我刚才那样做一个数组,那么数组大小将是 HW*2。
// SETUP BUFFERS
Buffer d_ip = Buffer(context, CL_MEM_READ_ONLY, W*H*sizeof(float));
Buffer d_op = Buffer(context, CL_MEM_WRITE_ONLY, W*H*sizeof(float));
queue.enqueueWriteBuffer(d_ip, CL_TRUE, 0, W*H*sizeof(float), img); //img, what is img? the book just says it is my image.
// SETUP RANGES
NDRange globalws(W, H);
NDRange localws(16, 16);
// QUEUE AND READ
queue.enqueueNDRangeKernel(rotn_kernel, NullRange, globalws, localws);
queue.enqueueReadBuffer(d_op, CL_TRUE, 0, W*H*sizeof(float), img);
// X AND Y INSIDE THE KERNEL
const int x = get_global_id(0);
const int y = get_global_id(1);
如果所有新的像素坐标都在内核中计算,你不能只传递一个适当大小的空浮点数组(WH 显然,虽然我不明白它为什么不是 W em>H*2)。但后来我尝试对它进行硬编码(在 500x300 图像上),结果我的堆栈爆炸了。
【问题讨论】:
标签: opencl