Skip to content

meta(ad): Enzyme coverage — operator pullbacks, packed/GPU parity, Julia 1.13 #82

Open
1 of 4 issues completed

Description

@kylebeggs

Umbrella for the open Enzyme-rule and Enzyme-coverage issues. The exchange and BC sweeps have declared-transpose rules over raw storage (_exchange_storage! / _bc_storage! + BlockLayout); the operator sweeps do not, one crash is fixed but not root-caused, none of it is tested on a GPU or a packed field, and four gradient tests are skipped on Julia 1.13.

Sub-issues

  1. feat(ad): linear-operator pullback rules (DESIGN §6) — re-verify against current Enzyme #41 — linear-operator pullback rules (DESIGN §6). The upstream tracker it cited closed in February; first step is to re-run the mixed pointer/isbits MWE on current Enzyme and either unblock or re-point.
  2. test(ad): GPU/packed-field AD parity for the exchange rules #43 — packed-field and GPU AD parity for the exchange rules. Decide and document whether GPU reverse mode is supported or refused; today it is untested.
  3. test(ad): re-enable Enzyme gradient tests skipped on Julia 1.13 #108 — re-enable the Enzyme gradient tests skipped on Julia 1.13 (test/autodiff.jl, test/enzyme_rules.jl). CI runs only 1.10 and 1.13, so the dκ parameter-gradient guard now runs on half the matrix.

Optional, no issue: the Linux x86_64 segfault fixed in 9fc1b02 (formerly #40) was never root-caused. That commit removed the single-grid apply_bc!/fold_bc! rule and made the remaining rule bodies allocation-free in one step, so the candidates are allocation in the rule body and the removed rule's mixed pointer/isbits AbstractGrid argument (same class as EnzymeAD/Enzyme.jl#2707). Re-bisect with an upstream MWE only if a single-grid rule is ever wanted again.

Invariants that bind every sub-issue

  • A rule is an exact substitution of a declared transpose, never an approximation, and never fires on a path carrying operator parameters (ScalingOp, Advection with a Field coefficient) — test/autodiff.jl guards dκ (skipped on Julia 1.13 until test(ad): re-enable Enzyme gradient tests skipped on Julia 1.13 #108 lands).
  • Rule arguments may not mix GC pointers with inline floats (Julia 1.12 calling convention); rule bodies may not allocate. Both are documented in DESIGN §6 and CLAUDE.md.
  • A local macOS/aarch64 green run is not evidence about Linux x86_64. Push and read the CI matrix.

—
🤖 Claude refreshed this one: #40 left, #108 joined.
claude-opus-5-5[1m] (high) · claude-code 2.1.285 · unreviewed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions