Repository navigation
·
13 commits
to main
since this release
What's New
Faster recording and adjoint sweeps
- Recording passes the multiplier through sums, differences and negations, so higher-order types build fewer nested products
std::complex<AReal>arithmetic records fewer tape statements- The adjoint sweep visits each statement's operands last to first, and chunk crossings stay out of the hot path in recording and in the sweep
- Faster forward mode: packed masking of zero tangents, one reciprocal per vector division, larger
FRealoperands held by reference - Higher-order tapes over
FRealwrite their partials straight into the tape
New and improved tape options
XAD_COPY_ELISION(new, off by default): copies share the slot of their source and record nothing; see the Build Options page for the supported useXAD_REDUCED_MEMORY,XAD_SKIP_ZERO_PARTIALS,XAD_TAPE_TRACK_LIVE_SLOTS,XAD_OUTLINE_RECORDING,XAD_TAPE_REUSE_SLOTS,XAD_LINEAR_SLOTS,XAD_HUGE_PAGES,XAD_TLS_INITIAL_EXECandXAD_SHARED_LIBSare new or improved since 2.0.0- New Build Options page: what each performance-related option does, when it helps, and starting sets per kind of workload
Direct mode, samples and fixes
- Direct mode types (
ARealDirect,FRealDirect) are drop-in replacements forAReal/FReal - New samples: SIR calibration, Nelson-Siegel curve fit, projectile aiming, Eigen decompositions
- Many fixes in tape chunk handling, checkpointing,
resetTo, JIT recording, Eigen and libc++ compatibility
Upgrade notes
- Expression types defined outside XAD (deriving from
xad::Expression) needcalc_derivatives(info, tape)andcalc_derivatives(info, tape, detail::minus_unit)overloads - Forward-mode expressions over larger
FRealtypes hold their operands by reference: don't keep one past its full expression std::numeric_limits<T>::is_iec559isfalsefor active types
See the CHANGELOG for the full list.
If XAD helps you, a GitHub star helps others find it