Principe du pipelining dans les processeurs.
Dans les processeurs, le pipelining permet de découper une instruction en plusieurs étapes séquentielles tout en exécutant plusieurs instructions en parallèles . Avec un pipeline, le processeur peut commencer à exécuter une nouvelle instruction sans attendre que la précédente soit terminée. Le nombre d’étapes d’un pipeline est appelé profondeur.
Exemple: une instruction découpée en plusieurs étapes.
int x = varA + varB
L’ instruction peut être découpée en plusieurs sous étapes: décoder l’instruction, calculer la somme de valA et de valB, et écrire le résultat dans x
On remarque que l’instruction a été découpée en sous étapes séquentielles, et que l’on peut aisément introduire du parallélisme entre plusieurs instructions, car l’unité de calcul du processeur qui s’occupe d’une étape, devient libre, une fois l’étape finie.
Ainsi, si on doit exécuter trois instructions indépendantes, on aura:
On remarque aisément les avantages, dans l’exemple précédent, en 5 unités de temps, on a effectué 3 instructions. Sans le parallélisme induit par le pipelining, cela aurait pris 9 unités de temps.
Le pipelining permet donc de gagner du temps en gardant toutes les portions du processeur occupées.
Il y a aussi un avantage économique induit par le pipelining, En rendant les étapes indépendantes et simples, on peut effectuer des instructions complexes, sans avoir à implémenter des circuits complexes, car celle-ci va être subdivisée en sous étapes plus simples.
On remarque que plus l’instruction est subdivisée, plus on peut faire d’étapes en parallèles, donc on peut faire plus d’instructions en parallèles, et par conséquent plus le traitement d’instructions ira vite, mais ce n’est pas aussi simple.
Inconvénients et limitations
1. En découpant une instruction en étapes modulaires, le pipelining requiert parfois la duplication de registres, ce qui peut ralentir l’exécution d’une instruction. Même si sauver le résultat dans un registre, et lire un registre sont deux opérations très rapides, le temps nécessaire au traitement de l’instruction augmente tout de même.
2. Si une instruction doit utiliser le résultat d’une autre instruction, alors celles-ci seront traitées de manière séquentielles et non en parallèle, ce qui rend moins efficace le pipelining.
Exemple:
add R3 to R5
copy R5 to R6
Ici on ne pourra pas faire l’étape “exécuter instruction” de l’instruction 2, dans que l’instruction 1 ne soit terminée.
3. Si on veut pouvoir prévoir le temps exacte que prendra un programme, alors le pipelining est déconseillé.
4. On a aussi une limitation appelée délais non uniformes, si une des étapes est plus longues que les autres, alors l’instruction suivante aura terminée son étape avant et devra attendre que l’instruction courante soit finie.
Mais le Subway dans tout ça?
Prenons l’analogie d’un restaurant afin d’illustrer nos propos.
Au lieu de s’occuper d’un client de A à Z avant de passer au suivant, un employé passe une des étapes avec le client, avant de passer au client suivant. Et le client passe d’étape en étape avec différents employés.
Ainsi si on a 5 étapes qui prennent toutes 1 minute, si on devait s’occuper de 5 clients un par un, cela prendrait 25 minutes. Avec la division du travail et le fait qu’on peut avoir un client à l’étape n et un autre à l’étape n+1, pour s’occuper de 5 clients, cela prendrait 9 minutes.
Ici les inconvénients précédents sont devenus:
1) La perte de temps provoquée par le cuisinier de l’étape courante, qui demande à celui de l’étape précédente quel est le sandwich en cours de préparation.
2) Un client indécis qui attend de voir à quoi ressemble le sandwich précédent, pour prendre le même ou pas.
3) Un client qui ne sait pas exactement combien de temps prendra la préparation du repas.
4) Le cuisinier qui met la viande et qui attend que le sandwich précédent ait cuit, pour pouvoir y mettre le sandwich courant.
Conclusion
Le pipelining est devenu indispensable dans les processeurs modernes car il en augmente grandement la vitesse. Cependant ce n’est pas une solution miracle , le pipelining a ses limites. Et on observe qu’augmenter la profondeur des pipelines n’implique pas forcément un gain de performances.
Joan Flécheux, Yangfeng Jin, Amine Lounaci, Paul-andrea Parisot, Jérémy Phalente