pub struct RustcAutodiff {
pub mode: DiffMode,
pub width: u32,
pub input_activity: ThinVec<DiffActivity>,
pub ret_activity: DiffActivity,
}Fields§
§mode: DiffModeConceptually either forward or reverse mode AD, as described in various autodiff papers and e.g. in the JAX Documentation.
width: u32A user-provided, batching width. If not given, we will default to 1 (no batching). Calling a differentiated, non-batched function through a loop 100 times is equivalent to:
- Calling the function 50 times with a batch size of 2
- Calling the function 25 times with a batch size of 4,
etc. A batched function takes more (or longer) arguments, and might be able to benefit from
cache locality, better re-usal of primal values, and other optimizations.
We will (before LLVM’s vectorizer runs) just generate most LLVM-IR instructions
widthtimes, so this massively increases code size. As such, values like 1024 are unlikely to work. We should consider limiting this to u8 or u16, but will leave it at u32 for experiments for now and focus on documenting the implications of a large width.
input_activity: ThinVec<DiffActivity>§ret_activity: DiffActivityImplementations§
Source§impl RustcAutodiff
impl RustcAutodiff
pub fn has_primal_ret(&self) -> bool
Source§impl RustcAutodiff
impl RustcAutodiff
pub fn has_ret_activity(&self) -> bool
pub fn has_active_only_ret(&self) -> bool
pub fn error() -> Self
pub fn source() -> Self
pub fn is_active(&self) -> bool
pub fn is_source(&self) -> bool
pub fn apply_autodiff(&self) -> bool
pub fn into_item( self, source: String, target: String, inputs: Vec<TypeTree>, output: TypeTree, ) -> AutoDiffItem
Trait Implementations§
Source§impl Clone for RustcAutodiff
impl Clone for RustcAutodiff
Source§fn clone(&self) -> RustcAutodiff
fn clone(&self) -> RustcAutodiff
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for RustcAutodiff
impl Debug for RustcAutodiff
Source§impl<__D: SpanDecoder> Decodable<__D> for RustcAutodiff
impl<__D: SpanDecoder> Decodable<__D> for RustcAutodiff
Source§impl<__E: SpanEncoder> Encodable<__E> for RustcAutodiff
impl<__E: SpanEncoder> Encodable<__E> for RustcAutodiff
Source§impl<__CTX> HashStable<__CTX> for RustcAutodiffwhere
__CTX: HashStableContext,
impl<__CTX> HashStable<__CTX> for RustcAutodiffwhere
__CTX: HashStableContext,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
Source§impl PartialEq for RustcAutodiff
impl PartialEq for RustcAutodiff
Source§impl PrintAttribute for RustcAutodiff
impl PrintAttribute for RustcAutodiff
Source§fn should_render(&self) -> bool
fn should_render(&self) -> bool
Whether or not this will render as something meaningful, or if it’s skipped
(which will force the containing struct to also skip printing a comma
and the field name).
fn print_attribute(&self, __p: &mut Printer)
impl Eq for RustcAutodiff
impl StructuralPartialEq for RustcAutodiff
Auto Trait Implementations§
impl DynSend for RustcAutodiff
impl DynSync for RustcAutodiff
impl Freeze for RustcAutodiff
impl RefUnwindSafe for RustcAutodiff
impl Send for RustcAutodiff
impl Sync for RustcAutodiff
impl Unpin for RustcAutodiff
impl UnsafeUnpin for RustcAutodiff
impl UnwindSafe for RustcAutodiff
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 24 bytes