ocaml-multicore / picos

Interoperable effects based concurrency
https://ocaml-multicore.github.io/picos/doc/picos/index.html
ISC License
86 stars 3 forks source link

Add `Picos_mpmcq.length` and tweak for performance #243

Closed polytypic closed 1 month ago

polytypic commented 1 month ago

The tweaks clearly improved performance on my Apple M3 Max laptop, but improvements on the AMD Zen 1 and Opteron benchmarking servers are unclear.

➜  picos-this git:(add-length-to-queue-and-tweaks) ✗ dune exec --release -- ./bench/main.exe -budget 2 -diff bench-mpmcq-hi.json
Picos_mpmcq:                          
  time per message/one domain:
    16.20 ns = 1.00 x 16.25 ns
  messages over time/one domain:
    61.72 M/s = 1.00 x 61.54 M/s
  time per message/1 nb adder, 1 nb taker:
    15.27 ns = 0.82 x 18.70 ns
  messages over time/1 nb adder, 1 nb taker:
    130.95 M/s = 1.22 x 106.94 M/s
  time per message/1 nb adder, 2 nb takers:
    28.30 ns = 0.91 x 31.09 ns
  messages over time/1 nb adder, 2 nb takers:
    106.02 M/s = 1.10 x 96.49 M/s
  time per message/2 nb adders, 1 nb taker:
    31.32 ns = 0.92 x 34.14 ns
  messages over time/2 nb adders, 1 nb taker:
    95.79 M/s = 1.09 x 87.88 M/s
  time per message/2 nb adders, 2 nb takers:
    42.58 ns = 0.90 x 47.07 ns
  messages over time/2 nb adders, 2 nb takers:
    93.94 M/s = 1.11 x 84.99 M/s