Modelling Seismic Wave Propagation for Oil and Gas Exploration (SEISMO) (HPC)


The Case Study code is a simplified version of the full SEISMO application developed as part of the APOS-EU FP7 project. Using a smaller, simpler code allows us to more easily explore different optimisation strategies. The smaller module also means that we can test the most important algorithms from the full application. In this way, we ensure that the experiments performed as part of Adept retain real-world relevance.

The original SEISMO code supports various data models, including 2- and 3-dimensional structured and unstructured grids. One limitation of the case study is that the simplified code deals with only 2D structured grids, which are not often used in real-world applications. However, the computational patterns of the simpler code are still largely representative of the larger application.

The state of the simulation is encoded as a regular 2-dimensional mesh (the domain), representing evenly-spaced points throughout the ground. To run a simulation, the code performs several discrete time steps. Each time step models the behaviour of seismic waves at each point in the mesh during the interval of time. SEISMO runs only for the number of time steps specified; however, in some codes simulation continues until it reaches a particular condition (convergence).

In the SEISMO code, every point in the domain is updated at each timestep by applying a 5x5-point stencil function. This means that the new values at each point can be computed by looking at the previous state of a 25-point square region centred on that point.


A regular grid of points updated by a stencil function at each timestep is extremely common in HPC. This model appears in many scientific areas such as modelling atmospheric conditions or acoustics. SEISMO is therefore representative of a large number of real-world HPC codes.

Although it is possible to run SEISMO on a single CPU core, for better performance it is necessary to run it in parallel on multiple cores or multiple CPUs. The classic method of doing so in is to decompose the 2D or 3D domain into several sub-domains which run several processes simultaneously, each updating its own sub-domain. This is the implementation used in the full SEISMO code. A Message Passing Interface (MPI) library is used for communication and synchronisation between the various processes.

Adept’s aim in the SEISMO case study is to investigate how to improve the performance and power efficiency of the SEISMO code. The application currently runs at 70% parallel efficiency when scaled up to 16k cores on a Cray XE6. Adept is testing several different implementations and hardware platforms to investigate how these might affect the efficiency.