# NVIDIA Comparison Summary

Generated from normalized artifacts under `artifacts/benchmarks/nvidia/`
using the tracked case registry in `benchmarks/nvidia/cases.json`.

## Provenance

- RoboWBC commit: `f1b940ac0f78c77252c18eb69b8d9f2f6effd3b5`
- Official upstream commit: `bc38f6d0ce6cab4589e025037ad0bfbab7ba73d8`
- Provider: `cpu`
- Host fingerprint: `runnervmeorf1 | Linux 6.17.0-1010-azure | x86_64 | AMD EPYC 9V74 80-Core Processor`

## Case Matrix

| Case ID | RoboWBC | Official NVIDIA | RoboWBC / Official (p50) | Why it matters |
|---------|---------|------------------|---------------------------|----------------|
| `gear_sonic_velocity/cold_start_tick` | p50 109.094 ms; p95 110.612 ms; hz n/a | p50 104.508 ms; p95 105.389 ms; hz n/a | 1.04x | If this row regresses, RoboWBC still pays a measurable planner cold-start tax before any DX win can matter. |
| `gear_sonic_velocity/warm_steady_state_tick` | p50 3.386 ms; p95 3.511 ms; hz n/a | p50 1.122 us; p95 1.503 us; hz n/a | 3017.58x | This is the steady-state path most likely to dominate the average control budget for locomotion. |
| `gear_sonic_velocity/replan_tick` | p50 3.159 ms; p95 3.264 ms; hz n/a | p50 103.969 ms; p95 105.310 ms; hz n/a | 0.03x | If replan ticks miss parity, the planner path needs attention before stronger NVIDIA comparison claims. |
| `gear_sonic_tracking/standing_placeholder_tick` | p50 3.070 ms; p95 3.148 ms; hz n/a | p50 3.023 ms; p95 3.197 ms; hz n/a | 1.02x | A tracking-path miss suggests the motion-reference contract is the real optimization target, not the planner path. |
| `decoupled_wbc/walk_predict` | p50 59.662 us; p95 59.866 us; hz n/a | p50 293.537 us; p95 340.694 us; hz n/a | 0.20x | This row captures the locomotion path people hit while actually moving, not the standing fallback. |
| `decoupled_wbc/balance_predict` | p50 59.936 us; p95 60.138 us; hz n/a | p50 291.428 us; p95 324.602 us; hz n/a | 0.21x | This row makes the command-magnitude model switch explicit instead of hiding it behind one average number. |
| `gear_sonic/end_to_end_cli_loop` | p50 3.726 ms; p95 4.153 ms; hz 48.632 Hz | p50 1.126 us; p95 105.738 ms; hz 26.911 Hz | 3308.94x | This row answers the operator-facing question: can the whole deployment loop hold the target frequency, not just one inference call? |
| `decoupled_wbc/end_to_end_cli_loop` | p50 268.500 us; p95 353.372 us; hz 49.720 Hz | p50 422.506 us; p95 568.290 us; hz 49.805 Hz | 0.64x | If the loop holds up here, the comparison story can move beyond one policy tick and toward deployable control loops. |

## Raw Artifacts

Each row above is backed by the paired normalized JSON artifacts below.

| Case ID | RoboWBC Artifact | Official Artifact |
|---------|------------------|-------------------|
| `gear_sonic_velocity/cold_start_tick` | `robowbc/gear_sonic_velocity__cold_start_tick.json` | `official/gear_sonic_velocity__cold_start_tick.json` |
| `gear_sonic_velocity/warm_steady_state_tick` | `robowbc/gear_sonic_velocity__warm_steady_state_tick.json` | `official/gear_sonic_velocity__warm_steady_state_tick.json` |
| `gear_sonic_velocity/replan_tick` | `robowbc/gear_sonic_velocity__replan_tick.json` | `official/gear_sonic_velocity__replan_tick.json` |
| `gear_sonic_tracking/standing_placeholder_tick` | `robowbc/gear_sonic_tracking__standing_placeholder_tick.json` | `official/gear_sonic_tracking__standing_placeholder_tick.json` |
| `decoupled_wbc/walk_predict` | `robowbc/decoupled_wbc__walk_predict.json` | `official/decoupled_wbc__walk_predict.json` |
| `decoupled_wbc/balance_predict` | `robowbc/decoupled_wbc__balance_predict.json` | `official/decoupled_wbc__balance_predict.json` |
| `gear_sonic/end_to_end_cli_loop` | `robowbc/gear_sonic__end_to_end_cli_loop.json` | `official/gear_sonic__end_to_end_cli_loop.json` |
| `decoupled_wbc/end_to_end_cli_loop` | `robowbc/decoupled_wbc__end_to_end_cli_loop.json` | `official/decoupled_wbc__end_to_end_cli_loop.json` |

## Rerun

```bash
python3 scripts/bench_robowbc_compare.py --all
python3 scripts/bench_nvidia_official.py --all
python3 scripts/render_nvidia_benchmark_summary.py --output artifacts/benchmarks/nvidia/SUMMARY.md
# or build the full static site bundle:
python3 scripts/build_site.py --output-dir /tmp/robowbc-site
```

If a future environment is missing models or build prerequisites, the wrappers will emit
blocked artifacts instead of silently substituting a different path.
