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

[PExplicit] Improve state caching, add non-chronological backtracking #724

Merged
merged 5 commits into from
Apr 30, 2024

Conversation

aman-goel
Copy link
Contributor

@aman-goel aman-goel commented Apr 26, 2024

Updates include:

[State caching]

  • Adds storing hash code and string representation during PValue initialization for performance
  • Adds new state caching modes using hash functions from Google's guava library
  • New state caching modes include: hashcode (using hashCode() from PValue and Java built-ins, 32-bit hashes), siphash24 (64-bit), murmur3_128 (128-bit, default), sha256 (256-bit), or exact (using exact string representation).

[Non-chronological backtracking]

  • Adds non-chronological search that implements search beyond a fixed order (e.g., beyond depth-first or breadth-first).
  • Breaks down exploration into SearchTask, where each task explores a slice of the execution tree.
  • Each search task tracks a set of contiguous unexplored choices it is assigned to explore. It either explores all of them completely, or creates new children tasks for remaining unexplored sub-choices.
  • Exploration within a SearchTask is chronological, exploration across SearchTasks is non-chronological and can jump at arbitrary places in the execution tree.
  • New CLI option --strategy to set the search strategy: dfs, random (default), astar
  • New hidden CLI option --schedules-per-task <uint> to set the number of schedules explored in each SearchTask in random/astar strategy. Default is 100. For dfs, there is no limit.
  • New hidden CLI option --children-per-task <uint> (default 2). This relates with how packaging of SearchTask is done, to set how many children tasks each SearchTask can generate after completion. Default is 2 that uses head-tail split, i.e., slice the shallowest unexplored choice as an independent SearchTask (head), and any remaining unexplored choices as another SearchTask (tail).
  • DFS strategy has a single SearchTask at any given time.
  • Random strategy can have many SearchTask. After a SearchTask completes, the next task is randomly chosen from the pending tasks list.
  • A* strategy can have many SearchTask as well. After a SearchTask completes, the next task is chosen by preferring the one that is shallowest, by using search depth as the cost function.

Adds storing hashcode and string representation during PValue initialization

Adds new state caching modes using hash functions from guava library

New state caching modes include: hashcode (java built in, 32-bit), siphash24 (64-bit), murmur3_128 (128-bit, default), sha256 (256-bit), or exact (using exact string representation)
Adds non-chronological search that implements search beyond DFS.

New search modes include random, astar

Each run is executed over search tasks, with each task tracking the set of unexplored choices it is assigned to explore

Each search task can create new children sub-tasks
@aman-goel aman-goel marked this pull request as ready for review April 26, 2024 19:58
@aman-goel aman-goel merged commit a71d77e into dev/pexplicit_checker Apr 30, 2024
10 checks passed
@aman-goel aman-goel deleted the dev/aman branch April 30, 2024 21:19
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