There are multiple implementations in this project. Each one uses the same code, just modified slightly. Each directory contains a Makefile which will build that implementation. For most, a simple ~cd~ into each directory and ~make~ will do (see build instructions).
Every ~make~ will end you up with a ~gol~ binary. However, each implementation takes a different number of arguments (the Cuda one needs to be run in a slightly different fashion).
** Compiling binary output to a video
Every implementation produces file I/O exactly the same. When logging is turned on, each iteration in the output directory is labelled ~iteration-XXXXXXX.bin~ where iteration number is padded by 7 zeros.
There is a script in ~graphics~ that converts a raw ~unsigned char~ data binary into a .bmp where a zero is black and (with some help from [[https://stackoverflow.com/a/47785639/15819675][this Stack Overflow post]]). This program is utilized by ~make-movie.sh~ to convert every .bin in a directory to a .bmp. Then, these .bmps can be compiled into a video file with the arguments that are described in ~make-movie.sh~ (just provide none and a usage string will be ~echo~ed).
For example to make a movie of the outputs generated in ~cuda-global/output~ where each binary file is a grid of size 1920x1080 (at 8fps to a file named output-1920.mp4):
For example to do 1000 iterations at 1920x1080 with a random starting position (the last ~1~ will log each iteration into the ~output~ directory) with a block size of 32: