Ce genre de remarques me fait d'autant plus réagir que je suis en train de rédiger la partie expérimentale d'un article scientifique et qu'il y a des tas de sources d'"artefacts" où l'on croit remarquer un effet alors que le mécanisme est fortuit. https://twitter.com/GuillaumeRozier/status/1260264187235905543
Tenez : pourquoi est-ce qu'une optimisation produisant du code intermédiaire "objectivement mieux" peut conduire à une perte de performance au final ?
Donc je vous donne un phénomène constaté: l'allocation de registres va, suivant le code qu'on lui met en entrée, réutiliser ou non certains registres ce qui parfois pose problème si on réordonne les instructions après allocation.
Une amélioration du code avant allocation de registres peut, si on n'a pas de chance, produire une allocation qui réutilise un registre d'une façon qui empêche un réordonnancement bénéfique dans une boucle chaude.
Conséquence: parfois on commente sur l'impact d'optimisations alors qu'il y a un gros facteur "chance" dû à l'allocateur de registres.
Il y a d'autres phénomènes tels que: le hasard (bien qu'il ne s'agisse pas d'aléatoire, tout est déterministe) du placement en mémoire induit des effets sur le cache qui peuvent donner des écarts de quelques %, parfois du même ordre que ce que les gens essayent de mesurer.
You can follow @MonniauxD.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled: