-
Notifications
You must be signed in to change notification settings - Fork 3
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
Optimization: Modify Heap
read and write related functions
#216
Conversation
Ergs comparison results:
|
Heap
read and write related functions (wip)Heap
read and write related functions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Only make sure your zksync-era
branch is merged with the era_vm_integration_v2
to run all the current tests and make sure we haven't break anything over there.
Heap
read and write related functionsHeap
read and write related functions (wip)
pub fn read_unaligned_from_pointer(&self, pointer: &FatPointer) -> Result<Vec<u8>, HeapError> { | ||
let mut result = Vec::new(); | ||
let start = pointer.start + pointer.offset; | ||
let finish = start + pointer.len; | ||
for i in start..finish { | ||
if i as usize >= self.heap.len() { | ||
return Err(HeapError::ReadOutOfBounds); | ||
} | ||
result.push(self.heap[i as usize]); | ||
} | ||
Ok(result) | ||
let start = (pointer.start + pointer.offset) as usize; | ||
let finish = (start + pointer.len as usize).min(self.heap.len()); | ||
Ok(self.heap[start..finish].into()) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Given there seems to be no error conditions here, maybe just avoid returning Result
?
Also, it may be a good idea to return a slice rather than a Vec.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, that's better.
Heap
read and write related functions (wip)Heap
read and write related functions
Description
This PR improves vm performance by updating
Heap
read and write related functions.Inspiration
We are currently iterating and applying
U256
operations with afor
loop on someHeap
functions, likeread
. It works, but it's not very efficient. We may replace this with functions likeU256::from_big_endian
instead.Changes
Heap::store
Heap::read
Heap::expanded_read
Heap::read_unaligned_from_pointer
Results
heap_read_write
.event_spam
benches.