"ou alors est-ce qu'on se débrouille simplement pour éviter ce genre d'aléas en séparant bien les étages du pipeline au niveau de la mémoire par exemple.. "
c'est le cas pour les cpu x86 intel/amd qui ont plusieurs ordonnanceurs (scheduler):
l’ordonnanceur du reorder buffer ordonne les instructions en fonction de leur inter-dépendance[1], alloue les registres privés et sépare les instructions mémoire des autres
sur deux file d’attente FIFO. la file mémoire sert a nourrir l’ordonnanceur mémoire qui s'occupe de gérer les load-store unit, l'autre file sert a nourrir les ordonnanceurs alu lent, alu rapide, fpu rapide, et fpu lent/simd (chaque ordonnanceur possède sa propre file d'attente).
donc, en gros, seul l'ordonnanceur du reorder buffer s'occupe de l’exécution dans le désordre alors que les 4 sous-ordonnanceurs prennent les instructions dans l'ordre (queue FIFO) mais peuvent les exécuter parallèlement (si ya plusieurs unités d’exécution).
pour alimenter le reorder buffer de façon constante, le frontend utilise un trace-cache[2] qui peut contenir plus de 12 000 instructions décodées.
[1] http://en.wikipedia.org/wiki/Tomasulo_algorithm
[2] http://en.wikipedia.org/wiki/CPU_cache#Trace_cache