-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.qmd
68 lines (52 loc) · 3.45 KB
/
index.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
---
layout: default
permalink: /
title: "Devito: a scalable and portable stencil DSL and compiler"
bibliography: webbib.bib
---
::: {#fig-rtm layout-ncol=2}
<img src="https://slim.gatech.edu/Website-ResearchWebInfo/Imaging/Fig/rtm-h.gif">
<img src="https://slim.gatech.edu/Website-ResearchWebInfo/Imaging/Fig/rtm-v.gif">
3D TTI imaging on a custom overthrust-salt model [@witte2019RHPCssi]. This image was computed using Devito and high-level abstraction for Cloud Computing. Images courtesy of [SLIM @ GeorgiaTech](https://slim.gatech.edu).
:::
Devito is a Python package to implement optimized stencil computation (e.g.,
finite differences, image processing, machine learning) from high-level
symbolic problem definitions. Devito builds on [SymPy](https://www.sympy.org)
and employs automated code generation and just-in-time compilation to execute
optimized computational kernels on several computer platforms, including CPUs,
GPUs, and clusters thereof.
Symbolic computation is a powerful tool that allows users to:
* Build complex solvers from only a few lines of high-level code
* Use automated performance optimisation for generated code
* Adjust stencil discretisation at runtime as required
* (Re-)development of solver code in hours/days rather than months
Devito is primarily designed to create wave propagation kernels for
use in seismic inversion problems. A tutorial for the generation of a
modelling operator using an acoustic wave equation can be found
[here](examples/seismic/tutorials/01_modelling.html). A paper
outlining the symbolic API and the verification procedures of the acoustic operator can be
found [here](https://www.geosci-model-dev.net/12/1165/2019/) [@devito-api] and the internals of the compiler are described in [this paper](https://doi.org/10.1145/3374916) [@devito-compiler].
### Key Features
* A functional language to express finite difference operators.
* Straightforward mechanisms to adjust the discretization.
* Constructs to express sparse operators (e.g., interpolation), classic linear operators (e.g., convolutions), and tensor contractions.
* Seamless support for boundary conditions and adjoint operators.
* A flexible API to define custom stencils, sub-domains, sub-sampling, and staggered grids.
* Generation of highly optimized parallel code (SIMD vectorization, CPU and GPU parallelism via OpenMP and OpenACC, multi-node parallelism via MPI, blocking, aggressive symbolic transformations for FLOP reduction, etc.).
* Distributed NumPy arrays over multi-node (MPI) domain decompositions.
* Inspection and customization of the generated code.
* Autotuning framework to ease performance tuning.
* Smooth integration with popular Python packages such as NumPy, SymPy, Dask, and SciPy, as well as machine learning frameworks such as TensorFlow and PyTorch.
You can find below an introductory tutorial to Devito.
{{< video https://www.youtube.com/embed/druSsV_1O6w
title="Seismic Inversion using Devito"
>}}
### (Disclosed) Software using Devito
* [COFII](https://github.com/ChevronETC) - [Chevron](https://www.chevron.com/)
* [DUG Wave](https://dug.com/model-building-with-dug-wave-full-waveform-inversion/) - [DownUnder GeoSolutions](https://dug.com/)
* Imaging AnyWare [TGS]
* [JUDI](https://github.com/slimgroup/JUDI.jl) [SLIM group @GeorgiaTech]
* [Neurotech Development Kit (NDK)](https://agencyenterprise.github.io/neurotechdevkit/)
* [Stride](https://www.stride.codes)
* [xDSL](https://xdsl.dev)
* [pyLops](https://pylops.readthedocs.io/)