2020-12-16 12:17:58 +01:00

30 lines
887 B
Common Lisp

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);
}