In Devito, an Operator
carries out three fundamental tasks: generation of low-level code, JIT compilation, and execution. Overall, the lowering process performed by an Operator
– from high-level equations to dynamically compiled and executable code – consists of multiple compiler passes, summarized in the Figure bellow. The following series of notebooks will describe these compilation passes in a hands-on fashion. We will explore the heart of the Operator
class, which orchestrates code generation and compilation. For more details, see the Operator class.
The reader of this series of tutorials is expected to be familiar with the basic Devito API (i.e., Grid
, Function
/TimeFunction
, Operator
, ...). Otherwise, the CFD tutorials in examples/cfd
are a better place to start.
Many of the examples and exercises shown here are extracted from test cases found in the folder devito/tests
, or from the documentation itself.
F. Luporini, M. Lange, M. Loubotin, N. Kukreja, J. Huckelheim, C. Yount, P. Witte, P. Kelly, G. Gorman, F. Herrmann. Architecture and Performance of Devito, A System for Automated Stencil Computation. Submitted to SIAM Journal on Scientific Computing, 2018. [arXiv:1807.03032]