Refresh the benchmark and performance surface across the repo. This updates the benchmark wrappers and helper scripts, regenerates the checked-in benchmark and perf-contract artifacts, and folds in the related roadmap, compatibility, and example notebook changes that belong with this performance-focused pass. Harden the Python CI and local pre-push flow so the same checks pass reliably in both places. The workflow and pre-push script now use module-safe uv typecheck invocations, the Python test environment installs the optional MCP dependency needed by the MCP server tests, and one-off root benchmark outputs are ignored to keep the repo clean. Align local tooling with the current project configuration by updating the Ruff pre-commit hook, tightening the API typing and MCP server helpers, and refreshing the lockfile to pick up the audited PyJWT fix while preserving the rest of the staged source changes.
1163 lines
30 KiB
JSON
1163 lines
30 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"command": "python benchmarks/bench_derivatives_compare.py --sizes 1000 10000 --accuracy-size 512 --json benchmarks/artifacts/latest/benchmark_derivatives_compare.json",
|
|
"n_warmup": 1,
|
|
"n_runs": 7,
|
|
"accuracy_size": 512,
|
|
"sizes": [
|
|
1000,
|
|
10000
|
|
],
|
|
"metadata": {
|
|
"suite": "benchmark_derivatives_compare",
|
|
"runtime": {
|
|
"generated_at_utc": "2026-03-24T05:39:25.642936+00:00",
|
|
"python_version": "3.13.5",
|
|
"python_implementation": "CPython",
|
|
"python_executable": "/Users/pratikbhadane/Work/Projects/ferro-ta/.venv/bin/python3",
|
|
"platform": "macOS-26.3.1-arm64-arm-64bit-Mach-O",
|
|
"system": "Darwin",
|
|
"release": "25.3.0",
|
|
"machine": "arm64",
|
|
"processor": "arm",
|
|
"cpu_model": "Apple M3 Max",
|
|
"cpu_count_logical": 14,
|
|
"total_memory_bytes": 38654705664
|
|
},
|
|
"git": {
|
|
"commit": "0382c4e3024c96809ffd89dd76d820efcd56479d",
|
|
"dirty": true,
|
|
"branch": "main"
|
|
},
|
|
"build": {
|
|
"rustc": "rustc 1.91.1 (ed61e7d7e 2025-11-07) (Homebrew)\nbinary: rustc\ncommit-hash: ed61e7d7e242494fb7057f2657300d9e77bb4fcb\ncommit-date: 2025-11-07\nhost: aarch64-apple-darwin\nrelease: 1.91.1\nLLVM version: 21.1.5",
|
|
"cargo": "cargo 1.91.1 (Homebrew)",
|
|
"cargo_release_profile": {
|
|
"lto": true,
|
|
"codegen-units": 1
|
|
},
|
|
"rustflags": null,
|
|
"cargo_build_rustflags": null,
|
|
"maturin_flags": null
|
|
},
|
|
"packages": {
|
|
"numpy": "2.2.6",
|
|
"ferro-ta": "1.0.3",
|
|
"py_vollib": null
|
|
},
|
|
"dataset": {
|
|
"generator": "synthetic_option_chain",
|
|
"speed_sizes": [
|
|
1000,
|
|
10000
|
|
],
|
|
"accuracy_size": 512,
|
|
"dtype": "float64",
|
|
"array_layout": "C-contiguous",
|
|
"seed": 42,
|
|
"ranges": {
|
|
"spot": [
|
|
80.0,
|
|
120.0
|
|
],
|
|
"strike": [
|
|
70.0,
|
|
130.0
|
|
],
|
|
"rate": [
|
|
0.0,
|
|
0.07
|
|
],
|
|
"carry": [
|
|
0.0,
|
|
0.03
|
|
],
|
|
"time_to_expiry_years": [
|
|
0.019178082191780823,
|
|
2.0
|
|
],
|
|
"volatility": [
|
|
0.08,
|
|
0.65
|
|
]
|
|
}
|
|
},
|
|
"methodology": {
|
|
"warmup_runs": 1,
|
|
"measured_runs": 7,
|
|
"reported_metric": "median_ms",
|
|
"speed_metric": "contracts_per_second",
|
|
"accuracy_reference": "Scalar analytical Black-Scholes-Merton and Black-76 formulas using math.erf; IV accuracy is measured as repriced error from the recovered volatility because direct volatility differences can be unstable on low-vega contracts.",
|
|
"input_layout_notes": "Benchmarks use contiguous float64 arrays. If your workload passes non-contiguous arrays or mixed dtypes, benchmark that path separately.",
|
|
"allocation_notes": "python_peak_allocation_bytes is a tracemalloc snapshot of Python-tracked allocations only; it does not measure native RSS.",
|
|
"provider_notes": "reference_python_loop and py_vollib are scalar baselines and are size-capped in the speed table to keep runtime reasonable."
|
|
},
|
|
"providers": [
|
|
{
|
|
"name": "ferro_ta",
|
|
"kind": "project",
|
|
"note": "Rust-backed vectorized implementation.",
|
|
"max_speed_size": null,
|
|
"supported_cases": [
|
|
"bsm_call_price",
|
|
"bsm_call_iv",
|
|
"bsm_call_greeks",
|
|
"black76_call_price"
|
|
]
|
|
},
|
|
{
|
|
"name": "reference_numpy",
|
|
"kind": "reference",
|
|
"note": "Pure NumPy analytical formulas with vectorized IV bisection.",
|
|
"max_speed_size": null,
|
|
"supported_cases": [
|
|
"bsm_call_price",
|
|
"bsm_call_iv",
|
|
"bsm_call_greeks",
|
|
"black76_call_price"
|
|
]
|
|
},
|
|
{
|
|
"name": "reference_python_loop",
|
|
"kind": "reference",
|
|
"note": "Scalar math-loop analytical baseline; useful for accuracy sanity checks.",
|
|
"max_speed_size": 1000,
|
|
"supported_cases": [
|
|
"bsm_call_price",
|
|
"bsm_call_iv",
|
|
"bsm_call_greeks",
|
|
"black76_call_price"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"accuracy": {
|
|
"summary": [
|
|
{
|
|
"case": "bsm_call_price",
|
|
"best_provider": "reference_python_loop",
|
|
"best_max_abs_error": 0.0,
|
|
"worst_provider": "ferro_ta",
|
|
"worst_max_abs_error": 1.6274806e-05
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"best_provider": "reference_python_loop",
|
|
"best_max_abs_error": 1e-10,
|
|
"worst_provider": "reference_numpy",
|
|
"worst_max_abs_error": 1.6276264e-05
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"best_provider": "reference_python_loop",
|
|
"best_max_abs_error": 0.0,
|
|
"worst_provider": "ferro_ta",
|
|
"worst_max_abs_error": 1.7335858e-05
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"best_provider": "reference_python_loop",
|
|
"best_max_abs_error": 0.0,
|
|
"worst_provider": "ferro_ta",
|
|
"worst_max_abs_error": 1.6274806e-05
|
|
}
|
|
],
|
|
"results": [
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 1.6274806e-05,
|
|
"mean_abs_error": 5.249347e-06,
|
|
"rmse": 6.48942e-06,
|
|
"max_rel_error": 0.009546518154
|
|
},
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 1.6274806e-05,
|
|
"mean_abs_error": 5.249347e-06,
|
|
"rmse": 6.48942e-06,
|
|
"max_rel_error": 0.009546518154
|
|
},
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 0.0,
|
|
"mean_abs_error": 0.0,
|
|
"rmse": 0.0,
|
|
"max_rel_error": 0.0
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"sample_size": 512,
|
|
"accuracy_target": "reconstructed_price",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 1.6275836e-05,
|
|
"mean_abs_error": 5.249474e-06,
|
|
"rmse": 6.489527e-06,
|
|
"max_rel_error": 0.475843909884
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "reconstructed_price",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 1.6276264e-05,
|
|
"mean_abs_error": 5.249487e-06,
|
|
"rmse": 6.489634e-06,
|
|
"max_rel_error": 0.009628987742
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "reconstructed_price",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 1e-10,
|
|
"mean_abs_error": 4.5e-11,
|
|
"rmse": 5.3e-11,
|
|
"max_rel_error": 0.00547208151
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512,
|
|
5
|
|
],
|
|
"max_abs_error": 1.7335858e-05,
|
|
"mean_abs_error": 8.64081e-07,
|
|
"rmse": 2.444399e-06,
|
|
"max_rel_error": 0.002644156321,
|
|
"component_names": [
|
|
"delta",
|
|
"gamma",
|
|
"vega",
|
|
"theta",
|
|
"rho"
|
|
]
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512,
|
|
5
|
|
],
|
|
"max_abs_error": 1.7335858e-05,
|
|
"mean_abs_error": 8.64081e-07,
|
|
"rmse": 2.444399e-06,
|
|
"max_rel_error": 0.002644156321,
|
|
"component_names": [
|
|
"delta",
|
|
"gamma",
|
|
"vega",
|
|
"theta",
|
|
"rho"
|
|
]
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512,
|
|
5
|
|
],
|
|
"max_abs_error": 0.0,
|
|
"mean_abs_error": 0.0,
|
|
"rmse": 0.0,
|
|
"max_rel_error": 0.0,
|
|
"component_names": [
|
|
"delta",
|
|
"gamma",
|
|
"vega",
|
|
"theta",
|
|
"rho"
|
|
]
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 1.6274806e-05,
|
|
"mean_abs_error": 5.249347e-06,
|
|
"rmse": 6.48942e-06,
|
|
"max_rel_error": 0.009546518154
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 1.6274806e-05,
|
|
"mean_abs_error": 5.249347e-06,
|
|
"rmse": 6.48942e-06,
|
|
"max_rel_error": 0.009546518154
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"sample_size": 512,
|
|
"accuracy_target": "expected_output",
|
|
"output_shape": [
|
|
512
|
|
],
|
|
"max_abs_error": 0.0,
|
|
"mean_abs_error": 0.0,
|
|
"rmse": 0.0,
|
|
"max_rel_error": 0.0
|
|
}
|
|
]
|
|
},
|
|
"speed": {
|
|
"summary": [
|
|
{
|
|
"case": "bsm_call_price",
|
|
"size": 1000,
|
|
"fastest_provider": "ferro_ta",
|
|
"fastest_median_ms": 0.0336,
|
|
"ranking": [
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 0.0336,
|
|
"contracts_per_s": 29761904.76
|
|
},
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 0.0456,
|
|
"contracts_per_s": 21929824.56
|
|
},
|
|
{
|
|
"provider": "reference_python_loop",
|
|
"median_ms": 0.8157,
|
|
"contracts_per_s": 1225940.91
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"case": "bsm_call_price",
|
|
"size": 10000,
|
|
"fastest_provider": "ferro_ta",
|
|
"fastest_median_ms": 0.2752,
|
|
"ranking": [
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 0.2752,
|
|
"contracts_per_s": 36337209.3
|
|
},
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 0.3109,
|
|
"contracts_per_s": 32164683.18
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"size": 1000,
|
|
"fastest_provider": "ferro_ta",
|
|
"fastest_median_ms": 0.4121,
|
|
"ranking": [
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 0.4121,
|
|
"contracts_per_s": 2426595.49
|
|
},
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 1.8036,
|
|
"contracts_per_s": 554446.66
|
|
},
|
|
{
|
|
"provider": "reference_python_loop",
|
|
"median_ms": 13.4274,
|
|
"contracts_per_s": 74474.58
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"size": 10000,
|
|
"fastest_provider": "ferro_ta",
|
|
"fastest_median_ms": 4.0739,
|
|
"ranking": [
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 4.0739,
|
|
"contracts_per_s": 2454650.34
|
|
},
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 11.7949,
|
|
"contracts_per_s": 847824.06
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"size": 1000,
|
|
"fastest_provider": "ferro_ta",
|
|
"fastest_median_ms": 0.0497,
|
|
"ranking": [
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 0.0497,
|
|
"contracts_per_s": 20120724.35
|
|
},
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 0.0871,
|
|
"contracts_per_s": 11481056.26
|
|
},
|
|
{
|
|
"provider": "reference_python_loop",
|
|
"median_ms": 1.189,
|
|
"contracts_per_s": 841042.89
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"size": 10000,
|
|
"fastest_provider": "reference_numpy",
|
|
"fastest_median_ms": 0.572,
|
|
"ranking": [
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 0.572,
|
|
"contracts_per_s": 17482517.48
|
|
},
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 0.7486,
|
|
"contracts_per_s": 13358268.77
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"size": 1000,
|
|
"fastest_provider": "ferro_ta",
|
|
"fastest_median_ms": 0.0254,
|
|
"ranking": [
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 0.0254,
|
|
"contracts_per_s": 39370078.74
|
|
},
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 0.0384,
|
|
"contracts_per_s": 26041666.67
|
|
},
|
|
{
|
|
"provider": "reference_python_loop",
|
|
"median_ms": 0.7358,
|
|
"contracts_per_s": 1359064.96
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"size": 10000,
|
|
"fastest_provider": "ferro_ta",
|
|
"fastest_median_ms": 0.2184,
|
|
"ranking": [
|
|
{
|
|
"provider": "ferro_ta",
|
|
"median_ms": 0.2184,
|
|
"contracts_per_s": 45787545.79
|
|
},
|
|
{
|
|
"provider": "reference_numpy",
|
|
"median_ms": 0.2823,
|
|
"contracts_per_s": 35423308.54
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"results": [
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"size": 1000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 0.0336,
|
|
"contracts_per_s": 29761904.76,
|
|
"runs_ms": [
|
|
0.0337,
|
|
0.0404,
|
|
0.0336,
|
|
0.033,
|
|
0.0332,
|
|
0.0329,
|
|
0.0361
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.0336,
|
|
"mean_ms": 0.0347,
|
|
"min_ms": 0.0329,
|
|
"max_ms": 0.0404,
|
|
"stddev_ms": 0.0027,
|
|
"cv_pct": 7.901
|
|
},
|
|
"python_peak_allocation_bytes": 17861,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"size": 1000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.0456,
|
|
"contracts_per_s": 21929824.56,
|
|
"runs_ms": [
|
|
0.0468,
|
|
0.0456,
|
|
0.0483,
|
|
0.045,
|
|
0.0548,
|
|
0.0452,
|
|
0.0449
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.0456,
|
|
"mean_ms": 0.0472,
|
|
"min_ms": 0.0449,
|
|
"max_ms": 0.0548,
|
|
"stddev_ms": 0.0036,
|
|
"cv_pct": 7.526
|
|
},
|
|
"python_peak_allocation_bytes": 115672,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"size": 1000,
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.8157,
|
|
"contracts_per_s": 1225940.91,
|
|
"runs_ms": [
|
|
0.8154,
|
|
0.8078,
|
|
0.8184,
|
|
0.8265,
|
|
0.8157,
|
|
0.8155,
|
|
0.8267
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.8157,
|
|
"mean_ms": 0.818,
|
|
"min_ms": 0.8078,
|
|
"max_ms": 0.8267,
|
|
"stddev_ms": 0.0067,
|
|
"cv_pct": 0.82
|
|
},
|
|
"python_peak_allocation_bytes": 39464,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"size": 10000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 0.2752,
|
|
"contracts_per_s": 36337209.3,
|
|
"runs_ms": [
|
|
0.2632,
|
|
0.2812,
|
|
0.2666,
|
|
0.2666,
|
|
0.281,
|
|
0.2752,
|
|
0.276
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.2752,
|
|
"mean_ms": 0.2728,
|
|
"min_ms": 0.2632,
|
|
"max_ms": 0.2812,
|
|
"stddev_ms": 0.0073,
|
|
"cv_pct": 2.684
|
|
},
|
|
"python_peak_allocation_bytes": 17861,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_price",
|
|
"label": "BSM Call Price",
|
|
"size": 10000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.3109,
|
|
"contracts_per_s": 32164683.18,
|
|
"runs_ms": [
|
|
0.304,
|
|
0.315,
|
|
0.3261,
|
|
0.309,
|
|
0.3218,
|
|
0.3109,
|
|
0.3084
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.3109,
|
|
"mean_ms": 0.3136,
|
|
"min_ms": 0.304,
|
|
"max_ms": 0.3261,
|
|
"stddev_ms": 0.0079,
|
|
"cv_pct": 2.515
|
|
},
|
|
"python_peak_allocation_bytes": 1132672,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"size": 1000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 0.4121,
|
|
"contracts_per_s": 2426595.49,
|
|
"runs_ms": [
|
|
0.4309,
|
|
0.4121,
|
|
0.4068,
|
|
0.418,
|
|
0.4082,
|
|
0.4285,
|
|
0.4093
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.4121,
|
|
"mean_ms": 0.4163,
|
|
"min_ms": 0.4068,
|
|
"max_ms": 0.4309,
|
|
"stddev_ms": 0.0099,
|
|
"cv_pct": 2.378
|
|
},
|
|
"python_peak_allocation_bytes": 20709,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"size": 1000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 1.8036,
|
|
"contracts_per_s": 554446.66,
|
|
"runs_ms": [
|
|
1.8522,
|
|
1.8036,
|
|
1.8552,
|
|
1.7976,
|
|
1.7981,
|
|
1.8119,
|
|
1.7963
|
|
],
|
|
"stats": {
|
|
"median_ms": 1.8036,
|
|
"mean_ms": 1.8164,
|
|
"min_ms": 1.7963,
|
|
"max_ms": 1.8552,
|
|
"stddev_ms": 0.026,
|
|
"cv_pct": 1.434
|
|
},
|
|
"python_peak_allocation_bytes": 149448,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"size": 1000,
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"median_ms": 13.4274,
|
|
"contracts_per_s": 74474.58,
|
|
"runs_ms": [
|
|
13.4787,
|
|
13.4274,
|
|
13.4138,
|
|
13.4148,
|
|
13.4643,
|
|
13.6664,
|
|
13.3763
|
|
],
|
|
"stats": {
|
|
"median_ms": 13.4274,
|
|
"mean_ms": 13.4631,
|
|
"min_ms": 13.3763,
|
|
"max_ms": 13.6664,
|
|
"stddev_ms": 0.0959,
|
|
"cv_pct": 0.712
|
|
},
|
|
"python_peak_allocation_bytes": 39584,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"size": 10000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 4.0739,
|
|
"contracts_per_s": 2454650.34,
|
|
"runs_ms": [
|
|
4.0739,
|
|
4.0792,
|
|
3.9101,
|
|
4.0077,
|
|
4.2279,
|
|
4.076,
|
|
3.9563
|
|
],
|
|
"stats": {
|
|
"median_ms": 4.0739,
|
|
"mean_ms": 4.0473,
|
|
"min_ms": 3.9101,
|
|
"max_ms": 4.2279,
|
|
"stddev_ms": 0.1032,
|
|
"cv_pct": 2.549
|
|
},
|
|
"python_peak_allocation_bytes": 82830,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_iv",
|
|
"label": "BSM Call IV Recovery",
|
|
"size": 10000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 11.7949,
|
|
"contracts_per_s": 847824.06,
|
|
"runs_ms": [
|
|
11.713,
|
|
11.7014,
|
|
11.8743,
|
|
11.7949,
|
|
11.4815,
|
|
11.8635,
|
|
11.8188
|
|
],
|
|
"stats": {
|
|
"median_ms": 11.7949,
|
|
"mean_ms": 11.7496,
|
|
"min_ms": 11.4815,
|
|
"max_ms": 11.8743,
|
|
"stddev_ms": 0.1359,
|
|
"cv_pct": 1.157
|
|
},
|
|
"python_peak_allocation_bytes": 1463448,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"size": 1000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 0.0497,
|
|
"contracts_per_s": 20120724.35,
|
|
"runs_ms": [
|
|
0.0558,
|
|
0.0497,
|
|
0.0486,
|
|
0.0503,
|
|
0.051,
|
|
0.0494,
|
|
0.0486
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.0497,
|
|
"mean_ms": 0.0505,
|
|
"min_ms": 0.0486,
|
|
"max_ms": 0.0558,
|
|
"stddev_ms": 0.0025,
|
|
"cv_pct": 4.902
|
|
},
|
|
"python_peak_allocation_bytes": 41928,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"size": 1000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.0871,
|
|
"contracts_per_s": 11481056.26,
|
|
"runs_ms": [
|
|
0.0883,
|
|
0.0871,
|
|
0.0876,
|
|
0.0871,
|
|
0.0868,
|
|
0.0864,
|
|
0.1533
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.0871,
|
|
"mean_ms": 0.0967,
|
|
"min_ms": 0.0864,
|
|
"max_ms": 0.1533,
|
|
"stddev_ms": 0.025,
|
|
"cv_pct": 25.847
|
|
},
|
|
"python_peak_allocation_bytes": 138128,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"size": 1000,
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"median_ms": 1.189,
|
|
"contracts_per_s": 841042.89,
|
|
"runs_ms": [
|
|
1.243,
|
|
1.3353,
|
|
1.189,
|
|
1.1827,
|
|
1.1821,
|
|
1.1827,
|
|
1.2165
|
|
],
|
|
"stats": {
|
|
"median_ms": 1.189,
|
|
"mean_ms": 1.2188,
|
|
"min_ms": 1.1821,
|
|
"max_ms": 1.3353,
|
|
"stddev_ms": 0.0563,
|
|
"cv_pct": 4.619
|
|
},
|
|
"python_peak_allocation_bytes": 199408,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"size": 10000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 0.7486,
|
|
"contracts_per_s": 13358268.77,
|
|
"runs_ms": [
|
|
0.7306,
|
|
0.7328,
|
|
0.7688,
|
|
0.732,
|
|
0.7792,
|
|
0.7486,
|
|
0.8081
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.7486,
|
|
"mean_ms": 0.7572,
|
|
"min_ms": 0.7306,
|
|
"max_ms": 0.8081,
|
|
"stddev_ms": 0.0295,
|
|
"cv_pct": 3.897
|
|
},
|
|
"python_peak_allocation_bytes": 401848,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "bsm_call_greeks",
|
|
"label": "BSM Call Greeks",
|
|
"size": 10000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.572,
|
|
"contracts_per_s": 17482517.48,
|
|
"runs_ms": [
|
|
0.6104,
|
|
0.5705,
|
|
0.5715,
|
|
0.5817,
|
|
0.572,
|
|
0.5747,
|
|
0.5708
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.572,
|
|
"mean_ms": 0.5788,
|
|
"min_ms": 0.5705,
|
|
"max_ms": 0.6104,
|
|
"stddev_ms": 0.0145,
|
|
"cv_pct": 2.499
|
|
},
|
|
"python_peak_allocation_bytes": 1362128,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"size": 1000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 0.0254,
|
|
"contracts_per_s": 39370078.74,
|
|
"runs_ms": [
|
|
0.0286,
|
|
0.0263,
|
|
0.0258,
|
|
0.0254,
|
|
0.0253,
|
|
0.0253,
|
|
0.0254
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.0254,
|
|
"mean_ms": 0.026,
|
|
"min_ms": 0.0253,
|
|
"max_ms": 0.0286,
|
|
"stddev_ms": 0.0012,
|
|
"cv_pct": 4.639
|
|
},
|
|
"python_peak_allocation_bytes": 14717,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"size": 1000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.0384,
|
|
"contracts_per_s": 26041666.67,
|
|
"runs_ms": [
|
|
0.0395,
|
|
0.0385,
|
|
0.0387,
|
|
0.0383,
|
|
0.0384,
|
|
0.0382,
|
|
0.0383
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.0384,
|
|
"mean_ms": 0.0385,
|
|
"min_ms": 0.0382,
|
|
"max_ms": 0.0395,
|
|
"stddev_ms": 0.0005,
|
|
"cv_pct": 1.22
|
|
},
|
|
"python_peak_allocation_bytes": 99448,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"size": 1000,
|
|
"provider": "reference_python_loop",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.7358,
|
|
"contracts_per_s": 1359064.96,
|
|
"runs_ms": [
|
|
0.7271,
|
|
0.7251,
|
|
0.845,
|
|
0.7809,
|
|
0.7345,
|
|
0.7358,
|
|
0.7418
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.7358,
|
|
"mean_ms": 0.7558,
|
|
"min_ms": 0.7251,
|
|
"max_ms": 0.845,
|
|
"stddev_ms": 0.0436,
|
|
"cv_pct": 5.769
|
|
},
|
|
"python_peak_allocation_bytes": 39416,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"size": 10000,
|
|
"provider": "ferro_ta",
|
|
"provider_kind": "project",
|
|
"median_ms": 0.2184,
|
|
"contracts_per_s": 45787545.79,
|
|
"runs_ms": [
|
|
0.2286,
|
|
0.2183,
|
|
0.219,
|
|
0.2184,
|
|
0.2223,
|
|
0.218,
|
|
0.2176
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.2184,
|
|
"mean_ms": 0.2203,
|
|
"min_ms": 0.2176,
|
|
"max_ms": 0.2286,
|
|
"stddev_ms": 0.004,
|
|
"cv_pct": 1.8
|
|
},
|
|
"python_peak_allocation_bytes": 14717,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
},
|
|
{
|
|
"case": "black76_call_price",
|
|
"label": "Black-76 Call Price",
|
|
"size": 10000,
|
|
"provider": "reference_numpy",
|
|
"provider_kind": "reference",
|
|
"median_ms": 0.2823,
|
|
"contracts_per_s": 35423308.54,
|
|
"runs_ms": [
|
|
0.2823,
|
|
0.276,
|
|
0.275,
|
|
0.3064,
|
|
0.3196,
|
|
0.2835,
|
|
0.2734
|
|
],
|
|
"stats": {
|
|
"median_ms": 0.2823,
|
|
"mean_ms": 0.288,
|
|
"min_ms": 0.2734,
|
|
"max_ms": 0.3196,
|
|
"stddev_ms": 0.0179,
|
|
"cv_pct": 6.201
|
|
},
|
|
"python_peak_allocation_bytes": 972448,
|
|
"input_layout": {
|
|
"dtype": "float64",
|
|
"contiguous": true
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|