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

Optimize fuzzer by avoiding traversal of the whole configuration in term substitution #69

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

bbyalcinkaya
Copy link
Member

@bbyalcinkaya bbyalcinkaya commented Mar 13, 2025

This PR improves performance by embedding large configuration cells without variables directly into a Step. This prevents the substitution algorithm from needlessly traversing these large terms, leading to a 3x speedup in fuzzing.

The speedup was measured using the existing test suite, particularly the FxDAO tests. In cases where the initial state is larger—such as tests involving multiple contracts or bigger contracts—the performance improvement is even more significant.

While this optimization is effective, a more robust solution would be to extend the fuzz function from pyk with an optional parameter for custom substitution functions. This would allow direct manipulation of variables in the template without requiring a full tree traversal.

@bbyalcinkaya bbyalcinkaya changed the title Fuzzer optimization Optimize fuzzer by avoiding traversal of the whole configuration in term substitution Mar 13, 2025
@bbyalcinkaya bbyalcinkaya marked this pull request as ready for review March 14, 2025 16:42
@bbyalcinkaya bbyalcinkaya requested a review from gtrepta March 14, 2025 16:42
automergerpr-permission-manager bot added a commit to runtimeverification/k that referenced this pull request Mar 14, 2025
Replaces `top_down` with `bottom_up` to avoid redundant traversals in
replacement terms, improving performance for large terms. While
replacement terms are usually not large, this change enables an
optimization in komet that results in a 3x speedup.

The optimization in komet works by embedding large configuration cells
without variables directly into a replacement term. This prevents the
substitution algorithm from needlessly traversing these large terms,
significantly reducing overhead.
* runtimeverification/komet#69

Co-authored-by: automergerpr-permission-manager[bot] <190534181+automergerpr-permission-manager[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants