Glossary
A
- AADC++
-
LLVM/Clang-based compiler that eliminates the performance overhead of wholesale
doubletoidoubleintegration, achieving near-native performance (1-5% overhead) when AADC recording is disabled while maintaining the simplicity of type redefinition integration. - Active Type
-
A data type (e.g.,
idouble,ibool,iint) that enables automatic differentiation and JIT compilation by tracking operations in the computational graph. Contrasts with passive types (double,bool,int64_t). - Active-to-Passive Conversion (A2P)
- The conversion of AADC active types to their native counterparts. Can be problematic if stochastic variables are converted during recording, potentially leading to incomplete computational graphs.
- Adjoint
- A value used in reverse-mode automatic differentiation representing the sensitivity of an output with respect to an intermediate or input variable. Also called adjoint seed when set for output variables.
- Adjoint Seed
- Initial values set on output variables before reverse pass execution, typically 1.0 for computing derivatives. Controls which partial derivatives are computed.
- Automatic Differentiation (AD)
- A computational technique for calculating exact derivatives of functions specified by computer programs. AADC uses reverse-mode AD (backpropagation). See Wikipedia: Automatic Differentiation.
- AVX2/AVX512
- Advanced Vector Extensions instruction sets that enable SIMD (Single Instruction, Multiple Data) operations. AVX2 processes 4 doubles simultaneously, AVX512 processes 8 doubles. See Wikipedia: Advanced Vector Extensions.
B
- Branch
- A conditional execution path in code (if/else statements). AADC distinguishes between static branches (conditions don’t depend on kernel inputs) and stochastic branches (conditions depend on kernel inputs).
- Branchless Execution
-
Execution strategy that avoids conditional jumps by using functional forms like
iIf()instead of traditional if/else statements for stochastic conditions.
C
- Checkpointing
- Memory optimization technique that saves intermediate values at specific points during forward execution and restores them during reverse execution to reduce memory requirements. See Wikipedia: Checkpointing.
- Computational Graph
- Directed acyclic graph representing mathematical operations and data dependencies captured during the recording phase. Forms the basis for JIT compilation and automatic differentiation.
- Constants
- Variables with fixed values that don’t change between kernel executions and aren’t marked for differentiation (IsRandom=false, IsDiff=false).
D
- Diff-only Variables
-
Variables marked with
markAsDiff()that have fixed values during kernel execution but are needed for derivative computation (IsRandom=false, IsDiff=true). - Dynamic Index
-
Array index computed from kernel inputs that can vary between evaluations, requiring
iinttype for proper tracking in the computational graph.
F
- Forward Pass
- Execution of the compiled kernel to compute function values at specified input points. Typically runs 5-100x faster than original code due to JIT optimization.
- Functional Form
-
Mathematical expression using functions like
iIf()instead of control flow statements, required for stochastic conditions during recording.
I
- ibool
- AADC’s active boolean type that tracks logical operations in computational graphs involving conditional logic.
- idouble
-
AADC’s primary active type, a drop-in replacement for
doublethat enables JIT compilation and automatic differentiation. - iIf()
- Functional conditional operation analogous to Excel’s IF() function, used for stochastic branches during recording.
- iint
- AADC’s active integer type for tracking integer operations and array indexing in computational graphs.
- Implicit Function Theorem (IFT)
- Mathematical technique used in AADC for handling iterative algorithms and optimization problems with automatic differentiation. See Wikipedia: Implicit Function Theorem.
- IsRandom Flag
- Internal flag indicating whether a variable connects to graph inputs that can change between kernel executions.
- IsDiff Flag
- Internal flag indicating whether a variable connects to graph inputs used for derivative computation.
J
- JIT Compilation
- Just-In-Time compilation that transforms recorded mathematical operations into optimized machine code for fast execution. See Wikipedia: Just-in-time compilation.
K
- Kernel
-
Compiled representation of a mathematical function that can be executed repeatedly with different input values. Created by the
AADCFunctionsclass.
L
- Lower Bound
- Binary search operation implemented in AADC for finding positions in sorted arrays, useful for interpolation and lookup operations.
M
- markAsInput()
- Method that designates a variable as a kernel input that can vary between executions and requires derivatives (sets IsRandom=true, IsDiff=true).
- markAsDiff()
- Method that designates a variable as needing derivatives but with fixed values during execution (sets IsRandom=false, IsDiff=true).
- markAsInputNoDiff()
- Method that designates a variable as varying between executions but not requiring derivatives (sets IsRandom=true, IsDiff=false).
- markAsOutput()
- Method that designates a variable as a function output, creating a handle for retrieving values and setting adjoint seeds.
- mmType
-
Template parameter specifying SIMD instruction set for vectorized execution (e.g.,
__m256dfor AVX2,__m512dfor AVX512).
P
- Passive Type
-
Native C++ data types (
double,bool,int64_t) that don’t participate in automatic differentiation or JIT compilation. - Primal
- The original function value computation, as opposed to derivative computation. “Faster than primal” refers to AADC’s ability to compute both function and derivatives faster than original code computes just function values.
R
- Recording Phase
-
Period between
startRecording()andstopRecording()when AADC captures the computational graph of mathematical operations. - Reverse Pass
- Execution of the reverse-mode automatic differentiation algorithm to compute derivatives via backpropagation through the computational graph.
- Random Variables
-
Variables with IsRandom=true that can have different values between kernel executions, typically marked with
markAsInput()ormarkAsInputNoDiff().
S
- SIMD
- Single Instruction, Multiple Data - parallel processing technique that performs the same operation on multiple data elements simultaneously. See Wikipedia: SIMD.
- Static Branch
- Conditional logic where the condition doesn’t depend on kernel inputs, allowing use of traditional if/else statements.
- Static Index
- Fixed array index that doesn’t depend on kernel inputs, can use native integer types.
- Stochastic Branch
-
Conditional logic where the condition depends on kernel inputs, requiring functional forms like
iIf()during recording. - Stochastic Variables
- Variables whose values can affect execution paths during kernel evaluation, requiring special handling for branches and conversions.
T
- Tape
- Data structure used in automatic differentiation to store intermediate values and operations needed for gradient computation.
- TestDriver
- AADC’s automated testing framework template that validates function compilation, execution, and automatic differentiation accuracy by comparing active type implementations against passive reference implementations using random inputs and finite difference gradient checking.
V
- Vectorization
- SIMD optimization that processes multiple values simultaneously, automatically applied by AADC for performance improvement. See Wikipedia: Vectorization.
W
- Workspace
-
Execution context (
AADCWorkSpace) that provides memory and state management for compiled kernels, including input values, intermediate variables, and adjoint values.
Note: This glossary covers core AADC concepts. For detailed implementation information, refer to the specific documentation sections for each topic.