18 / 24 · Concept
Dépendances, aléas de ressources et acheminement direct
Comparez blocage et acheminement direct lorsqu’une opération nécessite un résultat précédent.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Le chevauchement exige plus que la conservation de l’ordre
Des calculs indépendants en flux ne lisent pas les résultats précédents : leurs transactions peuvent donc se chevaucher sans risque. Un opérateur avec banc de registres peut au contraire nécessiter le résultat d’une opération précédente. Lire un registre avant qu’une écriture plus ancienne ne soit disponible crée un aléa de données de lecture après écriture. L’arithmétique peut être correcte alors que son opérande a été échantillonné trop tôt.
Commencez avec R1=4. Soit I0 réalisant R1←R1+3 et I1 réalisant R2←R1×2. Dans cet exemple, I0 capture l’opérande 4 au front 0, calcule 7 pendant le cycle suivant et écrit R1 au front 1. I1 échantillonnant R1 au front 1 peut voir l’ancienne valeur 4, produisant R2=8. L’exécution séquentielle exige R2=14. Définissez explicitement le comportement lecture/écriture du banc de registres au même front.
| Solution | Opérande vu par I1 | Exigence |
|---|---|---|
| Lire l’ancien R1 | 4 | Incorrect ici |
| Bloquer jusqu’au front 2 | 7 | Conserver l’opération et les champs associés |
| Acheminer directement le résultat d’exécution | 7 juste avant le front 1 | Résultat disponible et chemin respectant la temporisation |
L’acheminement direct sélectionne un résultat calculé avant son arrivée dans le stockage architectural. Faire correspondre les numéros de destination ne suffit pas : le producteur doit être valide, écrire réellement le registre et avoir un résultat prêt. Avec plusieurs producteurs correspondants, choisissez l’opération plus ancienne la plus récente. N’acheminez jamais une bulle ou une opération purgée.
Un chargement dont la réponse n’est pas arrivée ne peut pas être corrigé par l’acheminement de données indisponibles. Bloquez le consommateur en conservant le code d’opération, les identifiants de source et l’étiquette. Décidez si d’autres étages indépendants peuvent continuer.
Les aléas structurels apparaissent lorsque deux étages nécessitent le même port mémoire au même instant. Un arbitrage ou des ressources supplémentaires sont nécessaires même sans dépendance de données. Les branchements introduisent des aléas de commande nécessitant l’annulation du travail sur le mauvais chemin. Analysez ce qu’attend chaque opération et l’état à conserver. Notre projet final reste un flux indépendant ; sa réussite ne prouve pas la gestion des dépendances d’un processeur.
Essayez vous-même
Avec R1=4, I0 ajoute trois et I1 double le résultat. Comparez le résultat de I1 issu de l’ancien stockage et d’un acheminement direct correct. Que se passe-t-il si I0 est un chargement dont les données ne sont pas encore disponibles ?
Lire l’explication
Lire l’ancien 4 donne 8 ; acheminer 7 donne 14. Un résultat de chargement indisponible exige de bloquer le consommateur en conservant son opération et son étiquette. Une correspondance de destination ne justifie pas l’acheminement de données inachevées.