Performance¶
All numbers are medians over repeated runs of benchmarks/benchmark.py,
measured on an NVIDIA GeForce RTX 5090 with CUDA 12.8, extracting a sphere
SDF at level 0. Timings include the full call from Python: case
classification, extraction, and vertex welding.
Extraction time (median, ms)¶
Grid |
Algorithm |
128³ |
512³ |
|---|---|---|---|
uniform |
marching_cubes |
0.55 |
4.8 |
uniform |
get_intersection |
0.30 |
5.3 |
uniform |
dual_contouring |
0.82 |
7.0 |
sparse |
marching_cubes |
0.44 |
1.4 |
sparse |
get_intersection |
0.17 |
0.53 |
sparse |
dual_contouring |
0.78 |
2.3 |
Sparse grids only touch cells near the surface, so their cost scales with the surface area rather than the volume. At 512³ that is 300k cells instead of 134M.
Reproducing¶
pixi run --environment cu128 bench
# or directly, with options:
pixi run --environment cu128 python benchmarks/benchmark.py \
--res 32 64 128 256 512 --json results.json
The harness reports the median, 10th and 90th percentiles, and the first call separately.
Notes¶
The first call after installation is slow (a few seconds): the driver compiles the shipped PTX for your GPU and caches the result. See Installation. The benchmark warms up before timing, so the table excludes this.
The kernels compute cell corners on the fly instead of storing them, so memory use grows with the extracted surface, not the grid volume. A dense 1024³ grid fits on a consumer GPU.
Numbers depend on the GPU, driver, and field. Expect different results on other machines.