Make compilation faster :rocket:
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Refactorización
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- cpp, wasm
- Área
- compilers, performance
Línea de trabajo
El issue proporciona mediciones de tiempo con -O3 y recuentos de malloc para passes que incluyen once-reduction, precompute-propagate, dae, heap2local, inlining y vacuum, pero no menciona archivos ni tests. Empieza reproduciendo las mediciones sobre la salida de j2cl de 50MB y perfilando esos passes; se considera completado cuando haya una reducción documentada y medible del tiempo de compilación.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I did some investigation on the speed of compilation. This is getting important because of things like j2cl output which is a 50MB real-world file.
Slowest passes: (in -O3; note that some passes run more than once)
[PassRunner] running pass: precompute-propagate... 14.23460 seconds.
[PassRunner] running pass: dae... 10.91160 seconds.
[PassRunner] running pass: heap2local... 10.44350 seconds.
[PassRunner] running pass: precompute-propagate... 9.07261 seconds.
[PassRunner] running pass: inlining... 8.02837 seconds.
[PassRunner] running pass: once-reduction... 8.02484 seconds.
[PassRunner] running pass: vacuum... 5.16162 seconds.
[PassRunner] running pass: vacuum... 3.64088 seconds.
[PassRunner] running pass: vacuum... 3.58191 seconds.
[PassRunner] running pass: vacuum... 3.61897 seconds.
perf reports almost 15% of time is spent in malloc/free methods - quite a lot. I counted how many mallocs (note: not the size of them) are done in each pass, here are the heaviest (note: timings here include the overhead of counting mallocs atomically among threads, so those matter less):
once-reduction... 9.51466 seconds. 141558196 mallocs.
precompute-propagate... 14.7426 seconds. 61611533 mallocs.
dae... 11.3789 seconds. 53792948 mallocs.
precompute-propagate... 9.69919 seconds. 39531493 mallocs.
heap2local... 10.5116 seconds. 38582302 mallocs.
local-cse... 4.70765 seconds. 33454468 mallocs.
cfp... 2.43619 seconds. 32292682 mallocs.
ssa-nomerge... 4.92099 seconds. 26378117 mallocs.
simplify-locals-nostructure... 6.03281 seconds. 22663794 mallocs.
vacuum... 5.10813 seconds. 23880789 mallocs.
inlining... 107.781 seconds. 20940365 mallocs.
dce... 3.84722 seconds. 20025273 mallocs.
local-subtyping... 3.44374 seconds. 19067529 mallocs.
and vacuum runs 3 more times:
vacuum... 3.71648 seconds. 16648663 mallocs.
vacuum... 3.86917 seconds. 16302767 mallocs.
vacuum... 3.89855 seconds. 16162915 mallocs.
Help in speeding things up would be very welcome!
- Lenguaje dominante
- WebAssembly
- Estrellas
- 8.6k
- Forks
- 885
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 77
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de WebAssembly/binaryen
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
WebAssembly/binaryen#9135 · 1 comentario ·
-
Dificultad 2/5 Medio día Aptitud para principiantes 76/100
WebAssembly/binaryen#9018 · 3 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
WebAssembly/binaryen#9133 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
WebAssembly/binaryen#9123 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
WebAssembly/binaryen#9122 ·
Todos los issues de WebAssembly/binaryen
Issues similares
-
flang:fir-hlfir
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
llvm/llvm-project#225935 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
objectionary/eo#8923 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Coarray integration tests carry no LABELS, so run_tests.py silently skips them under every backend Abiertocoarray
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100