ChainSafe / ChainSafe/ssz

Improve performance of digest64

Open
#357 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
61
Forks
26
Avg merge
3h 20m
Merged PRs (30d)
6

Description

Some improvement could be done:

- Use latest assemblyscript yields better performance
- Chain w computation to the main loop in hashBlocks()
- Return result by using Uint8Array.slice()

```
digestTwoHashObjects vs digest64 vs digest
✓ digestTwoHashObjects 50023 times 19.25844 ops/s 51.92528 ms/op - 67 runs 3.98 s
✓ digest64 50023 times 20.23583 ops/s 49.41730 ms/op - 12 runs 1.11 s
✓ digest 50023 times 20.31116 ops/s 49.23402 ms/op - 13 runs 1.19 s
```
this branch

```
digestTwoHashObjects vs digest64 vs digest
✓ digestTwoHashObjects 50023 times 21.91978 ops/s 45.62089 ms/op - 1304 runs 60.0 s
✓ digest64 50023 times 21.11148 ops/s 47.36759 ms/op - 1256 runs 60.0 s
✓ digest 50023 times 20.90464 ops/s 47.83628 ms/op - 1244 runs 60.0 s
```

however benchmark result in CI consistently shows worse statistics so need to investigate this, may need to separate to smaller PRs in order to figure out the issue

_Originally posted by @tuyennhv in https://github.com/ChainSafe/ssz/issues/347#issuecomment-1972804385_

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by locating digest64, digestTwoHashObjects, digest, and hashBlocks() in the TypeScript implementation, then run the existing digest benchmarks locally and compare them with CI results. Investigate the listed assemblyscript, hashBlocks() chaining, and Uint8Array.slice() ideas separately; done means a verified performance improvement that does not reproduce the CI regression.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
performance
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.