Background: 3D Wave Simulations
3D wave-based simulations are an important tool in physics for modelling the evolution of waves through space and time of various mediums. The finite difference time domain method (FDTD) is a widely used numerical scheme to model the 3D wave equation in many of these simulations. Using this method, space is discritised into a three-dimensional grid of points, with data values resident at each point representing the field at that point. The state of the system evolves through time-stepping: the value at each point is repeatedly updated using finite differences of values of the neighbourhood of that point. The so-called ``stencil'' of points involved in each update is determined by the choice of discretisation scheme for the partial differential operators in the wave equation.
Motivation: Performance, Portability and Productivity for Parallelised 3D Wave Models
This numerical approach is computationally expensive, but amenable to parallelisation. In recent years, there has been progress in the development of techniques to exploit modern parallel hardware, however much of it is low-level or tied to specific platforms. Ideally, any simulation software should be able to run in a portable manner across different architectures while retaining performance and being straightforward to program. As the HPC landscape expands, developers need to run their codes on newer, more performant platforms, such as GPUs or FPGAs. However, there is a lack of tools that provide true performance portability. Instead, programmers are required to rewrite and retune their codes as well as maintain multiple code bases. This can be expensive, time-consuming and prone to error. In an ideal world, computational scientists could focus on their own research and not require HPC expertise. Furthermore, many 3D wave-based simulations - such as room acoustics or ground penetrating radar - are complicated to model programmatically and even more complex to abstract out. However, such simulations are integral to predicting the properties and behaviour of the physical world around us. Many current high-level parallel methodologies exist which focus on stencil applications, however most neglect to manage properties such as absorbing boundary conditions which are critical to developing more accurate simulations.
Approach: Enable the LIFT Language to Generate 3D Wave Model Code
My research aims to create performant, portable, productive 3D wave simulations by developing a modularised workflow using compiler and code generation techniques from the LIFT language in conjunction with existing DSLs. Lift is an intermediate parallel language designed to generate low-level code specific to a particular architecture. It is designed as a language for DSLs to be compiled into. In conjunction with a high-level, programmable DSL, LIFT can provide performance, portability and productivity for codes.
Results have shown that LIFT is capable of expressing stencils of varying types and sizes. In particular, room acoustics simulations have been thoroughly investigated in the framework and a number of other 2D and 3D benchmarks have also been implemented as well as optimisations specific to these stencils. Current work includes adding functionality for absorbing boundary conditions and extending a stencil-based DSL to compile into the LIFT language.