Glossary#
The words eagle’s documentation uses, each in a sentence. Terms shared by the whole RAPTOR family (manifest, sidecar, DLPack and so on) are defined once in the family glossary.
- active set#
- : The samples still running;
eagle.ActiveSetkeeps them as an index map instead of moving data.# - adjoint#
- : The quantity flowing backwards through the graph: for a plane
p,∂J/∂p. A seed is the adjoint of an output; a gradient is the adjoint of an input. Where two nodes read one plane, the plane’s adjoint is the sum of what flows back from each.# - bitwise#
- : Bit-for-bit reproducible: the same inputs give the same bits on every run and every thread count. Every gradient eagle sums is bitwise; the one exception is named in Same bits, every time.#
- canonical tree#
- : The one fixed grouping of additions eagle uses for sums, so a total has the same bits for any thread count.#
- compaction#
- : Shrinking a per-sample array to just the samples that are still active, so later kernels launch over a smaller count; also called stream compaction.#
- dual-mode#
- : A source file that compiles both against CUDA and as plain C++ with OpenMP, with no change to the calling code.#
- event refinement#
- : Locating a stop inside the step where its rule fires (
events="refine"), so the stop time is a real number with a derivative instead of a multiple of the step; see Event refinement.# - generation#
- : Which launch a Record belongs to: 1 for the first launch, 2 for the second, and so on. It is how a reverse knows its Record is still the newest one.#
- gradient#
- graph#
- : A recorded, dependency-ordered set of launches (a CUDA graph on the GPU, a host executor on the CPU) that is built once and replayed many times.#
- graph capture#
- : Recording the kernel launches issued on a stream, instead of running them, into a graph that can be replayed.#
- guard#
- : The cell a conditional node reads: an
eagle.skippable()runs its step only while the cell is non-zero. A recorded graph saves the value each launch saw, and the reverse replays it; see Gradients through conditionals.# - lane#
- : One sample’s slot inside a packet on the CPU side.#
- launch#
- : One submission of work: a single kernel call, or one replay of a whole graph.#
- Launcher (C++)#
- :
eagle::cuda::Launcher, the instantiated, replayable form of a graph; calling itslaunch()repeats the recorded work with no per-launch setup. Not the same as the family’s launcher protocol (see the family glossary).# - mask#
- : A per-packet record of which lanes are still active, so inactive lanes (or whole packets) can be skipped.#
- memory budget#
- : The bytes a recorded run’s reverse may hold (
memory_budget=). Over it, the reverse runs the batch in passes with the same bits; see Memory budget.# - packet#
- : A fixed-size group of samples that the host launcher processes together with one SIMD instruction stream.#
- phase#
- : One continuous piece of a hybrid trajectory: a refined run made a node of a Graph by
eagle.diff.phase(), with a reset kernel between pieces; see Event refinement.# - plan#
- Record#
- : What one launch of a
record=Truegraph keeps for its reverse:g.recordafterg.launch(). Most of it is the graph’s own planes, so it is only valid until the graph runs again (see The Record).# - registry#
- : The table that resolves a compiled kernel by name so it can be called, streamed or put in a graph (
eagle.KernelRegistry).# - reverse mode#
- : Computing derivatives by running the program’s steps backwards, each step turning “how the objective moves with my outputs” into “how it moves with my inputs”. One backward sweep gives the gradient with respect to every input at once, which is why it is the method of choice when you have one objective and many inputs. Also called the adjoint method (optimal control, PDE-constrained optimisation) or backpropagation (machine learning).#
- sample#
- : One independent item the same kernel runs over: a particle, a trajectory, a network input. eagle runs every sample through the same step.#
- seed#
- : What you hand the reverse pass: the gradient of your objective
Jwith respect to an output plane,∂J/∂output, one value per sample. IfJis the sum of the outputs, every seed is1; ifJis a weighted sum, the seed is the weights; ifJis a terminal costφ(x(T)), the seed is∂φ/∂x(T). It is per sample because each sample has its own output, so each has its own∂J/∂output. Also called a cotangent (JAX),grad_outputs(PyTorch),adj_seed(CasADi), or the terminal costateλ(T)(optimal control).# - vjp#
- : Vector-Jacobian product: the kernel that pulls a seed back through one step, from the adjoints of the step’s outputs to the adjoints of its inputs.
hawk.diff.vjp(kernel)makes one from a kernel. Each launch node of a graph is reversed by its kernel’s vjp.# - wrt#
- : “With respect to”: which inputs you want gradients for.
wrt=None(the default) returns them all.#