You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ci: add ARM64 support with native builds and refactored workflows
Add comprehensive ARM64 (linux/arm64) support for Devito's Docker images
and CI/CD pipeline, enabling deployment on AWS Graviton, Apple Silicon,
and other ARM64 platforms.
Architecture & Build Strategy:
- Native ARM64 builds on GitHub's free ubuntu-24.04-arm runners
- Separate runners for each architecture (no cross-compilation)
- x86_64 builds on ubuntu-22.04 (pinned to avoid ubuntu-latest migration)
- Multi-platform Docker image support with proper manifest lists
Workflow Improvements:
- Refactor docker-bases.yml to use matrix strategy for GCC builds
- Consolidate x86_64 and ARM64 base image builds into single job
- Remove QEMU setup (not needed for native builds)
- Add arm64 workflow dispatch input parameter
- Conditional execution based on input flags to run only requested builds
- ARM64 GCC limited to default version (building from source too slow)
CI Test Coverage:
- Add ARM64 test configurations to pytest-core-nompi.yml:
- pytest-ubuntu-py312-gcc14-omp-arm64
- pytest-ubuntu-py311-gcc13-omp-arm64
- Add ARM64 MPI tests to pytest-core-mpi.yml (gcc-arm64)
- Add ARM64 smoke test to docker-devito.yml
- Pin x86_64 tests to ubuntu-22.04 for stability
Bug Fixes:
- Fix OpenMPI parallel build: change ${nproc} to $(nproc) in Dockerfile.cpu
(reduces build time from ~15-20 mins to ~5-8 mins)
- Add actionlint.yaml config for self-hosted runner label validation
Documentation:
- Add ARM64 section to docker/README.md
- Document supported ARM64 platforms (AWS Graviton, Apple Silicon, etc.)
- Add usage examples for ARM64 images
Copy file name to clipboardExpand all lines: docker/README.md
+37-4Lines changed: 37 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,11 +8,12 @@ Devito provides several images that target different architectures and compilers
8
8
9
9
### [Devito] on CPU
10
10
11
-
We provide two CPU images:
12
-
-`devito:gcc-*` with the standard GNU gcc compiler.
13
-
-`devito:icx-*` with the Intel C compiler for Intel architectures.
11
+
We provide CPU images for different architectures and compilers:
12
+
-`devito:gcc-*` with the standard GNU gcc compiler (x86_64).
13
+
-`devito:icx-*` with the Intel C compiler for Intel architectures (x86_64).
14
+
-`devito:arm64-gcc-*` with the standard GNU gcc compiler for ARM64 architectures (AWS Graviton, Apple Silicon, etc.).
14
15
15
-
These images provide a working environment for any CPU architecture and come with [Devito], `gcc/icx` and `mpi` preinstalled, and utilities such as `jupyter` for usability and exploration of the package.
16
+
These images provide a working environment for their respective CPU architectures and come with [Devito], `gcc/icx` and `mpi` preinstalled, and utilities such as `jupyter` for usability and exploration of the package.
16
17
17
18
To run this image locally, you will first need to install `docker`. Then, the following commands will get you started:
18
19
@@ -38,6 +39,38 @@ In addition, the following legacy tags are available:
38
39
-`devito:cpu-*` that corresponds to `devito:gcc-*`
39
40
40
41
42
+
### [Devito] on ARM64
43
+
44
+
We provide ARM64-specific images optimized for ARM64 processors:
45
+
-`devito:arm64-gcc-*` with the standard GNU gcc compiler for ARM64 architectures.
46
+
47
+
These images support various ARM64 platforms including:
48
+
- AWS Graviton2/3/4 instances
49
+
- Apple Silicon (M1/M2/M3) via Docker Desktop
50
+
- ARM-based cloud instances
51
+
52
+
Devito automatically detects the specific ARM64 variant at runtime and applies appropriate optimizations through its JIT compiler.
53
+
54
+
To run on ARM64 systems:
55
+
56
+
```bash
57
+
# Pull image and start a bash shell
58
+
docker run --rm -it -p 8888:8888 devitocodes/devito:arm64-gcc-latest /bin/bash
59
+
60
+
# or start a Jupyter notebook server on port 8888
61
+
docker run --rm -it -p 8888:8888 devitocodes/devito:arm64-gcc-latest
62
+
63
+
# Run an example
64
+
docker run --rm -it devitocodes/devito:arm64-gcc-latest python examples/seismic/acoustic/acoustic_example.py
0 commit comments