« Par ce que a+b+c+d sera plus lent que (a+b)+(c+d) car tu enlèves une dépendance read-after-write. »
Non. Enfin, je trouve que tu as mal formulé. Suivant le langage, tu as des certitudes ou pas concernant l'évalutation des opérandes. Par exemple, avec C, tu n'as aucune certitude quant à l'ordre d'évaluation de res = a + b + c +d. En Java, il est spécifié que les opérandes sont évalués de gauche à droite.
Maintenant évidemment, « dans le doute », tu peux parenthéser. Mais normalement, l'utilisation de transformations optimisantes dans les compilateurs est justement censer t'éviter de tout faire à la main.
Typiquement, avec la mise sous forme SSA, les fausses dépendances (WAW, RAR, WAR) peuvent être éliminées, et les opérations indépendantes mises en valeur et réordonnancées -- et ce, quel que soit l'ordre souhaité par le programmeur à la base. Tout ceci sans parler des processeurs qui exécutent les instructions dans le désordre, bien entendu.
[^] # Re: Quelques infos
Posté par lasher . En réponse au journal Comment les programmeurs écrivent du code flottant ?. Évalué à 1.
Non. Enfin, je trouve que tu as mal formulé. Suivant le langage, tu as des certitudes ou pas concernant l'évalutation des opérandes. Par exemple, avec C, tu n'as aucune certitude quant à l'ordre d'évaluation de res = a + b + c +d. En Java, il est spécifié que les opérandes sont évalués de gauche à droite.
Maintenant évidemment, « dans le doute », tu peux parenthéser. Mais normalement, l'utilisation de transformations optimisantes dans les compilateurs est justement censer t'éviter de tout faire à la main.
Typiquement, avec la mise sous forme SSA, les fausses dépendances (WAW, RAR, WAR) peuvent être éliminées, et les opérations indépendantes mises en valeur et réordonnancées -- et ce, quel que soit l'ordre souhaité par le programmeur à la base. Tout ceci sans parler des processeurs qui exécutent les instructions dans le désordre, bien entendu.