diff --git a/benchmarks/seq/game_of_life.c b/benchmarks/seq/game_of_life.c new file mode 100644 index 0000000000000000000000000000000000000000..9f3205058c7ea489f9191381c692ce8987209498 --- /dev/null +++ b/benchmarks/seq/game_of_life.c @@ -0,0 +1,45 @@ +#include <stdint.h> // uint8_t +#include <stdlib.h> // EXIT_SUCCESS, size_t +#include <string.h> // memcpy() + +#define T uint8_t +#define X_LEN 10 +#define Y_LEN 10 +#define STEP_CNT 16 + +int main(void) +{ + T in[] = { + 0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0, + 0,1,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + }; + #define size (sizeof(in)/sizeof(T)) + T out[size]; + for(size_t step = 0; step < STEP_CNT; step++) { + for(size_t i = 0; i < Y_LEN; i++) { + const size_t idx_y = i * X_LEN; + for(size_t j = 0; j < X_LEN; j++) { + const size_t idx = idx_y + j; + if(i > 0 && i < (Y_LEN-1) && j > 0 && j < (X_LEN-1)) { + const T cnt = + in[idx - 11] + in[idx - 10] + in[idx - 9] + + in[idx - 1] + 0 + in[idx + 1] + + in[idx + 9] + in[idx + 10] + in[idx + 11]; + out[idx] = (cnt == 3) || ((in[idx] == 1) && (cnt == 2)); + } else { + out[idx] = 0; + } + } + } + memcpy(in, out, size); + } + return EXIT_SUCCESS; +}