void kernel generation(global const bool *previous, global bool *new, global const int *size) { int ID, Nthreads, n, ratio, start, stop, x, y, left, right, up, down, neighbors, i; ID = get_global_id(0); x = ID % size[0]; y = ID / size[0]; left = (x - 1 + size[0]) % size[0]; right = (x + 1) % size[0]; up = (y - 1 + size[1]) % size[1]; down = (y + 1) % size[1]; // Get the number of neighbors neighbors = previous[size[0] * up + left] + previous[size[0] * up + x] + previous[size[0] * up + right] + previous[size[0] * y + left] + previous[size[0] * y + right] + previous[size[0] * down + left] + previous[size[0] * down + x] + previous[size[0] * down + right]; // Update cell new[size[0] * y + x] = (neighbors == 3) + previous[size[0] * y + x] * (neighbors == 2); }