Fischers equation
The code solves a reaction diffusion equation known as Fischer’s Equation.
The detailed description of the problem can be found in the issue #1
Usage of the application: main nx ny nt t verbose
nx
number of gridpoints in x-direction
ny
number of gridpoints in y-direction
nt
number of timesteps
t
total time
verbose
(optional) verbose output
Use cases:
Small:
128 128 100 0.01
Medium:
256 256 200 0.01
Large:
1024 1024 200 0.01
Output
The application output messages include total time of the solution, number of conjugate gradient (CG) iterations, which should be constant for given mesh size and time parameters, and CG iteration ratio, which can be used to compare different implementations.
The solution of the problem is stored into output.bin
and output.bow
files and it can be visualized using the included python script as follows:
ml numpy
python plotting.py
display output.png
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 reporter access for all teachers (bes0030, vys0053, jansik, lriha, mec059, milanjaros, vav0038).
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 the Large
use case. 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 correct positions with appropriate variables visibility in order to utilize more threads efficiently.
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.
The presentation (pdf) as well as all other modifications, and outputs push to your git repository.