From naive loops to JIT compilation and AADC acceleration
Bump-and-revalue cost grows linearly; AAD stays constant
AAD computes ALL Greeks in constant time regardless of count
| Greeks | Bump Evaluations | AAD Evaluations | AAD Advantage |
|---|---|---|---|
| 3 | 4 | ~1.4 | 3x |
| 10 | 11 | ~1.4 | 8x |
| 50 | 51 | ~1.4 | 36x |
| 100 | 101 | ~1.4 | 72x |
Bump-and-revalue requires N+1 evaluations for N Greeks, while AAD computes all Greeks in ~1.3 evaluations (1 forward + ~0.3 adjoint overhead).
Requires N+1 evaluations for N Greeks. At 50 Greeks, NumPy needs 51 model evaluations.
Requires ~1.4 evaluations regardless of Greek count. One forward pass + one adjoint sweep.
AADC requires minimal changes to your existing Python code
Add AADC imports, wrap inputs as idouble, and call kernel recording APIs. Your model logic stays unchanged.
aadc modulespot = idouble(spot)kernel = aadc.record(...)kernel.greeks(['delta', 'rho', 'vega'])All benchmarks executed on enterprise-grade server hardware
| CPU | 2x Intel Xeon Platinum 8280L @ 2.70GHz |
| Cores | 56 physical (28 per socket), 112 threads |
| Architecture | x86_64, Cascade Lake |
| L3 Cache | 77 MiB (38.5 MiB per socket) |
| RAM | 283 GB DDR4 |
| OS | Linux kernel 6.1.0-13-amd64 (Debian) |
| Model | Asian Option Monte Carlo |
| Dynamics | Geometric Brownian Motion (GBM) |
| Timesteps | 252 (daily over 1 year) |
| Greeks | Delta, Rho, Vega (3 sensitivities) |
| Threads | 8 (configurable) |
| SIMD | AVX2 (4 doubles/instruction) |
| GCC | 12.2.0 (Debian) |
| Clang | 14.0.6 (Debian) |
| Python | 3.11.2 |
| NumPy | 1.26.x |
| AADC | 2.0.0 |