From f9bd310949e6c8734366153994a2415d5a9f3dbc Mon Sep 17 00:00:00 2001 From: Volodymyr Shymanskyy Date: Sat, 7 Dec 2019 03:47:17 +0200 Subject: [PATCH] Add C-Ray 1.1 benchmark --- test/benchmark/c-ray/README.md | 52 +++++++++ test/benchmark/c-ray/c-ray.wasm | Bin 0 -> 89879 bytes test/benchmark/c-ray/scene | 18 +++ test/benchmark/c-ray/sphfract | 192 ++++++++++++++++++++++++++++++++ 4 files changed, 262 insertions(+) create mode 100644 test/benchmark/c-ray/README.md create mode 100755 test/benchmark/c-ray/c-ray.wasm create mode 100644 test/benchmark/c-ray/scene create mode 100644 test/benchmark/c-ray/sphfract diff --git a/test/benchmark/c-ray/README.md b/test/benchmark/c-ray/README.md new file mode 100644 index 0000000..a92e402 --- /dev/null +++ b/test/benchmark/c-ray/README.md @@ -0,0 +1,52 @@ +# C-Ray 1.1 + +### Results + +```log + time(ms) +Node v13.0.1 (interpreter) 181527 +wasm-micro-runtime 78499 +wac (wax) - +wasm3 - +Wasmer 0.11.0 singlepass 1447 +wasmtime 0.7.0 (--optimize) 576 +Wasmer 0.11.0 cranelift 565 +wasmer-js (Node v13.0.1) 336 +Wasmer 0.11.0 llvm crash +WAVM 299 +Native (GCC 7.4.0, 32-bit) 249 +``` + +### Building + +```sh +wasicc -O3 c-ray-f.c -Dunix -o c-ray.wasm +``` + +### Running + +```sh +export ENGINES_PATH=/opt/wasm_engines + +# Wasm3 +cat scene | ../../../build-release/wasm3 c-ray.wasm -s 1024x768 > foo.ppm + +# wasm-micro-runtime +cat scene | $ENGINES_PATH/wasm-micro-runtime/core/iwasm/products/linux/build/iwasm c-ray.wasm -s 1024x768 > foo.ppm + +# wasmtime +cat scene | wasmtime --optimize c-ray.wasm -- -s 1024x768 > foo.ppm + +# Wasmer +cat scene | wasmer run c-ray.wasm -- -s 1024x768 > foo.ppm +cat scene | wasmer run --backend singlepass c-ray.wasm -- -s 1024x768 > foo.ppm +cat scene | wasmer run --backend llvm c-ray.wasm -- -s 1024x768 > foo.ppm + +# Wasmer-JS (V8) https://www.npmjs.com/package/@wasmer/cli +cat scene | wasmer-js run c-ray.wasm -s 1024x768 > foo.ppm + +cat scene | node --wasm_interpret_all $(which wasmer-js) run c-ray.wasm -s 1024x768 > foo.ppm + +# WAVM +cat scene | $ENGINES_PATH/WAVM/Release/bin/wavm run c-ray.wasm -s 1024x768 > foo.ppm +``` diff --git a/test/benchmark/c-ray/c-ray.wasm b/test/benchmark/c-ray/c-ray.wasm new file mode 100755 index 0000000000000000000000000000000000000000..78b153d1fea213e4facb586746242f5225b73e5f GIT binary patch literal 89879 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⪻g8!Oo( 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 Bd