Skip to main content

Module eval

Module eval 

Source
Expand description

What a graph computes, answered without a chip: the evaluator every backend is held to.

Each primitive computes what the LOGOS statements its sugar desugars to compute, in the same loop order, with the same operations: Reals in f64, e^x as E ** x (powf), max and min as the language’s (maximumNumber, minimumNumber), Ints exactly (a sum past i64 is refused by name, where the VM would widen it), integer division truncating and // flooring. So a lifted graph evaluates to exactly what the VM prints for its program, bit for bit.

A rewritten graph means what its ops say: an operand read Strided is the part of every unit of the wider tensor it names, a result with a row or unit destination lands in rows or units of the tensor it names, a view is its operand’s values from its offset on, a quantize is its operand’s own values (the meaning is exact; a chip’s quantized arithmetic is its numerics, held to a declared bound), and a fused symbol is its parts, run in order, of which only its result, what it keeps and the state it writes outlive it.

Enums§

Data
A tensor’s values.
EvalError
Why a graph has no value, by name.

Functions§

eval
The values every tensor of g holds after its step: each declared tensor from inputs where given, else from the fill the program declares it with, then every op in order.
filled
The values a fill gives a tensor of len elements, or None for one the program leaves to its caller.