Brevet FR2801694A1 — publié le 20010601

La présente invention concerne des systèmes informatiques numériques ou, en autres termes, des systèmes d'ordinateurs numériques et, plus particulièrement mais non à titre limitatif, des procédés et des appareils d'exécution d'instructions dans de tels systèmes. Dans des systèmes informatiques x86, l'unité à virgule flottante, ou FPU selon les initiales du terme anglo-saxon floating point unit, comprend une série de registres de données. Des instructions à virgule flottante traitent cette série de registres de données en tant que pile de registres. Tout adressage des registres de données concerne le registre supérieur de la pile. Le numéro du registre supérieur actuel de la pile est mémorisé dans un champ pile désigné par le terme anglo-saxon TOP, qui désigne le registre supérieur. Par conséquent, des opérations de chargement décrémentent de un le champ TOP et chargent une valeur dans le nouveau registre supérieur de la pile, tandis que des opérations de mémorisation entrent en mémoire la valeur provenant du registre supérieur actuel de la pile et incrémentent ensuite de un le champ TOP. Mais de nombreuses instructions à virgule flottante n'interviennent que sur le registre supérieur ou les deux registres supérieurs d'une pile de registres. Si l'information souhaitée est par exemple située dans le quatrième registre de la pile, il faut donc exécuter une ou plusieurs opérations avant que l'information du quatrième registre de la pile puisse être déplacée vers le registre supérieur de la pile où il est possible d'intervenir sur cette information. Ceci crée un "goulot d'étranglement" dans la pile. A cet effet, l'instruction d'échange des contenus des registres à virgule flottante, désignée par FXCH est utilisée dans l'architecture informatique IA-32 pour échanger l'information de virgule flottante d' registre sélectionné de la pile avec l'information du registre supérieur de la pile. Par exemple, l'instruction FXCH ST (0) , ST (i) échange l'information contenue dans le registre supérieur de la pile, désigné par ST(0), avec celle du i-ième registre de la pile désigné par ST(i). I1 est possible de remédier de cette manière au goulot d'étranglement de la pile de registres en mettant l'information souhaitée au sommet de la pile la plupart des instructions de virgule flottante peuvent la traiter. Une information plus détaillée concernant l'instruction FXCH peut être trouvée dans le document Intel Architecture Software Developer's Manual, c'est- à-dire Manuel du développeur de logiciels d'architecture Intel, Volumes 1 à 3, qui sont incorporés ici par référence. Dans de nombreuses architectures informatiques, instructions comme l'instruction FXCH doivent être exécutées par émulation parce que les éléments matériels natifs qui prennent en charge une telle instruction ne sont pas présents. Une méthode d'émulation de l'instruction FXCH dans de telles architectures consiste à utiliser une technique appelée renommer le registre. Lorsqu'un registre est renommé, les registres physiques concernés, par exemple ST(0) et ST(i) sont appliqués dans une application de registres de la pile. Pour échanger les contenus de deux registres physiques, les pointeurs qui appliquent les registres physiques dans l'application de registre de la pile sont modifiés ou "repointés", de leur registre d'origine vers l'autre registre et l'opération est ainsi exécutée. Mais renommer des registres pose au moins le problème que les pointeurs doivent être mémorisés dans des éléments matériels additionnels, ce qui augmente coût et la complexité du système et consomme en outre de l'espace de haute valeur. Une autre méthode d'émulation de 'instruction FXCH consiste à exécuter en séquence au moins trois instructions de micro-code de la manière suivante: move temp := ST (0): move ST (0) :=ST(i); move ST (i) :=temp: où move signifie déplacer et temp signifie temporaire. C'est là le procédé classique d'échange des contenus de registres. Cette séquence d'instructions utilise un registre temporaire pour commuter le contenu du registre supérieur ST(0) et du i-ième registre ST(i) . Ce procédé d'émulation, qui consiste trois instructions de micro-code, consomme trois fois plus de cycles d'horloge que l'instruction FXCH unique et peut même consommer davantage dans certains selon la latence associée aux opérations de déplacement. C'est donc un but de la présente invention que de fournir, pour remédier à ces problèmes, des procédés des appareils d'émulation d'une instruction FXCH qui évitent des éléments matériels excessifs et qui consomment relativement peu de cycles d'horloge. C'est plus généralement un but de la présente invention que de fournir des procédé et des appareils permettent un échange relativement rapide et efficace des contenus de deux registres. Selon un premier aspect, l'invention atteint ces buts au moyen d'un procédé d'émulation d'une instruction qui commute les contenus d'un registre supérieur de la pile et d'un registre sélectionné de pile, dans lequel le registre supérieur de la pile et le registre sélectionné de la pile sont dépendants, caractérise en ce qu'il comprend les étapes consistant à. passer outre à la dépendance du registre supérieur la pile et du registre sélectionné de la pile; et exécuter en parallèle une première instruction, qui déplace vers le registre sélectionné de la pile le contenu registre supérieur de la pile, et une deuxième instruction qui déplace vers le registre supérieur de la pile le contenu du registre sélectionne de la pile. Lorsqu'une exception par insuffisance de capacité se produit lors d'une première tentative d'exécution de la première et de la deuxième instructions le procédé peut comprendre en outre les étapes consistant à: déterminer si le registre supérieur de la pile est vide, et le registre supérieur de la pile est vide, remplacer par un QNaN le contenu du registre supérieur de la pile et, le registre supérieur de la pile n' pas vide, remplacer par un QNaN le contenu du registre sélectionné de la pile. Le procédé peut comprendre en outre l'etape consistant à: remplacer par un QNaN le contenu du registre sélectionné de la pile si le registre supérieur la pile est vide lors de la première tentative d'exécution de la première et de la deuxième instruction et si une exception par insuffisance de capacité de la pile se produit lors d'une deuxième tentative d'exécution de la première et de la deuxième instruction. Selon un deuxième aspect, l'invention fournit un procédé à mettre en oeuvre dans un système informatique à base de processeurs qui inclut une logique de contrôle de dépendance et une pile de registres, caractérisé en ce qu'il comprend les étapes consistant à: passer outre à la logique de contrôle de dépendance de façon que des instructions de deplacement associées aux registres de la pile puissent être exécutées en parallèle; exécuter les instructions de déplacement en parallèle; et déterminer si une exception par insuffisance de capacité de la pile s'est produite et, si l'exception insuffisance de capacité de la pile s'est produite, vider les instructions de déplacement; et appeler un algorithme gestionnaire de micro- code qui intervient pour permettre une exécution des instructions de déplacement en parallèle sans exception par insuffisance de capacité de la pile. Lorsque la pile de registres comprend un registre supérieur et un registre susceptible d'être selectionné, l'étape d'appel d'un gestionnaire micro-code peut inclure en outre l'étape consistant à: déterminer si le registre supérieur de la pile vide et, si le registre supérieur de la pile vide, remplacer son contenu par une réponse architecturale appropriée. L'étape qui détermine si le registre supérieur la pile est vide peut alors comprendre en outre l'étape consistant à: remplacer le contenu du registre sélectionné la pile par une réponse architecturale appropriée le registre supérieur de la pile n'est pas vide. Dans ce cas le procédé peut comprendre en outre l'étape consistant à: exécuter les instructions de déplacement parallèle si le contenu du registre supérieur ou du registre susceptible d'être sélectionné a été remplacé par réponse architecturale appropriée. Selon un troisième aspect, l'invention réalise un processeur qui comprend: logique de contrôle de dépendance; et une pile de registres qui inclut un registre supérieur et une série d'autres registres; et qui est caractérisé en ce qu'il est configuré de manière à: passer outre à la logique de contrôle dépendance de façon que des opérations liées à la pile de registres puissent être exécutées en parallèle; commuter de façon sensiblement simultanée contenu du registre supérieur de la pile de registres et le contenu d'un autre registre de la pile de registres et vice versa, de façon qu'aucun risque ne se produise; et exécuter un algorithme qui remplace par une réponse architecturale appropriée le contenu du registre supérieur, de l'autre registre ou des deux registres si une exception apparaît lorsque les contenus des deux registres sont commutés. La réponse architecturale appropriée peut être un QNaN. Le processeur peut comprendre en outre: au moins deux unités d'exécution et une mémoire morte, ou ROM, la mémoire morte mémorisant un gestionnaire qui peut mettre en application la réponse architecturale appropriée. buts, particularités et avantages de la présente invention exposés ci-dessus ainsi que d'autres ressortiront davantage de la description qui suit modes de réalisation préférés en conjonction avec les dessins dans lesquels: la Figure 1 est un schéma fonctionnel d'un systeme informatique qui inclut la présente invention; la Figure 2 est un schéma fonctionnel du processeur de la Figure 1; la Figure 3 est une illustration d'opérations en pipe line ou en lockstep selon le terme anglo saxon, littéralement en pas verrouillé, c'est-à-dire à fonctionnement en synchronisme, la Figure 4 est un schéma logique du fonctionnement du gestionnaire de micro-code en cas de défaillance par insuffisance de capacité de pile selon la présente invention. La Figure 1 illustre un système informatique 10 dans lequel la présente invention peut être mise en application. Le système informatique 10 comprend au moins un processeur 20, une mémoire principale 30, et divers bus d'interconnexion, désignés collectivement par 40, pour les données, les adresses et les commandes. Un ensemble 50 d'instructions, qui peut être un ensemble d'instructions hôte, et un système d'exploitation 60 peuvent être mémorisés dans la mémoire principale 30. Comme illustré à la Figure 2, le processeur 20 comprend une unité 70 à virgule flottante, une logique 80 de contrôle d'acheminement ou de dépendance, au moins deux unités d'exécution 90a et 90b, une mémoire morte 100 de micro-codes, une pile 120 registres qui comprend dans le présent exemple huit registres individuels 120(1) à 120 un registre 130 de mots d'étiquettes à virgule flottante ou FPTW selon les initiales du terme anglo-saxon floating point tag word et divers et interconnexions désignés collectivement par 110. L'homme de l'art note qu'il n'existe pas nécessairement une unité séparée à virgule flottante: les unités d'exécution sont tout aussi capables d'exécuter des instructions à virgule flottante. Des instructions sont envoyées de la mémoire principale 30 au processeur 20. Les instructions envoyées au processeur 20 sont des instructions de macrocode qui s'appliquent dans une ou plusieurs instructions 140 de micro-code mémorisées dans la mémoire morte 100 de micro-codes. Les instructions de micro-code peuvent être exécutées directement le processeur 20. Un ensemble de gestionnaires 150 de micro-codes qui peuvent être appelés pour gérer des exceptions de processeur est lui aussi mémorisé dans la mémoire morte 100 de micro-codes. L'unité 70 à virgule flottante accède à la pile 120 de registres pour mémoriser et restituer des données en réponse à des instructions. Le registre 130 de mots d'étiquettes à virgule flottante est mis à jour de façon correspondante. L'architecture du processeur 20 peut être en pipe line et peut permettre de traiter certaines instructions en parallèle. La logique 80 de contrôle de dépendance intervient pour déterminer les instructions qui peuvent être traitées en parallèle, c'est-à-dire pour déterminer s'il faut envoyer aux unités d'exécution 90 deux instructions ou une instruction par cycle. Après avoir décrit un mode de réalisation, on va maintenant décrire son mode de fonctionnement en exposant en premier lieu une exécution parallèle d'instructions de déplacement, puis une exception par insuffisance de capacité de la pile. Cet exposé sera suivie de quelques remarques. Pour exposer le mode de fonctionnement, on suppose que les instructions suivantes sont envoyées au processeur 20. ST(i):= moue ST(0); ST (0) := move ST (i) ; où moue signifie déplacer comme précédemment. Dans un processeur séquentiel, cette séquence de code ne peut pas échanger les contenus deux registres ST (0) et ST(i). Dans un processeur sequentiel, chaque instruction est exécutée façon indépendante et sérielle. Par conséquent, dans cette sequence, la première instruction écrase ST ' avant que la deuxième instruction ne lise ST (i) et le résultat placé dans ST (0) est ST(0) au lieu ST(i). résultat est évidemment incorrect. Pour exécuter correctement l'échange souhaité, le procédé classique exigerait, comme noté déjà, un emplacement temporaire additionnel et une instruction additionnelle. En revanche, le système informatique 10 de la présente invention émule l'instruction FXCH en amenant a force une exécution en parallèle des deux instructions de déplacement, ce qui est illustré de façon conceptuelle ci-dessous ST(i):=move ST(0) ST(0):= moue ST (i . Puisque ces deux instructions modifient chacune un registre utilisé par l'autre instruction, les éléments matériels empêcheraient normalement leur exécution en parallèle. Par conséquent, la présente invention prévoit un mécanisme pour amener à force les éléments matériels à passer outre à la logique de contrôle de dépendance et pour amener à force les éléments matériels à exécuter en parallèle deux instructions. Les deux instructions sont envoyées aux unités d'exécution respectives 90a et 90b qui ( lisent chacune sensiblement en même temps leur opérande respectif, écrivent sensiblement en même temps leurs résultats, au moins un cycle d'horloge après la lecture, et (3) finissent sensiblement en même temps l'exécution de leurs instructions, c'est-à-dire qu'elles fonctionnent en synchronisme ou en lockstep selon le terme anglo-saxon déjà expliqué. La latence associée unités d'exécution respectives 90a et 90b est telle que ceci peut être réalisé. Cette exécution en fonctionnement en synchronisme est illustrée conceptuellement à la Figure 3. De cette manière, le système informatique 10 peut effectivement émuler l'instruction FXCH en un temps sensiblement moindre ce qu'exigerait une exécution des trois instructions de déplacement d'un système séquentiel. On va maintenant decrire l'exception par insuffisance de capacité de la pile. Dans des microprocesseurs superscalaires modernes, c'est-à-dire des processeurs qui peuvent exécuter de multiples instructions en parallèle, toutes les exceptions sont précises, c'est-à-dire que, dès lorsqu'une opération est défaillante, toutes les opérations "plus jeunes" du pipe-line doivent être vidées. Mais aucun registre temporaire n'est utilisé dans la présente invention pour contenir des résultats intermédiaires d'opération du pipe-line, c'est-à-dire que les deux instructions sont achevées en synchronisme. Si l'une ou l'autre des deux instructions de déplacement ci-dessus provoque une exception, les deux instructions de déplacement sont donc vidées et exécutées de nouveau en parallèle pour empêcher toute corruption de données. Mais un tel fonctionnement n'est pas classique pour de nombreux microprocesseurs. Ce type fonctionnement est approprié si la "première" instruction provoque l'exception, mais non si la "deuxième" instruction la provoque. Dans ce cas, un fonctionnement classique dicte que la "première" instruction ne serait pas vidée, comme représenté dans l'exemple ci-dessous: ST(i):= mov ST (0) ST .= mov ST (i) "première" "deuxième" "plus ancienne" "plus jeune" Selon la présente invention, le système informatique 10 vide donc les deux opérations lorsque l' ou l'autre provoque un défaut. Une exception qui peut apparaître lorsque ces instructions de déplacement sont exécutées est appelée exception par "insuffisance de capacité de la pile". Une exception par insuffisance de capacité de la pile se produit lorsqu'une opération tente de lire le contenu d'un registre vide 120(1) à 120 de la pile. Un mot d'étiquette à virgule flottante mémorisé dans le registre 130 de mots d'étiquette à virgule flottante indique si un registre 120(1) à 120(7) de la pile est vide ou non. Une réponse architecturale définie à une insuffisance de capacité de la pile consiste à remplacer le registre vide par un QNaN et exécuter ensuite de nouveau l'instruction. Alors que des éléments matériels peuvent être ajoutés à l'intérieur des unités d'exécution 90a et pour indiquer celle des deux instructions de déplacement qui a provoqué la défaillance d'insuffisance de capacité, ceci n'est pas souhaitable en raison de la complexité et du coût additionnels. Par conséquent, dans le système informatique 10, le processeur 20 appelle un algorithme de gestionnaire de micro-code, comme celui qui est illustré à la Figure 4 lorsqu'une exception par insuffisance de capacité de la pile se produit. A la case 210 de la Figure 4, une exception par insuffisance de capacité de la pile s'est produite lors d'une tentative d'exécution parallèle deux opérations de déplacement. A la case 220, l'algorithme de gestionnaire 200 de micro-code provoque un contrôle des bits mots d'étiquettes à virgule flottante du registre 130 de mots d'étiquettes à virgule flottante correspondent au registre ST(0). A la case 230, une décision est ensuite prise pour indiquer si le registre ST(0) est ou non vide. A la case 240, si le registre ST (0) est vide, contenu remplacé par un QNaN et le bit qui correspond dans le registre de mots d'étiquettes à virgule flottante est déplacé pour indiquer que le registre ST 0) n'est plus vide. A la case 260, une émulation de l'instruction FXCH est de nouveau exécutée en envoyant de nouveau les deux instructions en parallèle. Si le registre ST(0) n'était pas vide lorsque l'exception s'est produite, celle-ci s'est produite parce que le registre ST (i) est vide. Le contenu du registre ST (i) est remplacé à case 250 par un QNaN, le bit correspondant de mots d'étiquettes à virgule flottante est placé. A la case 260, l'émulation est exécutée nouveau. A la case 270, si une exception par insuffisance de capacité de la pile se produit de nouveau, il est connu que les deux registres impliqués dans l'opération étaient tous deux vides à l'origine et que c'est cette fois le registre ST (i) qui a provoqué l'exception. Les contenus des registres à cette étape sont: ST(0):= QNaN ST(i):= vide A la case 280, QNaN est donc chargé dans le registre ST A la case 290, l'émulation recommence, cette fois sans aucune exception: les QNaN des deux registres sont échanges sans poser aucun problème. Quelques remarques concernant l'invention seront maintenant exposées, comme annoncé précédemment,. En amenant à force" une exécution en parallèle des deux instructions, une émulation de l'instruction FXCH peut être effectuée en un temps sensiblement moindre selon les procédés antérieurs et sans ajouter aucun élément matériel au système informatique 10. De plus, un gestionnaire de micro-code assure une exécution correcte d'instructions FXCH émulées dans le cas d'exception par insuffisance de capacité de la pile. I1 ressort clairement à l'homme de l'art d'innombrables variantes, modifications, applications et extensions de ces modes de réalisation et principes peuvent être mises en oeuvre sans s'écarter principes et de l'esprit de l'invention. Les procédés et les appareils décrits ici peuvent par exemple être appliqués à une émulation d'autres instructions et à la gestion d'exceptions qui apparaissent lorsqu'elles sont exécutées. Selon un autre mode de réalisation, au lieu d'exécuter de nouveau l'instruction en ce qui concerne le registre ST(i), selon la case 260 de la Figure 4, le système informatique 10 contrôle en substitution le registre ST(i), ce qui élimine le besoin d'exécuter nouveau une instruction. Dans ce mode de réalisation, des éléments matériels ou un micro-code additionnels sont ajoutés pour déterminer quel registre ST (i) référencé dans l'instruction. Le cadre de la présente invention n'est donc limité, selon les exigences, que par revendications annexées. REVENDICATIONS 1. Procédé d'émulation d'une instruction qui commute les contenus d'un registre supérieur (l20(0)) d'une pile (120) et d'un registre sélectionné (120(1) 120(7)) de la pile (120), dans lequel le registre supérieur (120(0)) de la pile (120) et le registre sélectionné (120(1) à 120(7)) de la pile (120) sont dépendants, caractérisé en ce qu'il comprend les étapes consistant à: passer outre à la dépendance du registre supérieur (120(0)) de la pile (120) et du registre sélectionné (120(l) à 120(7)) de la pile (l20); et exécuter en parallèle une première instruction, qui déplace vers le registre sélectionné (120( ) à 120(7)) de la pile (120) le contenu du registre supérieur (120(0)) de la pile (120), et une deuxième instruction qui déplace vers le registre supérieur (120(0)) de la pile (120) le contenu du registre sélectionné (120(l) à 120(7)) de la pile (120). 2. Procédé selon la revendication 1, dans lequel une exception par insuffisance de capacité se produit lors d'une première tentative d'exécution de la première et de la deuxième instructions, caracterisé en ce qu'il comprend en outre les étapes consistant à: déterminer (230) si le registre supérieur (120(0)) de la pile (120) est vide et, si le registre supérieur (120(0)) de la pile (120) est vide, remplacer (240) par un QNaN le contenu du registre supérieur (120(0)) de la pile (120), et si le registre supérieur (120(0)) de la pile (120) n'est pas vide, remplacer (250) par un QNaN le contenu du registre sélectionné (120(1) à 120(7)) de la pile (120). 3. Procédé selon la revendication 2, caractérisé en ce qu'il comprend en outre l'étape consistant à: remplacer (280) le contenu du registre sélectionné (120(1) à 120(7)) de la pile 120) par un QNaN si le registre supérieur (120(0)) de la pile (120) vide lors de la première tentative d'exécution de la première et de deuxième instruction et si une exception par insuffisance de capacité la pile se produit (270) lors d'une deuxième tentative d'exécution de la premiere et de la deuxième instruction. 4. Procédé à mettre en oeuvre dans un système informatique à base de processeurs qui inclut une logique de contrôle de dépendance et une pile (120)de registres (120(0)à 120(7)), caractérisé en ce qu'il comprend les étapes consistant a: passer outre à la logique (80) de contrôle de dépendance de façon que des instructions de déplacement associées aux registres (120 à 120(7)) de la pile puissent être exécutées en parallèle; exécuter les instructions de déplacement en parallèle; et déterminer (210) si une exception par insuffisance de capacité de la pile s'est produite et, si l'exception par insuffisance de capacité de la pile s'est produite, vider les instructions de déplacement; et appeler (210) un algorithme gestionnaire de micro-code qui intervient pour permettre une exécution des instructions de déplacement en parallèle sans exception par insuffisance de capacité de la pile. 5. Procédé selon la revendication 4, dans lequel la pile (120) de registres comprend un registre supérieur (120(0) et un registre (120(1)à 120(7)) susceptible d'être sélectionné et dans lequel l'étape d'appel (210) d'un gestionnaire de micro-code inclut en outre l'étape consistant à: déterminer (230) si le registre supérieur (120(0)) la pile (120) est vide et, si le registre supérieur (120(0)) de la pile (120) est vide, remplacer son contenu par une réponse architecturale appropriée. 6. Procédé selon la revendication 5, dans lequel l'étape (230) qui détermine si le registre supérieur (120(0)) la pile (l20) est vide comprend en outre l'étape consistant à: remplacer (240) le contenu du registre sélectionne (120(l) à 120(7)) de la pile (120) une réponse architecturale appropriée si le registre supérieur (120(0)) de la pile (120) n'est pas vide. 7. Procédé selon la revendication 6, caractérisé en ce qu'il comprend en outre l'étape consistant à. exécuter les instructions de déplacement en parallèle si le contenu du registre supérieur (120(0)) ou du registre susceptible d'être sélectionné (120(l) à (120(7 a été remplacé par une réponse architecturale appropriée. 8. Processeur comprenant: une logique (80) de contrôle de dépendance; et une pile (120) de registres qui inclut un registre supérieur (120(0)) et une série d'autres registres (120 (1) à (7)) ; caractérisé en ce qu'il est configuré de manière à. passer outre à la logique (80) de contrôle de dépendance de façon que des opérations liées à pile (120) de registres (120(0)à 120(7)) puissent être exécutées en parallèle; commuter de façon sensiblement simultanée le contenu du registre supérieur (120(0)) de la pile (120) de registres et le contenu d'un autre registre (120(1)à 120(7)) de la pile de registres et vice versa, de façon qu'aucun risque ne se produise; et exécuter un algorithme qui remplace une réponse architecturale appropriée le contenu du registre supérieur (120(0)), de l'autre registre (120(1)à 120(7)) ou des deux registres ( (0) et (120(1)à 120(7)) si une exception apparaît lorsque les contenus des deux registres sont commutés. 9. Processeur selon la revendication 8, caractérisé en ce que la réponse architecturale appropriée est un QNaN. 10. Processeur selon la revendication 8 caracterisé en ce qu'il comprend en outre: moins deux unités d'exécution (90a, 90b) ) et une mémoire morte (100), la mémoire morte mémorisant un gestionnaire (150) qui peut mettre en application la réponse architecturale appropriée.