mirror of
https://github.com/mii443/wasmer.git
synced 2025-08-22 16:35:33 +00:00
feat: Add execution benchmarks
This commit is contained in:
@ -138,7 +138,7 @@ wasmer = { version = "=5.0.0-rc.1", path = "lib/api", features = [
|
|||||||
"sys",
|
"sys",
|
||||||
] }
|
] }
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
criterion = { version = "0.5", default-features = false }
|
criterion = { version = "0.5", features = ["csv_output"] }
|
||||||
clap = { version = "=4.4.11" }
|
clap = { version = "=4.4.11" }
|
||||||
clap_builder = { version = "=4.4.11" }
|
clap_builder = { version = "=4.4.11" }
|
||||||
clap_derive = { version = "=4.4.7" }
|
clap_derive = { version = "=4.4.7" }
|
||||||
@ -229,6 +229,10 @@ opt-level = 3
|
|||||||
[profile.dev.package.digest]
|
[profile.dev.package.digest]
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|
||||||
|
[[bench]]
|
||||||
|
name = "compile_run"
|
||||||
|
harness = false
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "deserialize_modules"
|
name = "deserialize_modules"
|
||||||
harness = false
|
harness = false
|
||||||
|
77
benches/compiler_run.rs
Normal file
77
benches/compiler_run.rs
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
|
use wasmer::*;
|
||||||
|
|
||||||
|
static BENCHMARKS_ARTIFACTS_BASE_URL: &str = "https://pub-53a226d993e144159d6f8b993fe0cbf3.r2.dev";
|
||||||
|
|
||||||
|
fn get_engine() -> Engine {
|
||||||
|
#[cfg(feature = "llvm")]
|
||||||
|
return LLVM::new().into();
|
||||||
|
|
||||||
|
#[cfg(feature = "singlepass")]
|
||||||
|
return Singlepass::new().into();
|
||||||
|
|
||||||
|
#[cfg(feature = "cranelift")]
|
||||||
|
return Cranelift::new().into();
|
||||||
|
|
||||||
|
#[cfg(not(any(feature = "cranelift", feature = "llvm", feature = "singlepass")))]
|
||||||
|
return Default::default();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run_fn(c: &mut Criterion, module: &[u8], name: &str, input: i64) {
|
||||||
|
c.bench_function(name, |b| {
|
||||||
|
let engine = get_engine();
|
||||||
|
let mut store = Store::new(engine);
|
||||||
|
let module = Module::new(&store, module).unwrap();
|
||||||
|
let import_object = imports! {};
|
||||||
|
let instance = Instance::new(&mut store, &module, &import_object).unwrap();
|
||||||
|
let func = instance
|
||||||
|
.exports
|
||||||
|
.get_typed_function::<i64, i64>(&store, "run")
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
b.iter(|| {
|
||||||
|
func.call(&mut store, input);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn download_and_run(c: &mut Criterion) {
|
||||||
|
let name = if cfg!(feature = "cranelift") {
|
||||||
|
"cranelift"
|
||||||
|
} else if cfg!(feature = "llvm") {
|
||||||
|
"llvm"
|
||||||
|
} else if cfg!(feature = "singlepass") {
|
||||||
|
"singlepass"
|
||||||
|
} else if cfg!(feature = "v8") {
|
||||||
|
"v8"
|
||||||
|
} else if cfg!(feature = "wamr") {
|
||||||
|
"wamr"
|
||||||
|
} else if cfg!(feature = "wasmi") {
|
||||||
|
"wasmi"
|
||||||
|
} else {
|
||||||
|
panic!("Unrecognized backend!")
|
||||||
|
};
|
||||||
|
|
||||||
|
let bytes = include_bytes!("./mods/counter.wasm");
|
||||||
|
run_fn(c, bytes, &format!("exec/{name}/counter"), 5_000_000);
|
||||||
|
let bytes = include_bytes!("./mods/primes.wasm");
|
||||||
|
run_fn(c, bytes, &format!("exec/{name}/primes"), 1_000);
|
||||||
|
let bytes = include_bytes!("./mods/fib_rec.wasm");
|
||||||
|
run_fn(c, bytes, &format!("exec/{name}/fib_rec"), 40);
|
||||||
|
let bytes = include_bytes!("./mods/fib_iter.wasm");
|
||||||
|
run_fn(c, bytes, &format!("exec/{name}/fib_iter"), 2_000_000);
|
||||||
|
let bytes = include_bytes!("./mods/bulk_ops.wasm");
|
||||||
|
run_fn(c, bytes, &format!("exec/{name}/bulk_ops"), 5_000);
|
||||||
|
let bytes = include_bytes!("./mods/matmul.wasm");
|
||||||
|
run_fn(c, bytes, &format!("exec/{name}/matmul"), 200);
|
||||||
|
let bytes = include_bytes!("./mods/argon2.wasm");
|
||||||
|
run_fn(c, bytes, &format!("exec/{name}/argon2"), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
criterion_group!(
|
||||||
|
name = run_benches;
|
||||||
|
config = Criterion::default().sample_size(60);
|
||||||
|
targets = download_and_run
|
||||||
|
);
|
||||||
|
|
||||||
|
criterion_main!(run_benches);
|
BIN
benches/mods/argon2.wasm
Normal file
BIN
benches/mods/argon2.wasm
Normal file
Binary file not shown.
BIN
benches/mods/bulk_ops.wasm
Normal file
BIN
benches/mods/bulk_ops.wasm
Normal file
Binary file not shown.
BIN
benches/mods/counter.wasm
Normal file
BIN
benches/mods/counter.wasm
Normal file
Binary file not shown.
BIN
benches/mods/fib_iter.wasm
Normal file
BIN
benches/mods/fib_iter.wasm
Normal file
Binary file not shown.
BIN
benches/mods/fib_rec.wasm
Normal file
BIN
benches/mods/fib_rec.wasm
Normal file
Binary file not shown.
BIN
benches/mods/matmul.wasm
Normal file
BIN
benches/mods/matmul.wasm
Normal file
Binary file not shown.
BIN
benches/mods/primes.wasm
Normal file
BIN
benches/mods/primes.wasm
Normal file
Binary file not shown.
Reference in New Issue
Block a user