WebAssembly / WebAssembly/binaryen
`wasm-opt -Oz` takes an inordinate amount of time
Nobody has claimed this yet.
- Dominant language
- WebAssembly
- Stars
- 8.6k
- Forks
- 885
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 69
Description
Firstly: yay, thank you for fixing the control-flow values issue in the parser! Binaryen can now work on Hoot's binaries. Thank you thank you!
I noticed a performance bug that you may be interested in, for -Oz.
| optimization level | bytes | real time | user time |
|---|---|---|---|
| original | 5485027 | - | - |
-O0 |
5835468 | 0.74s | 1.18s |
-O1 |
4810648 | 2.96s | 65s |
-O2 |
4664753 | 5.34s | 104s |
-Os |
4378817 | 806s | 1081s |
-Oz |
4278988 | 804s | 1103s |
This is a 32-logical-cpu system. As you can see, -Os / -Oz don't parallelize very well, and takes a bit too long to get useful results.
I can provide the test file, should that be of interest, though github doesn't seem to want to attach it. Enabled features are --enable-bulk-memory --enable-multivalue --enable-reference-types --enable-gc --enable-tail-call --enable-exception-handling.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the issue through the wasm-opt entry point using the reported optimization levels and enabled features; the test binary is not included in this issue. Compare parallelism and runtime for -Os and -Oz against -O1 and -O2, then verify that any change improves optimization time without losing the reported size results.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- wasm
- Domain
- compilers, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100