Я следую вместе с Heterogeneous Computing with OpenCL, и это оставляет меня висит.Как вы представляете пиксельные координаты как 1D-массив?
Они передают изображение, как массив поплавков, в enqueueWriteBuffer. Я думаю, что изображение в этом случае не имеет значений для цвета. Это просто {col, row, col, row, col, row}, например. {...} 0,0,0,1,0,2,1,0,1,1,1,2.
но когда они делают 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);
Если все новых координаты пикселя вычисляется в ядре не могли бы вы просто передать пустой поплавок массива соответствующего размера (W * H, по-видимому, хотя я не вижу, как это не W * H * 2). Но потом я пытался жестко кодировать это (на изображении 500x300), и это взорвало мой стек.
это имеет смысл. Я думал, что это может быть что-то вроде этого. я замечаю много W * H и sizeof (A * B * C), которые повторяются в коде. я думаю, что это не так много из производительности, когда приходится вычислять это каждый раз, вместо того чтобы хранить его в переменной. – user1873073
@ user1873073 вы правы, это не будет значительным хитом производительности, потому что умножение и добавление - это быстрые операции, и вы делаете определенное количество вычислений каждый раз. Таким образом, этот расчет можно считать завершенным в «O (1)» времени и не повлияет на асимптотическое время выполнения. Таким образом, у вас есть эффективное использование памяти и предсказуемое, разумное время работы – wlyles