+ {options.datasetRowCount.toLocaleString()} rows ×{' '} + {options.dimensions.toLocaleString()} dimensions ·{' '} + {options.queryCount} queries · K = {options.resultCount} ·{' '} + {deviceLabel} +
+| Execution | +Median query | +CPU encode | +Candidate GPU | +Readback | +CPU comparison | +Eligible rows | +Recall@K | +
|---|---|---|---|---|---|---|---|
| {result.label} | +{formatLuvsMilliseconds(result.medianMilliseconds)} | +{formatOptionalLuvsMilliseconds(result.encodeMilliseconds)} | +{formatOptionalLuvsMilliseconds(result.rerankMilliseconds)} | +{formatOptionalLuvsMilliseconds(result.readbackMilliseconds)} | ++ {(cpuMilliseconds / Math.max(result.medianMilliseconds, Number.EPSILON)).toFixed(2)} + × + | +{result.candidateCount.toLocaleString()} | ++ {result.recall === undefined ? 'Exact' : `${(result.recall * 100).toFixed(1)}%`} + | +
+ One-time source upload: {formatLuvsMilliseconds(uploadMilliseconds)}; + {` ${options.listCount}-list IVF training and index build: `} + {formatLuvsMilliseconds(indexBuildMilliseconds)}; reusable index storage:{' '} + {(indexByteLength / 1024).toFixed(1)} KiB. The approximate query probes{' '} + {options.probeCount} lists without fallback expansion. +
++ Query medians include encoding, submission, and an explicit GPU completion fence, but + exclude upload, graph compilation, index training, and the separately reported correctness + readback. Medians use {LUVS_BENCHMARK_WARMUP_ITERATIONS} warmup and {LUVS_BENCHMARK_MEASURED_ITERATIONS} measured runs. + {timestampQueries + ? ' Candidate GPU time uses available per-pass timestamp queries.' + : ' Candidate GPU timing is unavailable because this adapter has no timestamp queries.'} +
+ > + ); +} + +function formatLuvsMilliseconds(milliseconds: number): string { + return `${milliseconds.toFixed(3)} ms`; +} + +function formatOptionalLuvsMilliseconds(milliseconds: number | undefined): string { + return milliseconds === undefined ? '—' : formatLuvsMilliseconds(milliseconds); +}