Deterministic mesh inertia
← All reportsV2 is bit-exact with the latest PR. The original atomic mesh-inertia kernels compiled with deterministic=RUN_TO_RUN now produced 0/262 drifting meshes across 20 reruns.
The 100x slowdown is gone. Latest PR #1355 reduced V2's summed per-mesh medians from 10,028 ms to 332 ms, a 30.2x speedup over the previous PR snapshot used in this report. V2 is now 1.8x V0 and 3.1x V3.
Current Same-Machine Results
| Variant | Reduction path | Run-to-run result | Median ms/call | Median p90 ms | Sum median ms | Relative sum |
|---|---|---|---|---|---|---|
| V0 Original atomic |
native unordered atomics | 262/262 drift | 0.49 | 0.51 | 186 | 1.8x V3 |
| V2 Original atomic + PR1355 RUN_TO_RUN |
deterministic atomic lowering | 0/262 drift | 1.22 | 1.25 | 332 | 3.1x V3 |
| V3 Current Newton tile_sum |
fixed-lane tile_sum | 0/262 drift | 0.38 | 0.40 | 105 | reference |
V0 and V2 use the original mesh inertia computation with wp.atomic_add; V2 differs by PR #1355 deterministic lowering. V3 is the current Newton implementation based on fixed-lane tile_sum reductions.
Harness
The V2 rerun uses the original atomic kernels with deterministic module options set at decoration time. That is the important part: setting wp.config.deterministic after the kernel module already exists is not enough to change an existing module.
@wp.kernel(module="unique", module_options={"deterministic": wp.DeterministicMode.RUN_TO_RUN}, enable_backward=False)
def atomic_solid_mesh_inertia(...):
...
wp.atomic_add(volume, 0, v)
wp.atomic_add(first, 0, f)
wp.atomic_add(second, 0, s)
What Changed
PR #1355 now includes the multi-component deterministic reduction work at de4674f30. The previous PR snapshot made V2 bit-exact but handled vec3 and mat33 atomics through a much slower generic path. The latest branch keeps the same run-to-run determinism and brings the mesh-like deterministic atomic probe down to 2.71 ms for 150k records.
| Records | Unordered atomics ms | RUN_TO_RUN atomics ms | tile_sum ms | RUN_TO_RUN / unordered | RUN_TO_RUN / tile_sum |
|---|---|---|---|---|---|
| 176 | 0.02 | 0.50 | 0.03 | 22.3x | 15.7x |
| 1,438 | 0.04 | 0.63 | 0.03 | 15.5x | 19.6x |
| 5,928 | 0.11 | 0.80 | 0.04 | 7.3x | 22.4x |
| 46,786 | 0.62 | 1.26 | 0.06 | 2.0x | 19.4x |
| 150,000 | 1.88 | 2.71 | 0.14 | 1.4x | 19.6x |
Runtime
V3 remains fastest for this Newton importer workload. V2 is useful because it validates that Warp's deterministic lowering can make the original atomic implementation bit-exact, but it still pays the deterministic ordering cost.
V0 Drift Plot
The V0 drift plot is generated from the 2026-06-13 V0 rerun. For each mesh, it plots the largest Frobenius norm difference in inertia tensor against the first rerun.
Current V0 drift is positive for all 262 meshes. The observed range is 6.57e-16 to 3.80e+05.
Per-Robot Breakdown
| Robot | Meshes | Triangles | V0 sum median ms | V2 sum median ms | V3 sum median ms | Drift counts |
|---|---|---|---|---|---|---|
| h1 | 21 | 286,408 | 11.6 | 28.1 3.3x V3 |
8.49 | V0 21/21, V2 0/21, V3 0/21 |
| g1_with_hands | 86 | 1,150,196 | 47.3 | 110 3.2x V3 |
34.5 | V0 86/86, V2 0/86, V3 0/86 |
| shadow_hand | 30 | 84,436 | 11.9 | 32.6 2.9x V3 |
11.1 | V0 30/30, V2 0/30, V3 0/30 |
| apptronik_apollo | 60 | 1,553,699 | 44.9 | 86.2 3.3x V3 |
26.3 | V0 60/60, V2 0/60, V3 0/60 |
| booster_t1 | 24 | 168,582 | 11.2 | 28.7 3.1x V3 |
9.23 | V0 24/24, V2 0/24, V3 0/24 |
| wonik_allegro | 21 | 32,916 | 35.1 | 21.8 2.8x V3 |
7.78 | V0 21/21, V2 0/21, V3 0/21 |
| ur5e | 20 | 121,783 | 24.4 | 23.7 3.0x V3 |
7.83 | V0 20/20, V2 0/20, V3 0/20 |
Reproducibility
Warp source: /home/horde/repos/warp-pr1355-local, PR #1355, 48b1927c5 Warp build: release, --use-dynamic-cuda, --use-libmathdx Newton source: /home/horde/repos/newton, main, 40fed42d Runner: /home/horde/repos/newton-mesh-inertia-investigation/tools/rerun_v2_mesh_inertia_pr1355.py Current data: deterministic-mesh-inertia/v0_current_atomic_pr1355_20260613.json deterministic-mesh-inertia/v2_latest_pr1355_20260613.json deterministic-mesh-inertia/v3_current_tile_sum_pr1355_20260613.json deterministic-mesh-inertia/determinism_overhead_probe_20260613.json Historical baseline: deterministic-mesh-inertia/results_20260610T184709.json