Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Performance tracking #411

Closed
paulfd opened this issue Sep 8, 2020 · 2 comments
Closed

Performance tracking #411

paulfd opened this issue Sep 8, 2020 · 2 comments
Labels
improvement Improve on existing functionality

Comments

@paulfd
Copy link
Member

paulfd commented Sep 8, 2020

So I've been working to automate the performance regression tests and it's going OK. I have a fairly simple process down now, I'll probably put it in another repository though.

I've ran it on a set of MIDI and SFZ files for the past months of merge commits.
The midi files are:

  • Some uptempo swing drum track with alot of crashes (files called jump-)
  • Chopin's "Butterfly" etude (files called butterfly-)
  • Chopin's Fantaisie Impromptu (files called fantaisie-)
  • Bach's Well Tempered Keyboard first prelude (files called wtc-) with specific CCs that change the amplitude of the stops used e.g. in Prelude

The SFZ I've considered are:

  • AVL Drumkits (avl)
  • GCSW Drumkits (gcsw)
  • Naked Drums (naked)
  • DSmolken's Big Rusty Drums (rusty)
  • Ivy Piano in 162 (ivy)
  • Little Lizard Piano (lizard)
  • Prelude.lv2 organ (prelude) -- a wavetable-heavy file

The results are here, I'll try to keep them updated as much as possible:

https://box.ferrand.cc/sfizz-reports/history/butterfly-ivy-amd64.html
https://box.ferrand.cc/sfizz-reports/history/butterfly-lizard-amd64.html
https://box.ferrand.cc/sfizz-reports/history/fantaisie-ivy-amd64.html
https://box.ferrand.cc/sfizz-reports/history/fantaisie-lizard-amd64.html
https://box.ferrand.cc/sfizz-reports/history/jump-avl-amd64.html
https://box.ferrand.cc/sfizz-reports/history/jump-gcsw-amd64.html
https://box.ferrand.cc/sfizz-reports/history/jump-naked-amd64.html
https://box.ferrand.cc/sfizz-reports/history/jump-rusty-amd64.html
https://box.ferrand.cc/sfizz-reports/history/wtc-prelude-amd64.html

https://box.ferrand.cc/sfizz-reports/history/jump-avl-armv7.html
https://box.ferrand.cc/sfizz-reports/history/wtc-prelude-armv7.html
https://box.ferrand.cc/sfizz-reports/history/butterfly-lizard-armv7.html

  • We can see that some heavy performance impact was due to the envelope follower, now reduced and further cancelled by Add runtime configs for loading in ram and voice stealing #353 where the envelope follower is disable unless requested by the stealing algorithm
  • The default resampling had some impact, also reduced by Put default quality to 1 #405
  • The modulation matrix has some hot code paths, mostly seen in modulation-heavy libraries such as Big Rusty Drums; I'm trying to track them down now

Hopefully we can use all this to make sfizz as performant as possible and avoid regressions over time 🙂

@paulfd
Copy link
Member Author

paulfd commented Sep 9, 2020

Links update with a blocksize of 128 samples, to better reflect normal use as a plugin (before it was 1024). This makes it worse with respect to things like polyphony checks and the modulation matrix since these are costs independent of the block size.

@paulfd
Copy link
Member Author

paulfd commented Sep 10, 2020

Added some armv7 runs with a raspi 3.

@paulfd paulfd added wontfix This will not be worked on improvement Improve on existing functionality and removed wontfix This will not be worked on labels Sep 22, 2020
@paulfd paulfd closed this as completed Oct 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
improvement Improve on existing functionality
Projects
None yet
Development

No branches or pull requests

1 participant