30 lines
887 B
Common Lisp
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);
|
|
} |