[Perf] Avoid allocations in the Sanitizer #6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
Sanitizer
is used very prominently in our parsing functions, and it is also a source of many allocations, most of which are temporary. Similarly to #5, it is possible to avoid using some of the expensive parsing functions, though in this case we need to apply some heuristics.The perf improvements are quite large, and I've measured them both with a 15-minute run of a
--dev
node and usinghyperfine
on a small binary that parsed all the valid.aleo
programs currently present in the snarkVM codebase.dev node:
Program::from_str
specifically, allocs are reduced by ~64%, of which temp allocs ~88%parsing all
.aleo
programs usingProgram::from_str
:Update: I crunched the parsing figures again using
Program::from_str
(as opposed to justSanitizer::parse
), which provides a better bigger picture.