Faculty of Engineering, Department of Earth Science & Engineering
BSc in Physics; MSc in computing; and PhD in computational physics. Academic interests involve code generation and compilers, numerical modelling, inverse problems, high performance computing adaptive mesh methods, mesh generation and data science.
Have worked on a wide range of industrial and UK research council funded interdisciplinary research projects including: seismic imaging; geophysical fluid dynamics; CFD; dispersion modelling; flow through pores media; renewable energy; nuclear engineering; fluid-structure interaction. Develop science and engineering software for massively parallel simulation, data inversion and optimisation.
More recent focus on Full Waveform Inversion (FWI), Intel Parallel Computing Centre for Open Performance portablE SeismiC Imaging (OPESCI), where we have brought together international leaders in FWI, applied mathematics and computer science to focus on exploiting code generation methods for seismic imaging.
Code generation for finite difference and data inversion – where angles fear to thread.
In this talk we describe Devito – an open source domain specific language (DSL) and compiler for finite-difference solvers and data inversion using the adjoint-state method. The Devito DSL is embedded in Python and SymPy, a symbolic mathematics library for Python. This creates a high-productivity environment that enables domain specialists to quickly develop finite-difference based solvers that are easily verifiable. At run time the Devito compiler generates and compiles either: parallel and optimised C code; or generates code for a specialised stencil compiler such as YASK for the Intel Xeon series. By shifting development effort from manually implementing and optimising low-level parallel code, to instead focusing on DSL compiler development, we are able to implement aggressive optimisations that are unmaintainable or impractical to implement manually for real science and engineering codes. Using full waveform inversion (FWI) as an example, we will show how these class of problems can be made to scale resiliently, achieving a high percentage of the peak performance of the target architecture, while making it relatively straightforward for the domain specialist to perform algorithmic experiments.