Devito is a Python based domain-specific language for implementing
high-performance finite difference partial differential equation solvers. The
motivating application is exploration seismology where methods such as
Full-Waveform Inversion and Reverse-Time Migration are used to invert terabytes
of seismic data to create images of the earth's subsurface. Even using modern
supercomputers, it can take weeks to process a single seismic survey and create
a useful subsurface image. The computational cost is dominated by the numerical
solution of wave equations and their corresponding adjoints. Therefore, a great
deal of effort is invested in aggressively optimizing the performance of these
wave-equation propagators for different computer architectures. Additionally,
the actual set of partial differential equations being solved and their
numerical discretization is under constant innovation as increasingly realistic
representations of the physics are developed, further ratcheting up the cost of
practical solvers. By embedding a domain-specific language within Python and
making heavy use of SymPy, a symbolic mathematics library, we make it possible
to develop finite difference simulators quickly using a syntax that strongly
resembles the mathematics. The Devito compiler reads this code and applies a
wide range of analysis to generate highly optimized and parallel code. This
approach can reduce the development time of a verified and optimized solver
from months to days.
In this talk we will describe key features of Devito that enable us to achieve
up to 60% of the roofline model for wave solvers. We will also walk through a
3D elastic wave solved to illustrate how the right abstractions can make
dramatically reduce the effort and complexity of PDE solvers. We will also
present, for the first time publicly, results for automatically generated
MPI-OpenMP production grade wave propogation software developed for
applications such as high-frequency RTM.
WATCH VIDEO