An oil & gas code had the openmp-critical-section pattern and the computational aspects of the original code are recreated here. This application solves the 3D wave equation: \(\frac{\partial^{2}u}{\partial t^{2}} = c^{2}\nabla^{2}u\) using the pseudospectral method. However, for the WP7 kernel the finite difference method was selected for the purpose of simplicity, which re-creates the computational profile of the original code. The code contains a critical section within a parallel OpenMP loop, which greatly slows its performance.
The parameters Ni
, Nj
, and Nk
are set within the source code and control the number of cells in the x-, y-
and z-direction, respectively. Similarly, the number of time steps is controlled by the Nt
variable. These variables
are currently set to Ni=500, Nj=500, Nk=500 and Nt=20.
Build using the Makefile provided by typing the make
command. The makefile assumes that the Intel C++ compiler is being used. Note that the code must be compiled with the -std=c++14 flag, as well as -qopenmp to enable the compilation of the OpenMP directives.
The executable is called omp-critical.exe
. Set the environment variable OMP_NUM_THREADS
to set the desired number of OpenMP threads for the job.