-
Notifications
You must be signed in to change notification settings - Fork 67
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
[WIP] Machines communicating through shared memory #1380
Draft
georgwiese
wants to merge
14
commits into
machine_arguments
Choose a base branch
from
machines-via-memory2
base: machine_arguments
Could not load branches
Branch not found: {{ refName }}
Could not load tags
Nothing to show
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
georgwiese
changed the title
Machines communicating through shared memory
[WIP] Machines communicating through shared memory
May 16, 2024
This was referenced May 20, 2024
github-merge-queue bot
pushed a commit
that referenced
this pull request
May 21, 2024
Cherry-picked ef6a72f from #1380. With this PR, we track whether a call to a machine led to some side effect (e.g. added a block). In that case, the processed identity should count has having led to some progress, even if no values were returned to the calling machine. An example would be writing values to memory, which does not return any values and hence does not change the state of the caller.
github-merge-queue bot
pushed a commit
that referenced
this pull request
May 28, 2024
*Cherry-picked b1a07bd from #1380, and extended on it.* Fixes #1382. With this PR, a lookup like `selector { byte_lower + 256 * byte_upper } in { <some other machine> }` works, even if the range constraints on `byte_lower` and `byte_upper` are not "global". For example, they could be implemented as `selector { byte_lower } in { BYTES }` (i.e., `byte_lower` is only range constrained when the machine call is active). To make this work, I changed the `Machine::process_plookup` interface like this: ```diff fn process_plookup<'b, Q: QueryCallback<T>>( &mut self, mutable_state: &'b mut MutableState<'a, 'b, T, Q>, identity_id: u64, - args: &[AffineExpression<&'a AlgebraicReference, T>], + caller_rows: &'b RowPair<'b, 'a, T>, ) -> EvalResult<'a, T>; ``` The `RowPair` passed by the caller contains all range constraints known at runtime. The LHS of the lookup (or permutation) is no longer evaluated by the caller but by the callee. For this, the callee needs to remember the identity associated with the `identity_id` (before this PR, most machines just remembered the RHS, not the full identity). I don't expect there to be any performance implications, because we only invoke one machine (since #1154). ### Benchmark results ``` executor-benchmark/keccak time: [14.609 s 14.645 s 14.678 s] change: [-2.5984% -2.3127% -2.0090%] (p = 0.00 < 0.05) Performance has improved. executor-benchmark/many_chunks_chunk_0 time: [39.299 s 39.380 s 39.452 s] change: [-3.9505% -3.6909% -3.4063%] (p = 0.00 < 0.05) Performance has improved. ``` --------- Co-authored-by: Leo <leo@powdrlabs.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Building on #1356, this PR re-writes some of the std machines to communicate via a shared memory.
To test:
Next steps:
While the arithmetic machine clearly benefits from this approach, it is less obvious if it is also beneficial for the Poseidon machines. They have fewer arguments to start with, and I needed to add more witness columns (one for each state element, so that the input state is available in all rows) and fixed columns (a clock). The arithmetic machine had all that already anyway.