# Round 9 — cold full-view speed below one second ## Result The final candidate averages **0.992 s** for the direct cold W8 full-payload run, versus **1.184 s** for the local `16612ac` executable: **191.5 ms (16.2%) faster**. The two new runs were 1.001 s and 0.983 s; the mean is under one second, with one sample 1 ms over. Both old runs generated all 2,226 tiles and the complete 110.90 MiB payload with zero mesh-cache hits. This comparison uses the required arguments and old/new interleave: `--stream-benchmark --shape-world --force-generate --workers=8 --clip-radius=3` | Order | Executable | Process wall | Full clipmap | Shape stage | Cache hits | | --- | --- | ---: | ---: | ---: | ---: | | old A | `VoxelForgeRound9Base16612ac.exe` | 1.217 s | 0.582 s | 457.1 ms | 0 / 2,226 | | new A | `VoxelForgeRound9Final.exe` | 1.001 s | 0.492 s | 410.9 ms | 0 / 2,226 | | new B | `VoxelForgeRound9Final.exe` | 0.983 s | 0.488 s | 414.4 ms | 0 / 2,226 | | old B | `VoxelForgeRound9Base16612ac.exe` | 1.150 s | 0.577 s | 477.5 ms | 0 / 2,226 | The interleaved means are **1.1835 s old** and **0.9920 s new**. The owner’s earlier 16612ac measurement was 1.092/1.098 s; that absolute did not reproduce in this local run, while the final candidate still averaged below one second. Raw logs: [old A](../round9_final_ab_oldA_w8.stdout.log), [new A](../round9_final_ab_newA_w8.stdout.log), [new B](../round9_final_ab_newB_w8.stdout.log), [old B](../round9_final_ab_oldB_w8.stdout.log). A separate third cold run of the new executable measured **1.005 s**. Its shape stage took **397.7 ms** (42.6 ms local shapes, 95.9 ms intervals/signs, 206.4 ms surface band, and 43.8 ms far parents), and full clipmap took **469 ms**. The remaining **138 ms** is the derived startup/setup/finalization remainder for that run. The separate repeat is [here](../round9_final_repeat_c_w8.stdout.log), with its BelowNormal/affinity wrapper record [here](../round9_final_repeat_c_w8.runner.log). Across the three new-only samples, the mean is **0.996 s**; the required old/new paired comparison above remains the primary head-to-head result. All builds used `/MP8`; benchmark, audit, and capture children ran BelowNormal on affinity `0xFF00`. The final build is [round9_final_build_packed_x8.log](../round9_final_build_packed_x8.log). It completed with the existing C4838 conversion warnings and `vswhere.exe` setup diagnostic. The build script applies `/arch:AVX2 /fp:precise`; this remains the canonical path without runtime dispatch or FMA contraction. ## What changed - The existing AVX2 eight-candidate path evaluates effective rock distances and primitive shapes along Z. Retained per-worker interval scratch and 16-line scheduling reduce the packed sign work. - The mesher classifies eight contiguous X cells at once with AVX2 compares and movemasks. It calculates edge interpolation values only for surface cells. - The packed interval pass now fills the Z candidate mask while it solves each Z line. Candidate-band construction no longer solves those same primitive/line intersections a second time. The completed Z mask moves directly into `CandidateWords`; retained candidate-axis allocation drops from 55.06 MiB to 36.71 MiB. - The dominant new gain is an eight-sample packed-density row path for fine tiles. It shares X/Y/Z lattice indexing across adjacent X samples and reads the standalone shape-world SoA arrays directly. It falls back to the scalar path for out-of-bounds samples, edit brushes, forced-air samples, shared grids, and pre-edit captures. Results remain bit-identical. The paired profiles show the interval/sign stage falling from about **140.1 ms** on the 16612ac executable to **96.7 ms** in the final direct runs. The final detail-band wall is about **218.9 ms**, and far-parent construction is about **48.0 ms**. The shape-stage mean is **412.6 ms**, down from **467.3 ms** in these same direct runs. Full clipmap wall falls from **579.5 ms** to **490 ms**. The detailed final profile records 9.389 million distance evaluations and 3.527 million detail-noise evaluations. Sampled worker costs are 65.2 ns per distance evaluation and 338.2 ns per detail evaluation; the detail band takes 217.7 ms wall time. Its sampled subcosts are 83.9 ns for relief, 26.9 ns for layer lookup, and 99.8 ns for owner roughness. The sampling rates are 1/256 for distance and 1/64 for detail. The full profile is [here](../round9_final_profile_detail_w8.stdout.log). | Tile profile | Before X batching | Final X batching | Change | | --- | ---: | ---: | ---: | | LOD0 density grid, 512 tiles | 268.6 ms | 100.9 ms | -62.4% | | LOD1 density grid, 448 tiles | 234.5 ms | 91.4 ms | -61.0% | | LOD8 density grid, 306 tiles | 122.3 ms | 120.7 ms | no material change | The LOD0/1 profile logs are [final LOD0](../round9_final_profile_lod0_w8.stdout.log) and [final LOD1](../round9_final_profile_lod1_w8.stdout.log). The [LOD8 profile](../round9_final_profile_lod8_w8.stdout.log) confirms the remaining far density cost. Overall LOD8 tile work is about 396.5 ms in the isolated serialized tile benchmark; its stream worker sum is parallelized across the full run. After subtracting shape-stage and full-clipmap wall from direct process wall, the remaining startup/setup/finalization portion is about **89 ms** on average. This is a derived remainder, not a separately instrumented timer. ## Experiments kept and rejected | Experiment | Evidence | Decision | | --- | --- | --- | | Reuse packed Z intervals for candidate bands | Axis work falls from about 69–76 ms to 51 ms wall; interval/sign stage falls about 20 ms; W8 hashes stay exact. Candidate-axis storage falls 18.35 MiB. | Keep | | Batch fine packed density rows across X | LOD0/1 density-grid work falls by 62%/61%; full clipmap falls from 543 ms to about 486 ms against the interval-only candidate; W8 hashes stay exact. | Keep | | Batch far Z density samples | LOD8 isolated density-grid profile falls 121.9→89.1 ms and worker sum 0.399→0.367 s, but two full-view AB pairs show no end-to-end gain (1.0805 s old mean vs 1.0875 s new; full clipmap 0.538→0.555 s). | Reject | | Precompute interpolated value-noise planes | No-plane detail wall averages 215.2 ms versus 222.2 ms with plane precompute; full clipmap averages 547.5 versus 555 ms. Hashes matched, timing regressed. | Reject | | Batch surface-relief noise | W1/W8 hashes matched, but detail-band wall rose by roughly 10–30 ms in paired trials. | Reject | | Direct per-sample shape-world call hoist | LOD0 density profile rose 257.7→301.2 ms and LOD1 225.9→263.6 ms. | Reject | | Per-tile sign grid | LOD0/1 density work rose about 74 ms. | Reject | | Edge cache | Altered deduplicated mesh vertex counts and did not materially improve tile time. | Reject | ## Hashes and audits The final W1 and W8 runs match all **44 density, mesh, payload, and topology fields**. W8 also matches all 44 fields from Round 8, including the full payload. Comparison output: [hash comparison](compare_final_hashes.log); raw runs: [W1](../round9_final_hash_w1.stdout.log), [W8](../round9_final_hash_w8.stdout.log). The shape audit passes all look checks and **5,642/5,642** route samples. It reports zero thin sheets, GridStair relative join step 0.090 against the 0.400 threshold, and passing strata/cave surface-band audits: [shape audit](../round9_final_shape_audit_w8.stdout.log). The far-survival audit passes 7,200/7,200 boundary surfaces and all 10,976 connectors across 178,351 sampled sections. Missing surfaces, holes, and unsampled connectors are all zero; it records 47,858 extra ray hits: [far-survival audit](../round9_final_far_survival_audit_stream_benchmark_w8.stdout.log). The bad-shell control fails as required: it removes 512 shell triangles and detects 16 missing surfaces and 16 holes, exiting 14: [control output](../round9_final_bad_shell_control_stream_benchmark_w8.stdout.log), [runner](../round9_final_bad_shell_control_stream_benchmark_w8.runner.log). ## Captures The six fixed views from the final executable are pixel-identical to Round 8. The [comparison](capture_compare_final.log) confirms zero changed pixels in all six. Images are in this folder: chamber, tunnel, passage, far, passage floor close-up, and tunnel bend. The remote comparison was recaptured with the recorded camera positions `(500,0,0,yaw,0)` for yaw 0/90/180/270. Round 8 (`VoxelForgeShapeRound8Final.exe`) and Round 9 (`VoxelForgeRound9Final.exe`) are exact at yaw 0. The remaining differences are at single-channel precision except for six channel values at yaw 270: | View | Changed pixels | Changed channels | Mean channel delta | Max channel delta | | --- | ---: | ---: | ---: | ---: | | Remote yaw 0 | 0 / 1,024,000 | 0 / 3,072,000 | 0.000000 | 0 | | Remote yaw 90 | 111 / 1,024,000 | 154 / 3,072,000 | 0.000050 | 1 | | Remote yaw 180 | 32 / 1,024,000 | 44 / 3,072,000 | 0.000014 | 1 | | Remote yaw 270 | 386 / 1,024,000 | 1,040 / 3,072,000 | 0.000695 | 6 | Both executables were run fresh with `--capture-after-clipmap --shape-world --force-generate --workers=8 --clip-radius=3`; all eight capture processes exited 0 under BelowNormal priority and affinity `0xFF00`. Images and the [pixel comparison](../round10/remote_compare.log) are in `../round10/`. ## Failed builds and runs - The first AVX2 mesher-classifier build failed with C2676 because `TArray` does not support pointer addition. Replacing it with `DensityGrid.GetData()` fixed the build; the retry succeeded: [failed build](../round9_avx2_classify_build.log), [retry](../round9_avx2_classify_build_retry.log). - An initial build log redirection used a relative path after `Build.ps1` changed the current directory. The redirection failed; rebuilding with an absolute log path succeeded. - One exploratory capture named `VoxelForgeRound8Final.exe`, which was not present. The correct executable was `VoxelForgeShapeRound8Final.exe`; no child process started from the incorrect name. - A strict capture comparator initially exited 1 on remote image differences. It was adjusted to enforce exact fixed views and report remote pixel deltas separately. - The first final far-audit invocation omitted `--stream-benchmark`, entered the hidden interactive viewer, and returned `-1` after I stopped that run-owned process. The corrected invocation passed; both logs are retained. - The bad-shell run exits 14 by design, as described above. No process returned `0xC0000142`. No commit, push, or stash was made. All source changes and Round 9 artifacts are in `Standalone\`.