rj00a / evenio

An event-driven Entity Component System
MIT License
137 stars 14 forks source link

Improve `iter` benchmark #45

Closed rj00a closed 6 months ago

rj00a commented 6 months ago

This adds a Mandelbrot set rendering test.

Timer precision: 14 ns
iter                       fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ iter_mandelbrot_bevy                  │               │               │               │         │
│  ╰─ true                               │               │               │               │         │
│     ├─ 1                 14.56 µs      │ 44.36 µs      │ 17.92 µs      │ 18.94 µs      │ 100     │ 100
│     ├─ 2                 20.22 µs      │ 171 µs        │ 25.63 µs      │ 30.71 µs      │ 100     │ 100
│     ├─ 3                 29.03 µs      │ 88.89 µs      │ 32.37 µs      │ 34.3 µs       │ 100     │ 100
│     ├─ 8                 49.01 µs      │ 245.1 µs      │ 59.46 µs      │ 72.94 µs      │ 100     │ 100
│     ├─ 16                83.35 µs      │ 319.6 µs      │ 105.3 µs      │ 122.2 µs      │ 100     │ 100
│     ├─ 32                150.5 µs      │ 395.7 µs      │ 185.9 µs      │ 204.4 µs      │ 100     │ 100
│     ├─ 64                290.9 µs      │ 1.102 ms      │ 362.4 µs      │ 395.1 µs      │ 100     │ 100
│     ├─ 128               606.5 µs      │ 1.209 ms      │ 667.1 µs      │ 724 µs        │ 100     │ 100
│     ├─ 256               1.134 ms      │ 1.837 ms      │ 1.185 ms      │ 1.216 ms      │ 100     │ 100
│     ├─ 512               2.202 ms      │ 2.835 ms      │ 2.263 ms      │ 2.269 ms      │ 100     │ 100
│     ╰─ 1024              4.26 ms       │ 4.531 ms      │ 4.336 ms      │ 4.337 ms      │ 100     │ 100
├─ iter_mandelbrot_evenio                │               │               │               │         │
│  ╰─ true                               │               │               │               │         │
│     ├─ 1                 17.93 µs      │ 274.2 µs      │ 21.13 µs      │ 25.74 µs      │ 100     │ 100
│     ├─ 2                 27 µs         │ 518.5 µs      │ 48.14 µs      │ 58.68 µs      │ 100     │ 100
│     ├─ 3                 38.12 µs      │ 720.1 µs      │ 73.36 µs      │ 92.16 µs      │ 100     │ 100
│     ├─ 8                 54.64 µs      │ 688.9 µs      │ 105 µs        │ 116.2 µs      │ 100     │ 100
│     ├─ 16                82.64 µs      │ 1.335 ms      │ 146.6 µs      │ 173.2 µs      │ 100     │ 100
│     ├─ 32                154.3 µs      │ 1.646 ms      │ 252.9 µs      │ 267 µs        │ 100     │ 100
│     ├─ 64                250.1 µs      │ 1.742 ms      │ 403.4 µs      │ 453.4 µs      │ 100     │ 100
│     ├─ 128               400.4 µs      │ 1.552 ms      │ 517 µs        │ 550.8 µs      │ 100     │ 100
│     ├─ 256               625.1 µs      │ 1.488 ms      │ 849.3 µs      │ 883.9 µs      │ 100     │ 100
│     ├─ 512               1.196 ms      │ 2.349 ms      │ 1.25 ms       │ 1.333 ms      │ 100     │ 100
│     ╰─ 1024              2.334 ms      │ 3.603 ms      │ 2.412 ms      │ 2.484 ms      │ 100     │ 100

evenio's parallel iterators pull ahead once the workload becomes sufficiently uneven or large (by cranking up the image resolution or iters per pixel).