#[non_exhaustive]pub struct Options {
pub cache_capacity: usize,
pub shapeless: bool,
}Expand description
Options of compile, compile_mut and compile_flat_with:
Options::default().cache_capacity(8).
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.cache_capacity: usizeThe most traced signatures a compiled function keeps (least recently used first out); 0 never caches. Default 64.
shapeless: boolTrace once per input structure, dtypes and ranks, and replay for any shapes
(Options::shapeless). Default off.
Implementations§
Source§impl Options
impl Options
Sourcepub fn cache_capacity(self, n: usize) -> Self
pub fn cache_capacity(self, n: usize) -> Self
Sets the cache capacity.
Sourcepub fn shapeless(self, on: bool) -> Self
pub fn shapeless(self, on: bool) -> Self
Shapeless compilation (MLX’s shapeless=True): the function is traced once per
input structure, dtypes and ranks, and replayed for any shapes of those ranks. Each
replay infers the shapes again, and element-wise operations broadcast their operands
as the uncompiled ones do, so the results are the shaped compile’s bit for bit.
use nuvec_compile::Options;
use nuvec_core::{Array, DType, ops};
let swiglu = Options::default()
.shapeless(true)
.compile(|(g, u): &(Array, Array)| g.multiply(g.sigmoid()).multiply(u));
for rows in [7, 512, 2048] {
let g = ops::ones([rows, 64], DType::F32);
swiglu(&(g.clone(), g))?.eval()?; // traced once, for every row count
}- Operations whose parameters hold traced sizes fail the trace with an error naming them: reshapes, slices and slice updates, broadcasts other than an element-wise operation’s own, random draws, custom Metal kernels and attention (whose kernel choice depends on the lengths). Compile those without the option.
- As in MLX, Rust code that reads a shape while tracing (
x.shape()[0], a branch on a size) bakes the first call’s value in, and constants built from a traced shape keep it: a replay on another shape then fails in the operation that uses them. compile_mutkeys its state exactly and its inputs shapelessly.
Sourcepub fn compile<'f, I, O, F, R>(self, f: F) -> impl Fn(&I) -> Result<O> + 'f
pub fn compile<'f, I, O, F, R>(self, f: F) -> impl Fn(&I) -> Result<O> + 'f
compile with these options.
Sourcepub fn compile_mut<'f, S, I, O, F, R>(
self,
f: F,
) -> impl Fn(&mut S, &I) -> Result<O> + 'f
pub fn compile_mut<'f, S, I, O, F, R>( self, f: F, ) -> impl Fn(&mut S, &I) -> Result<O> + 'f
compile_mut with these options.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Options
impl RefUnwindSafe for Options
impl Send for Options
impl Sync for Options
impl Unpin for Options
impl UnsafeUnpin for Options
impl UnwindSafe for Options
Blanket Implementations§
impl<T> AutoreleaseSafe for Twhere
T: ?Sized,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more