68 lines
2.2 KiB
Rust
68 lines
2.2 KiB
Rust
//! Perf measurement vs the reference numbers (run explicitly):
|
|
//! cargo test -p makepad-remesh --release --test bench -- --ignored --nocapture
|
|
//!
|
|
//! Bars: H100 reference totals 0.70s @512^3 (encode 0.52 + decode 0.17);
|
|
//! reference-on-this-mac (polyfilled CPU oracle) is far slower (36-238s @512).
|
|
|
|
mod common;
|
|
|
|
use common::{dump_tri_soup, faithc_ref_dir, FcDump};
|
|
use makepad_remesh::{decode, encode, EncodeOptions, TriangulationMode};
|
|
|
|
fn bench_asset(name: &str, res: u32, reps: usize) {
|
|
let Some(dir) = faithc_ref_dir() else { return };
|
|
let path = dir.join("dumps").join(format!("{name}_r{res}.bin"));
|
|
if !path.is_file() {
|
|
eprintln!("SKIP {name}_r{res}");
|
|
return;
|
|
}
|
|
let dump = FcDump::load(&path).unwrap();
|
|
let tris = dump_tri_soup(&dump);
|
|
let opts = EncodeOptions::default();
|
|
|
|
// warmup + best-of-reps (steady state, honest for a pipeline tool)
|
|
let mut enc_best = f64::INFINITY;
|
|
let mut dec_best = f64::INFINITY;
|
|
let mut k = 0;
|
|
let mut nf = 0;
|
|
for _ in 0..reps {
|
|
let t0 = std::time::Instant::now();
|
|
let tokens = encode(&tris, res, &opts);
|
|
let te = t0.elapsed().as_secs_f64();
|
|
let t1 = std::time::Instant::now();
|
|
let dec = decode(
|
|
res,
|
|
&tokens.voxel_indices,
|
|
&tokens.anchors,
|
|
&tokens.flux,
|
|
Some(&tokens.normals),
|
|
TriangulationMode::Auto,
|
|
);
|
|
let td = t1.elapsed().as_secs_f64();
|
|
enc_best = enc_best.min(te);
|
|
dec_best = dec_best.min(td);
|
|
k = tokens.voxel_indices.len();
|
|
nf = dec.faces.len();
|
|
}
|
|
println!(
|
|
"{name}_r{res}: tris={} K={k} faces={nf} encode={enc_best:.3}s decode={dec_best:.3}s total={:.3}s",
|
|
tris.len(),
|
|
enc_best + dec_best
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
#[ignore = "perf: run explicitly"]
|
|
fn bench_all() {
|
|
println!("threads={}", makepad_csg_math::thread_pool::thread_count());
|
|
for (name, res, reps) in [
|
|
("corgi_traveller", 128u32, 5usize),
|
|
("light_bulb", 128, 5),
|
|
("cloth", 128, 5),
|
|
("pirateship", 128, 5),
|
|
("cloth", 512, 3),
|
|
("pirateship", 512, 3),
|
|
] {
|
|
bench_asset(name, res, reps);
|
|
}
|
|
}
|