Release benchmark results

Speedup = baseline minimum / release minimum. Less than 1 means slower.

Package Workload Baseline (μs) Release (μs) Speedup Allocations (old → new)
au duration(Modified(), 0.04, cfs30, times30) 0.131 0.134 0.98× 0 → 0
au duration(0.04, cfs30) (periods 1:n) 0.136 0.131 1.04× 2 → 0
au duration(0.04, Cashflows30) 0.141 0.133 1.06× 2 → 0
au duration(Macaulay(), Periodic(0.04, 2), cfs30, times30) 0.071 0.071 1.00× 0 → 0
au convexity(Periodic(0.04, 2), cfs30, times30) 0.071 0.072 0.99× 0 → 0
au duration(DV01(), 0.04, cfs30, times30) 0.445 0.133 3.35× 8 → 0
au duration(DV01(), Continuous(0.04), cfs30, times30) 0.487 0.071 6.87× 8 → 0
au duration(curve, cfs30, times30) 0.711 0.326 2.18× 6 → 0
au duration(DV01(), curve, cfs30, times30) 1.050 0.327 3.21× 8 → 0
au convexity(curve, cfs30, times30) 1.121 0.327 3.43× 8 → 0
au duration(KeyRates, curve, cfs30, times30) 0.548 0.524 1.05× 5 → 4
au sensitivities(KeyRates, curve, cfs30, times30) 0.783 0.604 1.30× 15 → 10
au duration(IR01(), curve, credit, cfs30, times30) 1.558 0.489 3.19× 9 → 0
au convexity(curve, credit, cfs30, times30) 1.267 0.490 2.59× 11 → 0
au sensitivities(KeyRates, curve, credit, cfs30, times30) 1.292 0.735 1.76× 22 → 10
au duration(callback, curve) 0.651 0.356 1.83× 5 → 0
au convexity(callback, curve) 1.300 0.830 1.57× 10 → 0
au duration(callback, DV01(), curve) 1.296 0.347 3.74× 10 → 0
au duration(callback, IR01(), curve, credit) 4.679 1.050 4.46× 41 → 0
au sensitivities(callback, KeyRates, curve) 5.562 4.565 1.22× 47 → 29
au duration(Effective(), bond, curve) 17.667 0.323 54.78× 91 → 0
au duration(Effective(), floater, curve) 38.208 0.930 41.08× 119 → 0
au duration(Spread(), floater, curve) 38.250 0.792 48.32× 119 → 0
au convexity(Effective(), floater, curve) 2.403 1.950 1.23× 8 → 0
au sensitivities(KeyRates, bond, curve) 17.875 1.792 9.98× 90 → 28
au sensitivities(KeyRates, floater, curve, credit) 38.917 3.417 11.39× 118 → 28
au Hull-White key rates, 100 paths, 10y cashflows 1098.917 1346.208 0.82× 2800 → 1870
au irr(31 amounts) 0.493 0.493 1.00× 0 → 0
au wasserstein(1000 Float64, 1000 Float64) 15.500 15.375 1.01× 24 → 24
au wasserstein(1000 Int, 1000 Int; p = 2) 2.990 3.703 0.81× 8 → 8
fc pv(0.05, amounts30) (periods 1:n) 0.069 0.069 1.00× 0 → 0
fc pv(0.05, amounts30, times30) 0.245 0.077 3.18× 4 → 0
fc pv(Continuous(0.05), amounts30, times30) 0.243 0.077 3.16× 4 → 0
fc pv(Continuous(0.05), Cashflows30) 0.070 0.070 1.00× 0 → 0
fc pv(Continuous(0.05), Cashflows30, times30) 0.245 0.075 3.26× 4 → 0
fc pv(Continuous(0.05), Cashflow) 0.003 0.003 1.00× 0 → 0
fc discount(Periodic(0.05, 2), 3, 7.5) 0.003 0.003 1.00× 0 → 0
fc accumulation(Continuous(0.05), 3, 7.5) 0.003 0.003 1.00× 0 → 0
fc convert(Continuous(), Periodic(0.05, 2)) 0.002 0.002 1.00× 0 → 0
fc Cashflow + Cashflow (same time) 0.002 0.002 1.00× 0 → 0
fc irr(31 amounts) 0.493 0.493 1.00× 0 → 0
fm discount(Linear, 7.3) 0.009 0.010 0.94× 0 → 0
fm discount(Cubic, 7.3) 0.012 0.012 0.99× 0 → 0
fm discount(MonotoneConvex, 7.3) 0.012 0.012 0.98× 0 → 0
fm discount(NelsonSiegel, 7.3) 0.007 0.007 0.98× 0 → 0
fm zero(Linear, 7.3) 0.008 0.004 1.85× 0 → 0
fm forward(Linear, 2, 3) 0.014 0.015 0.94× 0 → 0
fm discount(Vasicek, 10) 0.007 0.009 0.75× 0 → 0
fm discount(CIR zero volatility, 10) 0.006 0.019 0.33× 0 → 0
fm discount(CIR, 10) 0.021 0.024 0.85× 0 → 0
fm discount(HullWhite, 7.3) 0.009 0.010 0.94× 0 → 0
fm discount(HullWhite, 2, 3, r) 0.052 0.030 1.74× 0 → 0
fm pv(Linear, 15y semiannual bond) 0.403 0.412 0.98× 0 → 0
fm pv(MonotoneConvex, 15y bond) 0.499 0.452 1.10× 0 → 0
fm pv(Linear, 30 amounts, times) 0.300 0.410 0.73× 2 → 0
fm pv floater on its index 0.874 0.758 1.15× 5 → 0
fm pv 10y swap on its index 3.203 1.967 1.63× 5 → 0
fm pv portfolio [bond, floater, swap] 7.052 3.375 2.09× 46 → 14
fm pv Composite(bond, floater) 1.850 1.192 1.55× 5 → 0
fm pv Forward(2, floater) 0.803 1.113 0.72× 5 → 0
fm pv FX.Converted(bond) 0.354 0.364 0.97× 0 → 0
fm pv FX.Forward 0.011 0.009 1.21× 0 → 0
fm pv BSM call 0.018 0.018 1.00× 0 → 0
fm pv Vasicek swaption 3.062 0.848 3.61× 2 → 3
fm pv HullWhite cap (3y quarterly) 0.558 0.531 1.05× 0 → 0
fm collect(15y bond) 0.165 0.189 0.87× 5 → 8
fm fit NelsonSiegel to 6 ZCB yields (LBFGS) 775.125 634.167 1.22× 25429 → 18560
fm fit BSM implied vol (Fminbox LBFGS) 24.250 23.667 1.02× 771 → 744
fm fit Linear, 12 CMT quotes (Newton) 806.125 405.125 1.99× 794 → 678
fm fit MonotoneConvex, 12 CMT quotes 2801.208 1284.167 2.18× 2524 → 1989
fm refit Linear, unchanged quotes 800.833 405.333 1.98× 794 → 676
fm refit Linear, 1bp 641.125 406.041 1.58× 690 → 676
fm bootstrap Linear, 12 CMT quotes 50.917 41.000 1.24× 996 → 1063
fm pv_mc Vasicek 10y ZCB, 200 scenarios 139.584 142.333 0.98× 1214 → 1614
mt survival(Gompertz, 40, 60) 0.165 0.012 14.10× 17 → 0
mt survival(Beard, 40, 50) (numerical cumhazard) 10.750 0.556 19.32× 1295 → 6
mt life_expectancy(Gompertz, 40) 72.625 5.090 14.27× 7719 → 6
mt life_expectancy(Makeham, 65) 27.041 1.867 14.49× 2957 → 5
mt life_expectancy(Weibull, 40) 33.417 2.551 13.10× 3726 → 6
mt life_expectancy(Kannisto, 80) 47.000 5.479 8.58× 5135 → 6
mt survival(1980 CSO ult, 40, 60) 0.003 0.003 1.00× 0 → 0
mt survival(1980 CSO ult, 40.5, 60.25, Uniform) 0.003 0.009 0.34× 0 → 0
mt life_expectancy(1980 CSO ult, 40) 0.560 0.021 26.10× 0 → 0
mt decrement(1980 CSO ult, 40, 60) 0.003 0.003 1.00× 0 → 0
mt load table 1980 CSO (XTbML) 3.781 3.713 1.02× 73 → 72
mt parse uncached XTbML ultimate 144.125 60.541 2.38× 3252 → 2758
mt parse uncached XTbML select and ultimate 26905.583 1242.250 21.66× 78720 → 65924