Physical-GPU runs owed
This page lists the measurements that only a physical GPU can make. The work of 2026-10-20 ran in
a container with no physical GPU: every time in its records comes from SwiftShader, a software
GPU. docs/lab-run-records.md ("SwiftShader against the RTX 2080") gives the ratio of each stage
between the two, so a SwiftShader time is an estimate of a physical one, not a measurement.
Each run below is a visit to the lab with a query string. The lab is https://cv.typeshade.dev/lab/.
A run makes a run record. Send it with the lab's "Send" button, or save it with "Download JSON".
Procedure
- Open the lab on the device. Use Chrome on Windows (the RTX 2080 or the RTX 5060 Ti), and Safari on the iPhone where a row says so.
- Open the address of a row, with its query string.
- Load the input of the row, then start the run.
- Wait for the run to finish. Do not switch tabs during the run.
- Send the record, or download it.
- Do the next row.
Run each row twice when the device was cold: the first pass compiles the kernels. The second pass (warm) is the one that compares with the records.
Rows
| # | Change measured | Address (query) | Input | Compare |
|---|---|---|---|---|
| 1 | Bundle schedule (#113) | ? |
"Standard benchmark" | Bundle stage against record 944372ed (10.4 s). Estimate: 6 to 8 s. |
| 2 | Video decode in a worker (#111) | ? and ?decode=main |
An uploaded video (the 566-frame 4K clip) | timing.mainThread long tasks and frame gaps between the two runs |
| 3 | Phase-correlation keyframe gate (#116) | ? and ?gate=legacy |
An uploaded video with fast panning | Kept frames, registered views, total time |
| 4 | CLAHE before SIFT (#114) | ?clahe=1 and ? |
The pyramid video sample | Features per frame, landmarks, feature stage time |
| 5 | Dense cleanup kNN (#129) | ?dense=1 |
COLMAP gerrard-hall | dense.clean.ms.outliers (SwiftShader 2.7 to 5.4 s, CPU 2.4 s) |
| 6 | Dense mesh (#119) | ?dense=1&denseMesh=1 |
COLMAP gerrard-hall | dense.mesh ms per stage; look at the mesh with the "Mesh" switch |
| 7 | Dense MVS at full size, fused points (#112 open item) | ?dense=1 |
TUM fr3 sample, 640 px edge | The run finishes without a device loss |
| 8 | KLT tracking (#126) | ?klt=1 and ?klt=0 |
An uploaded video | kltPush time (SwiftShader 144 s for 41 frames), track length |
| 9 | ORB front end (#123, #127) | ?features=orb and ? |
COLMAP south-building (12) and the pyramid | Registered views, feature and matching stage times |
| 10 | Hough lines (#125, #128) | none in the lab; scripts/benchmark-hough.mjs |
south-building frame 0 | WebGPU total against the CPU reference (55 to 67 ms) |
Notes
- Row 1 also gives the physical rate of every other stage of the standard benchmark. Add the record
next to
944372edindocs/lab-run-records.mdto update the ratio table. - Row 7 is the run that crashed the headless browser after 55 minutes in the container. A device
loss on a physical GPU is a finding: send the record with its
failureblock. - Row 10 needs a checkout and
npm ci. Runnode scripts/benchmark-hough.mjsin Chrome's WebGPU through Playwright with the default adapter. - KLT step 7 (
docs/klt-tracking.md) is the physical-device step of the KLT record. Row 8 is its first measurement.