11.8.3.2 : Impact de la parallélisation sur la précision

Toutes les approches jusqu'à présent s'appliquent déjà à des programmes séquentiels. La validation de la précision de calculs avec des programmes parallélisés passe au début par une démarche analogue~: la comparaison du résultat en séquentiel et en parallèle peut déjà être surprenante. En effet, la première différence entre la version séquentielle et la version parallèle d'un calcul vient de l'ordre des séquences d'opérations~: par exemple, les réductions d'un Monte-Carlo vont passer d'une longue somme des résultats de chaque itération dans la version séquentielle à une somme des sommes partielles issues de la sous-séquence de chaque thread. Mathématiquement, l'associativité et la commutativité de l'addition des nombres réels nous garantissent l'identité des résultats. Mais les nombres à virgule flottante ne vérifient pas ces deux propriétés élémentaires avec la même systématique. Dans ce cas, on peut améliorer cette approche en utilisant des accumulateurs de plus haute précision, ou des algorithmes de sommation comme celui de W.~Kahan~[204]Pracniques: Further Remarks on Reducing Truncation Errors, 1965, Kahan, William, mais cela complique l'expression du code et devient difficilement applicable à tous les calculs parallélisés.

Parallélisation tous azimut du code : remise en cause de la reproductibilité des calculs, et problème de la validité des résultats. Peut-on faire certains calculs avec une précision moindre ? Doit-on faire certains calculs avec une précision plus grande ? Commencer un calcul itératif en précisions basse, et passer en précisions haute pour la fin ? Nouveau joueur, le BF16 : \url{https://en.wikichip.org/wiki/brain_floating-point_format}. Les réponses de l'arithmétique stochastique.