John Conway's Game of Life
About
- by the British mathematician John Horton Conway
- published in October 1970
- a two-state, two-dimensional cellular automaton which, by its behaviour
- resembles the evolution of a community of living organisms
- an example of a system where simple rules give rise to complex
- behaviour - emergent structures emerge
Game description
- The playing area is a 2D square grid
- the grid squares are called cells, each cell is either alive (shown black) or dead (shown in white), cells outside the grid are dead
- each cell is adjacent to other cells it touches with an edge (orthogonally) or vertex (diagonally) - Moore's neighborhood
- a colony of cells in the lattice survives from generation to generation
- the state of the cell in the new generation depends on its current state and number of living neighbours
Usage of the application: gameoflife use_case
gameoflife tests/life0.bmp
(tiny)
gameoflife tests/life1.bmp
(small)
gameoflife tests/life2.bmp
(large)
STEP 0: Create git repository (10%)
Your code should be forked from this repository and hosted on code.it4i.cz as a private project with access for all teachers.
STEP 1: Building the library (10%)
Provide compilation script for your application (the script should run independently on a current path). Script should load all necessary modules and call cmake
.
STEP 2: Analysis of the application (10%)
Use Arm map
(module Forge) to analyze a sequential run of your application with given use case (tests/large
). Identify the most time consuming regions that can be parallelized by OpenMP.
STEP 3: Use OpenMP to run the application in parallel (10%)
Put OpenMP pragmas to a correct positions with appropriate variables visibility in order to utilize more threads effectively.
STEP 4: Test the correctness of the code (10%)
Create script that automatically check correctness of your application for at least 3 different test cases. Comparison can be implemented as comparison of outputs of sequential and parallel runs.
STEP 5: Test the behavior of the code on the Karolina cluster (40%)
- Implement time measurement for all parallel regions using omp_get_wtime().
- Create script for run strong scalability measurement (PBS script).
- Evaluate strong scalability of measured regions up to 128 threads and different thread affinity (compact, scatter, balanced, none).
- Prepare charts for all measurements.
STEP 6: Presentation of your project (10%)
Prepare presentation in form of slides (pptx, pdf). The slides should address all topics requested above.