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
Update docs and preserve runtime LD_LIBRARY_PATH in entrypoints
Update README and CLAUDE.md to reflect the consolidated cuda/
directory, new none/ environment, and current tagging scheme.
Fix entrypoints in cuda and rocm Dockerfiles to save and restore
LD_LIBRARY_PATH around Spack activate, so GPU driver libraries
injected by enroot/pyxis are not clobbered.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CLAUDE.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,16 +1,16 @@
1
1
# Repository Guidelines
2
2
3
3
## Project Structure & Module Organization
4
-
Source files live under `envs/<cpu>/<gpu>/`, where each leaf directory owns a `spack.yaml` manifest and (optionally) a generated `Dockerfile`. Keep CPU targets (`x86`, …) and accelerator targets (`gfx90a`, `sm72`, `none`) granular so images stay purpose-built, and limit the root `README.md` to high-level context.
4
+
Source files live under `envs/<cpu>/<gpu>/`, where each leaf directory owns a `spack.yaml` manifest and a `Dockerfile`. Current environments are `envs/x86/rocm` (AMD GPUs), `envs/x86/cuda` (NVIDIA GPUs, parameterised by `CUDA_ARCH` and `CUDA_VERSION` build args), and `envs/x86/none` (CPU-only). Keep CPU targets (`x86`, …) and accelerator targets (`rocm`, `cuda`, `none`) as separate directories so images stay purpose-built, and limit the root `README.md` to high-level context.
5
5
6
6
## Build, Test, and Development Commands
7
-
-`spack spec -e envs/x86/gfx90a/spack.yaml` — concretizes the manifest locally; run this before opening a PR so dependency drift is caught early.
8
-
-`spack containerize envs/x86/gfx90a/spack.yaml > envs/x86/gfx90a/Dockerfile` — regenerates the Dockerfile after manifest edits (avoid hand-tuning output).
9
-
-`docker build -f envs/x86/gfx90a/Dockerfile -t selfish:gfx90a .` — builds the shareable runtime image; tag images `<cpu>-<gpu>` for clarity.
10
-
-`docker run --rm selfish:gfx90a spack find hdf5` — smoke-tests that the expected view was installed inside the image.
7
+
-`docker build -f envs/x86/rocm/Dockerfile --build-arg GPU_ARCH=gfx90a -t selfish:x86-rocm-gfx90a .` — builds the ROCm image for a specific AMD GPU arch.
8
+
-`docker build -f envs/x86/cuda/Dockerfile --build-arg CUDA_ARCH=70 --build-arg CUDA_VERSION=12.4 -t selfish:x86-cuda-sm70 .` — builds the CUDA image for a specific NVIDIA GPU arch.
-`docker run --rm selfish:x86-none spack find hdf5` — smoke-tests that the expected view was installed inside the image.
11
11
12
12
## Coding Style & Naming Conventions
13
-
Spack YAML uses 2-space indentation, lowercase keys, and quoted constraint strings (`"target=x86_64_v3"`). Group `specs` alphabetically, keep `packages` overrides sorted by scope, and rely on multiline `RUN` blocks with trailing `\` alignment plus brief comments for non-obvious workarounds. Name new environments after the hardware tuple (`x86/gfx942`, `x86/none`) so downstream scripts can glob predictably.
13
+
Spack YAML uses 2-space indentation, lowercase keys, and quoted constraint strings (`"target=x86_64_v3"`). Group `specs` alphabetically, keep `packages` overrides sorted by scope, and rely on multiline `RUN` blocks with trailing `\` alignment plus brief comments for non-obvious workarounds. Name new environments after the hardware tuple (`x86/cuda`, `x86/none`) so downstream scripts can glob predictably.
14
14
15
15
## Testing Guidelines
16
16
For each environment change, run `spack spec` followed by `spack install --fail-fast` inside a disposable builder container to verify concretization. Container builds must pass `docker build` locally before review; capture the last ~20 lines for the PR description. When adding MPI/HDF5 variants, run `docker run --rm <tag> mpichversion` (or another representative binary) to prove runtime availability. There is no coverage gate, but every new spec should ship with at least one build log, and GitHub Actions now double-checks gfx90a builds and publishes them to `higherordermethods/selfish`.
Copy file name to clipboardExpand all lines: README.md
+52-40Lines changed: 52 additions & 40 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,59 +10,76 @@ The core SELF team at Fluid Numerics has adopted enroot+pyxis with Slurm for our
10
10
See [Repository Guidelines](CLAUDE.md) for contributor expectations, build commands, and review checklists.
11
11
12
12
13
-
More docs coming soon
13
+
## Organization
14
14
15
+
The `envs/` subdirectory defines all of the base environments that are aimed at providing base images with all the dependencies required for developing SELF. The subdirectory structure is `envs/{cpu_platform}/{gpu_backend}`.
The `envs/` subdirectory defines all of the base environments that are aimed at providing base images with all the dependencies required for developing SELF. The subdirectory structure is as `envs/{cpu_platform}/{gpu_backend}`. When `{gpu_platform}=none`, that environment is an environment for working with non-gpu accelerated implementations of SELF.
23
+
Each directory contains a `spack.yaml` manifest, a `Dockerfile`, and a `feq-parse.patch`.
19
24
20
25
## Container Images
21
26
22
-
SELFish provides pre-built container images with all dependencies for GPU-accelerated spectral element computations. Images are tagged using a **version-architecture** naming scheme to support multiple GPU targets.
27
+
SELFish provides pre-built container images with all dependencies for spectral element computations. Images are published to Docker Hub under `higherordermethods/selfish`.
23
28
24
29
### Image Tagging Scheme
25
30
26
31
Images follow the pattern: `higherordermethods/selfish:<version>-<cpu_platform>-<gpu_backend>-<gpu_arch>`
27
32
28
-
-**`<version>`**: Semantic version (e.g., `v1.2.3`) or release channel (`latest`, `dev`)
29
-
-**`<cpu_platform>`**: Target cpu architecture (e.g. `x86`, `arm`)
30
-
-**`<gpu_backend>`**: GPU backend provider with version (e.g. `rocm643`, `cuda112`)
0 commit comments