summaryrefslogtreecommitdiff
path: root/benchmarks/benches
diff options
context:
space:
mode:
authorHenry Gressmann <mail@henrygressmann.de>2024-05-10 18:08:00 +0200
committerHenry Gressmann <mail@henrygressmann.de>2024-05-10 19:22:29 +0200
commit868aa006b7f1eabffd4aec3a03555012148a7df1 (patch)
tree164722ac37b3efb0f40bcf53925b7e79dc6493c1 /benchmarks/benches
parent2ac04cd653898786caca198726e6b9938185b76a (diff)
chore: slight perf improvements
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
Diffstat (limited to 'benchmarks/benches')
-rw-r--r--benchmarks/benches/argon2id.rs8
-rw-r--r--benchmarks/benches/fibonacci.rs11
-rw-r--r--benchmarks/benches/selfhosted.rs11
-rw-r--r--benchmarks/benches/util/mod.rs22
4 files changed, 11 insertions, 41 deletions
diff --git a/benchmarks/benches/argon2id.rs b/benchmarks/benches/argon2id.rs
index 3046dee..0cf5af4 100644
--- a/benchmarks/benches/argon2id.rs
+++ b/benchmarks/benches/argon2id.rs
@@ -1,9 +1,8 @@
mod util;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
-use util::wasm_to_twasm;
-fn run_tinywasm(twasm: &[u8], params: (i32, i32, i32), name: &str) {
- let (mut store, instance) = util::tinywasm(twasm);
+fn run_tinywasm(wasm: &[u8], params: (i32, i32, i32), name: &str) {
+ let (mut store, instance) = util::tinywasm(wasm);
let argon2 = instance.exported_func::<(i32, i32, i32), i32>(&store, name).expect("exported_func");
argon2.call(&mut store, params).expect("call");
}
@@ -38,7 +37,6 @@ fn run_native(params: (i32, i32, i32)) {
const ARGON2ID: &[u8] = include_bytes!("../../examples/rust/out/argon2id.wasm");
fn criterion_benchmark(c: &mut Criterion) {
- let twasm = wasm_to_twasm(ARGON2ID);
let params = (1000, 2, 1);
let mut group = c.benchmark_group("argon2id");
@@ -46,7 +44,7 @@ fn criterion_benchmark(c: &mut Criterion) {
group.sample_size(10);
group.bench_function("native", |b| b.iter(|| run_native(black_box(params))));
- group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(&twasm, black_box(params), "argon2id")));
+ group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(ARGON2ID, black_box(params), "argon2id")));
group.bench_function("wasmi", |b| b.iter(|| run_wasmi(ARGON2ID, black_box(params), "argon2id")));
group.bench_function("wasmer", |b| b.iter(|| run_wasmer(ARGON2ID, black_box(params), "argon2id")));
}
diff --git a/benchmarks/benches/fibonacci.rs b/benchmarks/benches/fibonacci.rs
index b391285..15c09ac 100644
--- a/benchmarks/benches/fibonacci.rs
+++ b/benchmarks/benches/fibonacci.rs
@@ -1,9 +1,8 @@
mod util;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
-use util::wasm_to_twasm;
-fn run_tinywasm(twasm: &[u8], iterations: i32, name: &str) {
- let (mut store, instance) = util::tinywasm(twasm);
+fn run_tinywasm(wasm: &[u8], iterations: i32, name: &str) {
+ let (mut store, instance) = util::tinywasm(wasm);
let fib = instance.exported_func::<i32, i32>(&store, name).expect("exported_func");
fib.call(&mut store, iterations).expect("call");
}
@@ -47,12 +46,10 @@ fn run_native_recursive(n: i32) -> i32 {
const FIBONACCI: &[u8] = include_bytes!("../../examples/rust/out/fibonacci.wasm");
fn criterion_benchmark(c: &mut Criterion) {
- let twasm = wasm_to_twasm(FIBONACCI);
-
{
let mut group = c.benchmark_group("fibonacci");
group.bench_function("native", |b| b.iter(|| run_native(black_box(60))));
- group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(&twasm, black_box(60), "fibonacci")));
+ group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(FIBONACCI, black_box(60), "fibonacci")));
group.bench_function("wasmi", |b| b.iter(|| run_wasmi(FIBONACCI, black_box(60), "fibonacci")));
group.bench_function("wasmer", |b| b.iter(|| run_wasmer(FIBONACCI, black_box(60), "fibonacci")));
}
@@ -61,7 +58,7 @@ fn criterion_benchmark(c: &mut Criterion) {
let mut group = c.benchmark_group("fibonacci-recursive");
group.measurement_time(std::time::Duration::from_secs(5));
group.bench_function("native", |b| b.iter(|| run_native_recursive(black_box(26))));
- group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(&twasm, black_box(26), "fibonacci_recursive")));
+ group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(FIBONACCI, black_box(26), "fibonacci_recursive")));
group.bench_function("wasmi", |b| b.iter(|| run_wasmi(FIBONACCI, black_box(26), "fibonacci_recursive")));
group.bench_function("wasmer", |b| b.iter(|| run_wasmer(FIBONACCI, black_box(26), "fibonacci_recursive")));
}
diff --git a/benchmarks/benches/selfhosted.rs b/benchmarks/benches/selfhosted.rs
index 02d44ac..21ea79f 100644
--- a/benchmarks/benches/selfhosted.rs
+++ b/benchmarks/benches/selfhosted.rs
@@ -1,5 +1,4 @@
mod util;
-use crate::util::twasm_to_module;
use criterion::{criterion_group, criterion_main, Criterion};
fn run_native() {
@@ -15,7 +14,7 @@ fn run_native() {
fn run_tinywasm(twasm: &[u8]) {
use tinywasm::*;
- let module = twasm_to_module(twasm);
+ let module = Module::parse_bytes(twasm).expect("Module::parse_bytes");
let mut store = Store::default();
let mut imports = Imports::default();
imports.define("env", "printi32", Extern::typed_func(|_: FuncContext<'_>, _: i32| Ok(()))).expect("define");
@@ -54,15 +53,9 @@ fn run_wasmer(wasm: &[u8]) {
const TINYWASM: &[u8] = include_bytes!("../../examples/rust/out/tinywasm.wasm");
fn criterion_benchmark(c: &mut Criterion) {
{
- let mut group = c.benchmark_group("selfhosted-parse");
- group.bench_function("tinywasm", |b| b.iter(|| util::parse_wasm(TINYWASM)));
- }
-
- {
- let twasm = util::wasm_to_twasm(TINYWASM);
let mut group = c.benchmark_group("selfhosted");
group.bench_function("native", |b| b.iter(run_native));
- group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(&twasm)));
+ group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(TINYWASM)));
group.bench_function("wasmi", |b| b.iter(|| run_wasmi(TINYWASM)));
group.bench_function("wasmer", |b| b.iter(|| run_wasmer(TINYWASM)));
}
diff --git a/benchmarks/benches/util/mod.rs b/benchmarks/benches/util/mod.rs
index f75ce66..2961046 100644
--- a/benchmarks/benches/util/mod.rs
+++ b/benchmarks/benches/util/mod.rs
@@ -1,26 +1,8 @@
#![allow(dead_code)]
-use tinywasm::{parser::Parser, types::TinyWasmModule};
-
-pub fn parse_wasm(wasm: &[u8]) -> TinyWasmModule {
- let parser = Parser::new();
- parser.parse_module_bytes(wasm).expect("parse_module_bytes")
-}
-
-pub fn wasm_to_twasm(wasm: &[u8]) -> Vec<u8> {
- let parser = Parser::new();
- let res = parser.parse_module_bytes(wasm).expect("parse_module_bytes");
- res.serialize_twasm().to_vec()
-}
-
-#[inline]
-pub fn twasm_to_module(twasm: &[u8]) -> tinywasm::Module {
- unsafe { TinyWasmModule::from_twasm_unchecked(twasm) }.into()
-}
-
-pub fn tinywasm(twasm: &[u8]) -> (tinywasm::Store, tinywasm::ModuleInstance) {
+pub fn tinywasm(wasm: &[u8]) -> (tinywasm::Store, tinywasm::ModuleInstance) {
use tinywasm::*;
- let module = twasm_to_module(twasm);
+ let module = Module::parse_bytes(wasm).expect("Module::parse_bytes");
let mut store = Store::default();
let imports = Imports::default();
let instance = ModuleInstance::instantiate(&mut store, module, Some(imports)).expect("instantiate");