私はOpenCLを使用したヘテロジニアス コンピューティングに従っていますが、ハングしたままです。
画像を float の配列として enqueueWriteBuffer に渡します。この場合、画像には色の値がないと思います。{0,0,0,1,0,2,1,0,1,1,1,2...} のように単純に {col,row,col,row,col,row} です。
しかし、彼らが enqueueReadBuffer を実行するとき、彼らが期待するサイズは H W であり、私が行ったように配列を実行する場合、配列のサイズは H W*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);
すべての新しいピクセル座標がカーネルで計算される場合、適切なサイズの空の float 配列を渡すだけではいけません ( W H * 2ではないことはわかりませんが、明らかにW H です)。しかし、これを (500x300 の画像で) ハードコーディングしようとしたところ、スタックが爆発してしまいました。