Brevet FR3072798A1 — publié le 20190426

B17823 FR - 400479FR DESCRIPTION TITRE : ORDONNANCEMENT DE TACHES DANS UN PROCESSEUR A FILS D'EXECUTION MULTIPLES Domaine technique [0001] La présente description concerne l'ordonnancement de tâches à réaliser par différents fils d'exécution simultanés dans un processeur à fils d'exécution multiples. Technique antérieure [0002] Un processeur à fils d'exécution multiples est un processeur capable d'exécuter de multiples fils de programme côte à côte. Le processeur peut comprendre du matériel qui est commun aux multiples fils différents (par exemple une mémoire d'instructions, une mémoire de données et/ou une unité d'exécution en commun) ; mais pour supporter le fonctionnement multi-fil, le processeur comprend aussi du matériel dédié spécifique à chaque fil. [0003] Le matériel dédié comprend au moins un banc de registres de contexte respectif pour chacun des nombreux fils d'exécution qui peuvent être exécutés à la fois. Un "contexte", lorsqu'on parle de processeurs multi-fils, fait référence à l'état de programme de l'un respectif des fils en cours d'exécution côte à côte (par exemple valeur de compteur de programme, état et valeurs courantes d'opérandes). Le banc de registres de contexte désigne l'ensemble respectif de registres destiné à représenter cet état de programme du fil respectif. Les registres d'un banc de registres sont distincts de la mémoire d'usage général en ce que les adresses des registres sont fixées sous forme de bits dans des mots d'instructions, alors que les adresses mémoire peuvent être calculées en exécutant des instructions. Les registres d'un contexte donné comprennent typiquement un compteur de programme respectif pour le fil d'exécution respectif, et un 2 B17823 FR - 400479FR ensemble respectif de registres d'opérandes pour maintenir temporairement les données sur lesquelles on agit et qui sont fournies par le fil respectif pendant les calculs réalisés par ce fil. Chaque contexte peut aussi avoir un registre d'état respectif pour mémoriser un état du fil respectif (par exemple s'il est en pause ou en cours d'exécution). Ainsi chacun des fils en cours d'exécution comporte son propre compteur de programme séparé, et optionnellement des registres d'opérandes et un ou des registres d'état. [0004] Une forme possible de fonctionnement multi-fil est le parallélisme. C'est-à-dire que, aussi bien que des contextes multiples, des pipelines d'exécution multiples sont prévus : c'est-à-dire qu'il y a un pipeline d'exécution séparé pour chaque flux d'instructions à exécuter en parallèle. Toutefois, cela nécessite une grande quantité de duplication en ce qui concerne le matériel. [0005] Par conséquent à la place, une autre forme de processeur à fils d'exécution multiples utilise la simultanéité plutôt que le parallélisme, d'où il résulte que les fils partagent un pipeline d'exécution commun (ou au moins une partie commune d'un pipeline) et différents fils sont entrelacés dans ce même pipeline d'exécution partagé. Les performances d'un processeur à fils d'exécution multiples peuvent encore être améliorées par rapport à un fonctionnement sans simultanéité ou parallélisme, grâce à des opportunités améliorées pour masquer la latence du pipeline. Aussi, cette approche ne nécessite pas autant de matériel supplémentaire dédié à chaque fil que dans un processeur complètement parallèle avec de multiples pipelines d'exécution, et ainsi ne nécessite pas autant de silicium supplémentaire. [0006] Un processeur multi-fil a aussi besoin de certains moyens pour coordonner l'exécution des différents fils 3 B17823 FR - 400479FR simultanés. Par exemple, il a besoin de déterminer quelles tâches de calcul doivent être allouées et à quels fils. Dans un autre exemple, un ou plusieurs premiers fils simultanés peuvent contenir un calcul qui dépend du résultat du calcul fait par un ou plusieurs autres des fils d'exécution simultanés. Dans ce cas une synchronisation à barrière doit être réalisée pour amener les fils en question à un point d'exécution commun, afin que lesdits un ou plusieurs premiers fils ne tentent pas de réaliser ces calculs dépendants avant que lesdits un ou plusieurs autres fils réalisent les calculs dont ils dépendent. Au lieu de cela, la synchronisation à barrière nécessite que l'autre ou les autres fils atteignent un point spécifié avant que le ou les premiers fils puissent procéder. Résumé de l'invention [0007] Une ou plusieurs de telles fonctions pour coordonner l'exécution de fils simultanés pourraient être mises en oeuvré dans du matériel dédié. Toutefois, cela augmenterait la surface de silicium du processeur et ne serait pas aussi souple qu'une approche logicielle programmatique. D'autre part, une approche logicielle complètement programmatique ne serait pas efficace en ce qui concerne la densité de code. Il serait souhaitable de trouver une approche plus subtile pour coordonner des fils, qui établisse un équilibre entre ces deux approches. [0008] Selon un aspect décrit ici, on prévoit un processeur comprenant : une unité d'exécution agencée pour exécuter un fil respectif dans chaque créneau temporel d'une séquence répétitive de créneaux temporels différents, la séquence étant constituée d'une pluralité de créneaux temporels dans lesquels la logique d'exécution est actionnable pour entrelacer l'exécution des 4 B17823 FR - 400479FR fils respectifs ; et une pluralité d'ensembles de registres de contexte, chacun comprenant un ensemble respectif de registres pour représenter un état respectif d'un fil respectif, les ensembles de registres de contexte comprenant un ensemble de registres de contexte de fil de travail respectif pour chacun des créneaux temporels que l'unité d'exécution est capable d'entrelacer dans ladite séquence et au moins un ensemble de registres de contexte supplémentaire, de sorte que le nombre d'ensembles de registres de contexte est supérieur d'au moins un par rapport au nombre de créneaux temporels que l'unité d'exécution est capable d'entrelacer, les ensembles de registres de contexte de travail étant agencés pour représenter les états respectifs de fils de travail respectifs qui réalisent des tâches de calcul, et l'ensemble de registres de contexte supplémentaire étant agencé pour représenter l'état d'un fil superviseur qui planifie l'exécution des tâches réalisées par _Les fils de travail ; dans lequel le processeur est agencé pour commencer à exécuter le fil superviseur dans chacun des créneaux temporels, et pour permettre au fil superviseur d'abandonner individuellement ensuite chacun des créneaux temporels dans lesquels il s'exécute à l'un respectif des fils de travail. [0009] Dans des modes de réalisation, le processeur peut être agencé pour autoriser le fil superviseur à réaliser ledit abandon en exécutant une ou plusieurs instructions d'abandon dans le créneau temporel dans lequel il s'exécute. [0010] Dans des modes de réalisation, lesdites une ou plusieurs instructions d'abandon sont une seule instruction d'abandon. [0011] Dans des modes de réalisation, l'unité d'exécution peut être agencée pour fonctionner selon un jeu d'instructions B17823 FR - 400479FR définissant des types d'instructions de code machine reconnus par le processeur, chaque instruction de code machine étant définie par un code opération respectif ; et dans lequel au moins l'une desdites une ou plusieurs instructions d'abandon peut être une instruction dédiée du jeu d'instructions ayant un code d'opération qui lorsqu'il est exécuté déclenche ledit abandon. [0012] Dans des modes de réalisation, il est implicite dans le code opération de ladite au moins une instruction d'abandon que le créneau temporel qui est abandonné est le créneau temporel dans lequel ladite au moins une instruction d'abandon est exécutée. [0013] Dans des modes de réalisation, lesdites une ou plusieurs instructions du jeu d'instructions comprenant au moins lesdites une ou plusieurs instructions d'abandon peuvent être réservées pour une utilisation par le fil superviseur et ne sont pas exécutables par les fils de travail. [0014] Dans des modes de réalisation, lesdites une ou plusieurs instructions d'abandon peuvent spécifier comme opérande une adresse du fil de travail auquel le créneau temporel abandonné est abandonné. [0015] Dans des modes de réalisation, le processeur peut être agencé pour autoriser le fil de travail, auquel l'un des créneaux temporels a été abandonné, à retourner le créneau temporel dans lequel il s'exécute au fil superviseur en exécutant une instruction de sortie dans le créneau temporel dans lequel il s'exécute. [0016] Dans des modes de réalisation, l'unité d'exécution peut être agencée pour fonctionner selon un jeu d'instructions définissant des types d'instructions de code machine reconnus par le processeur, chaque instruction de code machine étant définie par un code opération respectif ; et l'instruction de 6 B17823 FR - 400479FR sortie peut être une instruction dédiée du jeu d'instructions ayant un code opération qui lorsqu'il est exécuté réalise le retour du créneau temporel abandonné au fil superviseur. [0017] Dans les modes de réalisation, il est implicite dans le code opération de l'instruction de sortie que le créneau temporel qui est retourné est le créneau temporel dans lequel l'instruction de sortie est exécutée. [0018] Dans des modes de réalisation, il est implicite dans le code opération de l'instruction de sortie que le fil auquel le créneau temporel retourné est retourné est le fil superviseur. [0019] Dans des modes de réalisation, une ou plusieurs instructions du jeu d'instructions comprenant au moins l'instruction de sortie peuvent être réservées pour une utilisation par les fils de travail et ne sont pas exécutables par le fil superviseur. [0020] Dans des modes de réalisation, le fil superviseur peut réaliser une synchronisation à barrière pour synchroniser les fils de travail. [0021] Dans des modes de réalisation, le fil superviseur peut réaliser une communication avec une ressource externe de la part d'un ou plusieurs des fils de travail. [0022] Dans des modes de réalisation, l'instruction d'abandon peut en outre copier un ou plusieurs modes à partir d'un ou plusieurs registres d'état de l'ensemble de registres de contexte de superviseur dans un ou plusieurs registres d'état correspondants du fil de travail lancé par l'instruction d'abandon, contrôlant par cela le fil de travail pour qu'il adopte lesdits un ou plusieurs modes. [0023] Dans des modes de réalisation, le processeur peut en outre être agencé pour exécuter une instruction qui lance un 7 B17823 FR - 400479FR ensemble de plus qu'un seul fil de travail ensemble dans certains créneaux respectifs desdits créneaux, tous les fils exécutant le même code. [0024] Dans des modes de réalisation, le jeu d'instructions que la configuration du processeur est destinée à exécuter peut comprendre en outre une instruction de multi-exécution Qui lance une pluralité de fils de travail ensemble dans des créneaux respectifs desdits créneaux, la pluralité de fils de travail étant de trois ou plus ; dans lequel l'un des fils de travail comprend du code extrait à partir d'une première adresse spécifiée par un opérande de l'instruction de multiexécution, et dans lequel les autres fils de la pluralité de fils de travail comprennent du code extrait à partir d'adresses respectives espacées d'un pas de progression d'une valeur de pas par rapport à la première adresse, dans lequel la valeur de pas est spécifiée par un autre opérande de l'instruction de multi-exécution. C'est-à-dire que chaque autre fil de la pluralité de fils de travail comprend du code extrait à partir d'une adresse décalée par rapport à la première adresse d'un multiple entier respectif de la valeur de pas, les multiples entiers formant la séquence de nombres naturels (1, 2, 3, ..), c'est-à-dire la séquence d'entiers positifs commençant à 1 et espacés d'incréments de 1 (augmentant de un à chaque créneau temporel). [0025] Dans des modes de réalisation, le nombre de fils de travail peut être égal au nombre de créneaux temporels. C'est-à-dire que l'instruction de multi-exécution lance un fil dans chacun des créneaux temporels, chacun à partir d'une adresse respective différente d'un ensemble d'adresses échelonnées spécifiées par la première adresse et des opérandes de valeurs de pas de l'instruction de multi-exécution. 8 B17823 FR - 400479FR [0026] Selon un autre aspect décrit ici, on prévoit un procédé d'actionnement d'un processeur, le procédé comprenant : utiliser une unité d'exécution pour exécuter un fil respectif dans chaque créneau d'une séquence répétitive de créneaux temporels différents, la séquence étant constituée d'une pluralité de créneaux temporels dans lesquels la logique d'exécution est actionnable pour entrelacer l'exécution des fils respectifs ; dans lequel le processeur comprend une pluralité d'ensembles de registres de contexte, chacun comprenant un ensemble respectif de registres pour représenter un état respectif d'un fil respectif, dans lequel les ensembles de registres de contexte comprennent un ensemble de registres de contexte de travail respectif pour chaque créneau de la pluralité de créneaux temporels que l'unité d'exécution est capable d'entrelacer dans ladite séquence et au moins un ensemble de registres de contexte supplémentaire, de sorte que le nombre d'ensembles de registres de contexte est supérieur d'au moins un par rapport au nombre de créneaux temporels que l'unité d'exécution est capable d'entrelacer, les ensembles de registres de contexte de travail étant utilisés pour représenter les états respectifs de fils de travail respectifs qui réalisent des tâches de calcul, et l'ensemble de registres de contexte supplémentaire étant utilisé pour représenter l'état d'un fil superviseur qui planifie l'exécution des tâches réalisées par les fils de travail ; et le procédé comprend en outre le fait de commencer l'exécution du fil superviseur dans chacun des créneaux temporels, et le fil superviseur abandonne individuellement ensuite chacun des créneaux temporels dans lesquels il s'exécute à l'un respectif des fils de travail. 9 B17823 FR - 400479FR [0027] Selon un autre aspect décrit ici, on prévoit un produit programme informatique comprenant du code incorporé sur un stockage lisible par un ordinateur et qui est agencé pour s'exécuter sur le processeur de l'un quelconque des modes de réalisation décrits ici, dans lequel le code comprend le fil superviseur et les fils de travail. Brève description des dessins [0028] Pour faciliter la compréhension de la présente description et pour montrer comment celle-ci peut être mise en oeuvre, on va faire référence à titre d'exemple aux dessins joints dans lesquels : [0029] [Fig. 1] la figure 1 est un schéma blocs d'un processeur multi-fil ; [0030] [Fig. 2] la figure 2 est un schéma blocs d'une pluralité de contexte de fils ; [0031] [Fig. 3] la figure 3 illustre un schéma de créneaux temporels entrelacés ; [0032] [Fig. 4] la figure 4 illustre schématiquement un fil superviseur et une pluralité de fils de travail s'exécutant dans une pluralité de créneaux temporels entrelacés ; [0033] [Fig. 5] la figure 5 est un schéma blocs d'un processeur comprenant une matrice de processeurs constituants ; et [0034] [Fig. 6] illustre schématiquement un graphe utilisé dans un algorithme d'intelligence artificielle. Description détaillée de modes de réalisation préférés [0035] La figure 1 illustre un exemple de processeur 4 selon des modes de réalisation de la présente description. Par exemple, le processeur 4 peut être un pavé d'une matrice de pavés processeurs similaires sur une même puce, ou peut être B17823 FR - 400479FR mis en oeuvre sur sa propre puce. Le processeur 4 comprend une unité de traitement multi-fil 10 sous la forme d'une unité de traitement à barillet, et une mémoire locale 11 (c'est-à-dire sur le même pavé dans le cas d'une matrice multi-pavé, ou la même puce dans le cas d'une puce à un seul processeur). Une unité de traitement à barillet est un type d'unité de traitement multi-fil dans lequel le temps d'exécution du pipeline est divisé en une séquence répétitive de créneaux temporels entrelacés, dont chacun peut être possédé par un fil donné. Cela va être décrit plus en détail dans un instant. La mémoire 11 comprend une mémoire d'instructions 12 et une mémoire de données 22 (gui peuvent être mises en oeuvre dans des modules mémoire adressables différents ou dans différentes régions du même module mémoire adressable). La mémoire d'instructions 12 mémorise du code machine à exécuter par l'unité de traitement 10, tandis que la mémoire de données 22 mémorise à la fois des données sur lesquelles le code exécuté va opérer et des données de sortie produites par le code exécuté (par exemple un résultat de telles opérations). [0036] La mémoire 12 mémorise divers fils différents d'un programme, chaque fil comprenant une séquence respective d'instructions pour réaliser une certaine tâche ou certaines tâches. On notera qu'une instruction telle que mentionnée ici désigne une instruction de code machine, c'est-à-dire une instance de l'une des instructions fondamentales du jeu d'instructions du processeur, constituée d'un seul code opération et de zéro ou plus opérandes. [0037] Le programme décrit ici comprend une pluralité de fils de travail, et un sous-programme superviseur qui peut être agencé sous forme d'un ou plusieurs fils superviseurs. Cela va être décrit plus en détail dans un instant. Dans des modes de réalisation, chacun de certains ou de la totalité des fils travail prennent la forme d'un "codelet" respectif. Un 11 B17823 FR - 400479FR "codelet" est un type particulier de fil d'exécution, parfois aussi appelé fil "atomique". il a toutes les informations d'entrée dont il a besoin pour son exécution à partir du début fil (à partir de l'instant du lancement), c'est-à-dire qu'il ne prend aucune entrée dans aucune autre partie du programme ni dans la mémoire après avoir été lancé. En outre, aucune autre partie du programme ne va utiliser de sorties (résultats) du fil avant qu'il ne soit terminé (qu'il se finisse). À moins qu'il ne rencontre une erreur, il est assuré de terminer. On notera que certaines littératures définissent aussi un "codelet" comme étant sans état, c'est-à-dire que s'il s'exécute deux fois il ne pourra hériter d'aucune information provenant de sa première exécution, mais cette définition additionnelle n'est pas adoptée ici. On notera aussi que tous les fils de travail n'ont pas besoin d'être des codelets (atomiques), et dans des modes de réalisation certains ou la totalité des fils de travail peuvent au lieu de cela être capables de communiquer entre eux. [0038] Dans l'unité de traitement 10, de multiples fils différents parmi les fils provenant de la mémoire d'instructions 12 peuvent être entrelacés dans un seul pipeline d'exécution 13 (bien que typiquement seulement un sous-ensemble de tous les fils mémorisés dans la mémoire d'instructions puisse être entrelacé à un point quelconque dans le programme global). L'unité de traitement multi-fil 10 comprend : une pluralité de bancs de registres 26, chacun agencé pour représenter l'état (contexte) d'un fil respectif différent parmi les fils à exécuter simultanément ; un pipeline d'exécution partagé 13 Qui est commun aux fils exécutés simultanément ; et un ordonnanceur 24 pour ordonnancer les fils simultanés pour leur exécution dans le pipeline partagé de manière entrelacée, de préférence à tour de rôle. L'unité de traitement 10 est connectée à une mémoire 12 B17823 FR - 400479FR d'instructions partagée 12 commune à la pluralité de fils, et à une mémoire de données partagée 22 qui est aussi commune à la pluralité de fils. [0039] Lé pipeline d'exécution 13 comprend un étage d'extraction 14, un étage de décodage 16 et un étage d'exécution 18 comprenant une unité d'exécution qui peut réaliser des opérations arithmétiques et logiques, des calculs d'adresse et des opérations de chargement et de stockage, et d'autres opérations, telles que définies par l'architecture du jeu d'instructions. Chacun des bancs de registres de contexte 26 comprend un ensemble respectif de registres pour représenter l'état de programme d'un fil respectif. [0040] Un exemple des registres qui constituent chacun des bancs de registres de contexte 26 est illustré en figure 2. Chacun des bancs de registres de contexte 26 comprend un ou plusieurs registres de commande 28 respectifs, comprenant au moins un compteur de programme (PC) pour le fil respectif (pour garder la trace de l'adresse d'instruction à laquelle le fil est actuellement en cours d'exécution), et dans des modes de réalisation aussi un ensemble d'un ou plusieurs registres d'état (SR) enregistrant un état courant du fil respectif (comme s'il est en cours d'exécution ou en pause, par exemple puisqu'il aurait rencontré une erreur). Chacun des bancs de registres de contexte 26 comprend aussi un ensemble respectif de registres d'opérandes (OP) 32, pour maintenir temporairement des opérandes des instructions exécutées par le fil respectif, c'est-à-dire des valeurs sur lesquelles on opère ou résultant d'opérations définies par les codes opération des instructions des fils respectifs lorsqu'elles sont exécutées. On remarquera que chacun des bancs de registres de contexte 26 peut optionnellement comprendre un ou plusieurs autres types de registres 13 B17823 FR - 400479FR respectifs (non représentés). On notera aussi que bien que le terme "banc de registres" soit parfois utilisé pour désigner un groupe de registres dans un espace d'adresse commun, cela ne sera pas nécessairement le cas dans la présente description et chacun des contextes matériels 26 (chacun des ensembles de registres 26 représentant chaque contexte) peut plus généralement comprendre un ou plusieurs bancs de registres de la sorte. [0041] Comme on va le décrire plus en détail dans la suite, l'agencement décrit comporte un banc de registres de contexte de travail CX0_ CX(M-1) pour chacun des M fils qui peuvent être exécutés simultanément (M = 3 dans l'exemple illustré, mais cela n'est pas limitatif), et un banc de registres de contexte de superviseur additionnel CXS. Les bancs de registres de contexte de travail sont réservés à la mémorisation des contextes de fils de travail, et le banc de registres de contexte de superviseur est réservé a la mémorisation du contexte d'un fil superviseur. On notera que dans des modes de réalisation le contexte de superviseur est spécial, et Qu'il comporte un nombre de registres différent de celui des fils de travail. Chacun des contextes de travail comporte de préférence le même nombre de registres d'état et de registres d'opérandes que les autres. Dans des modes de réalisation, le contexte de superviseur peut comporter moins de registres d'opérandes que chacun des fils de travail. Des exemples de registres d'opérandes que le contexte de travail peut comporter et que le superviseur ne comporte pas sont : des registres en virgule flottante, des registres accumulateurs et/ou des registres de pondération dédiés (pour contenir des pondérations d'un réseau neuronal). Dans des modes de réalisation le superviseur peut aussi comporter un nombre différent de registres d'état. En outre, dans des modes de réalisation l'architecture du jeu d'instructions du 14 B17823 FR - 400479FR processeur 4 peut être agencée de telle sorte que les fils de travail et le ou les fils superviseurs exécutent des types d'instructions différents mais partagent aussi certains types d'instructions. [0042] L'étage d'extraction 14 est connecté de manière à extraire de la mémoire d'instructions 12 des instructions à exécuter, sous le contrôle de l'ordonnanceur 24. L'ordonnanceur 24 est agencé pour contrôler l'étage d'extraction 14 pour extraire une instruction de chaque fil d'un ensemble de fils s'exécutant simultanément tour à tour dans une séquence répétitive de créneaux temporels, divisant ainsi les ressources du pipeline 13 en une pluralité de créneaux temporels entrelacés temporellement, comme on va le décrire plus en détail dans un instant. Par exemple, le schéma d'ordonnancement pourrait être un tour de rôle ou un tour de rôle pondéré. Un autre terme pour désigner un processeur fonctionnant de la sorte est processeur à fils d'exécution en barillet. [0043] Dans certains modes de réalisation, l'ordonnanceur 24 peut avoir accès à l'un des registres d'état SR de chaque fil indiquant si le fil est mis en pause, de sorte que l'ordonnanceur 24 contrôle en fait l'étage d'extraction 14 pour extraire les instructions de seulement les fils qui sont actuellement actifs. Dans des modes de réalisation, de préférence chaque créneau temporel (et le banc de registres de contexte correspondant) est toujours possédé par un un autre, c'est-à-dire que chaque créneau est toujours par un certain fil, et chaque créneau est toujours dans la séquence de l'ordonnanceur 24 ; bien qu'ils arriver que le fil occupant un créneau donné puisse être en pause à cet instant, auquel cas lorsque la séquence en vient à ce créneau, l'extraction d'instruction pour le fil respectif est sautée. En variante, il n'est pas exclu par exemple que fil ou occupé inclus puisse B17823 FR - 400479FR dans des variantes de réalisation moins préférées, certains créneaux puissent être temporairement vacants et exclus de la séquence ordonnancée. Lorsque l'on fait référence au nombre de créneaux temporels que l'unité d'exécution est capable d'entrelacer, ou similaire, cela désigne le nombre maximum de créneaux que l'unité d'exécution est capable d'exécuter simultanément, c'est-à-dire le nombre de créneaux simultanés que le matériel de l'unité d'exécution supporte. [0044] L'étage extraction 14 a accès au compteur de programme (PC) de chacun des contextes. Pour chaque fil respectif, l'étage d'extraction 14 extrait l'instruction suivante de ce fil à partir de l'adresse suivante dans la mémoire programme 12 telle qu'indiquée par le compteur de programme. Le compteur de programme s'incrémente à chaque cycle d'exécution à moins qu'il soit dérouté par une instruction de branchement. L'étage d'extraction 14 passe ensuite l'instruction extraite à l'étage de décodage 16 pour qu'elle soit décodée, et l'étage de décodage 16 passe ensuite une indication de l'instruction décodée à l'unité d'exécution 18 accompagnée des adresses décodées de tous les registres d'opérandes 32 spécifiés dans l'instruction, afin que l'instruction soit exécutée. L'unité d'exécution 18 a accès aux registres d'opérandes 32 et aux registres de commande 28, qu'elle peut utiliser dans l'exécution de l'instruction sur la base des adresses de registres décodées, comme dans le cas d'une instruction arithmétique (par exemple en ajoutant, en multipliant, en soustrayant ou en divisant les valeurs dans deux registres d'opérandes et en fournissant le résultat à un autre registre d'opérande du fil respectif). Ou si l'instruction définit un accès mémoire (chargement ou stockage), la logique de chargement/stockage de l'unité d'exécution 18 charge une valeur à partir de la mémoire de données dans un registre d'opérande du fil respectif, ou mémorise une valeur à partir 16 B17823 FR - 400479FR d'un registre d'opérande du fil respectif dans la mémoire de données 22, conformément à l'instruction. Ou si l'instruction définit un branchement ou un changement d'état, l'unité d'exécution change la valeur dans le compteur de programme PC ou l'un des registres d'état SR en conséquence. On notera que pendant qu'une instruction d'un fil est exécutée par l'unité d'exécution 18, une instruction provenant du fil se trouvant dans le créneau temporel suivant dans la séquence entrelacée peut être en cours de décodage par l'étage de décodage 16 ; et/ou pendant qu'une instruction est décodée par l'étage de décodage 16, l'instruction provenant du fil se trouvant dans le créneau temporel suivant après celui-ci peut être en cours d'extraction par l'étage d'extraction 14 (bien qu'en général la portée instruction variantes e la description ne soit pas limitée a une par créneau temporel, par exemple dans des de scénarios un lot de deux ou plusieurs instructions pourrait être émis par un fil donné par créneau temporel). Ainsi l'entrelacement masque avantageusement la latence dans le pipeline 13, en accord avec des techniques connues de traitement de fils en barillet. [0045] Un exemple du schéma d'entrelacement mis en oeuvre par l'ordonnanceur 24 est illustré en figure 3. Ici les fils simultanés sont entrelacés selon un schéma de tour de rôle dans lequel, dans chaque tour du schéma, le tour est divisé en une séquence de créneaux temporels SO, Si, chacun destiné à exécuter un fil respectif. Typiquement, chaque créneau a une longueur d'un cycle de processeur et les différents créneaux ont des tailles égales bien que cela ne soit pas nécessaire dans tous les modes de réalisation possibles, par exemple un schéma de tour de rôle pondéré est aussi possible, schéma dans lequel certains fils obtiennent plus de cycles que d'autres à chaque tour d'exécution. En général, l'exécution de fils en barillet peut utiliser soit 17 B17823 FR - 400479FR un schéma à tour de rôle égal soit un schéma à tour de rôle pondéré, dans ce dernier cas la pondération pouvant être fixe ou adaptative. [0046] Quelle que soit la séquence pour chaque tour de rôle d'exécution, ce motif se répète ensuite, chaque tour comprenant une instance respective de chacun des créneaux temporels. On notera par conséquent qu'un créneau temporel tel que désigné ici désigne la place allouée de façon répétitive dans la séquence, pas une instance particulière du créneau dans autre façon, du pipeline entrelacés temporelle), une répétition donnée de la séquence. Dit d'une l'ordonnanceur 24 partage les cycles d'exécution 13 en une pluralité de canaux d'exécution temporellement (multiplexés par séparation chacun comprenant une récurrence d'un créneau temporel respectif dans une séquence répétitive de créneaux temporels. Dans le mode de réalisation illustré, il y a quatre créneaux temporels, mais c'est seulement dans un but d'illustration et d'autres nombres sont possibles. Par exemple, dans un mode de réalisation préféré il y a en fait six créneaux temporels. [0047] Quel que soit le nombre de créneaux temporels en lequel le schéma de tour de rôle est divisé, alors selon la présente description, l'unité de traitement 10 comprend un banc de registres de contexte 26 de plus que le nombre de créneaux temporels, c'est-à-dire qu'elle prend en charge un contexte de plus que le nombre de créneaux temporels entrelacés qu'elle est capable de traiter en barillet. [0048] Cela est illustré au moyen de l'exemple de la figure 2 : s'il y a quatre créneaux temporels S0_S3 comme cela est représenté en figure 3, alors il y a cinq bancs de registres de contexte, référencés ici CXO, CX1, CX2, CX3 et CXS. C'est-à-dire que même s'il y a seulement quatre créneaux temporels 18 B17823 FR - 400479FR d'exécution SO_S3 dans le schéma à fils en barillet et ainsi seulement quatre fils peuvent être exécutés simultanément, il est décrit ici d'ajouter un cinquième banc de registres de contexte CXS, comprenant un cinquième compteur de programme (PC), un cinquième ensemble de registres d'opérandes 32, et dans des modes de réalisation aussi un cinquième ensemble d'un ou plusieurs registres d'état (SR). On notera toutefois que comme cela est mentionné, dans des modes de réalisation, le contexte de superviseur peut différer des autres CX0_3, et le fil superviseur peut supporter un leu d'instructions différent pour actionner le pipeline d'exécution 13. [0049] Chacun des quatre premiers contextes CX0_CX3 est utilisé pour représenter l'état de l'un respectif d'une pluralité de "fils de travail" affectés actuellement à l'un des quatre créneaux temporels d'exécution SO_S3, pour réaliser toute tâche de calcul spécifique d'une application souhaitée par le programmeur (on notera encore ici que cela peut être seulement le sous-ensemble du nombre total de fils de travail du programme tel que mémorisé dans la mémoire d'instructions 12). Le cinquième contexte CXS est toutefois réservé à une fonction spéciale, pour représenter l'état d'un "fil superviseur" (SV) dont le rôle est de coordonner l'exécution des fils de travail, au moins dans le sens de l'affectation de celui des fils de travail W qui doit être exécuté dans tel créneau temporel SO, Si, S2... et à quel point dans le programme global. Optionnellement, le fil superviseur peut avoir d'autres responsabilités de "supervision" ou de coordination. Par exemple, le fil superviseur peut être responsable de la réalisation de synchronisations à barrière pour assurer un certain ordre d'exécution. Par exemple, dans le cas où un ou plusieurs deuxièmes fils dépendent de données à fournir par un ou plusieurs premiers fils exécutés sur le même module processeur 19 B17823 FR - 400479FR 4, le superviseur peut réaliser une synchronisation à barrière pour assurer qu'aucun des deuxièmes fils ne commence avant que les premiers fils soient terminés. En plus ou à la place, le superviseur peut réaliser une synchronisation à barrière pour assurer qu'un ou plusieurs fils sur le module processeur 4 ne commencent pas avant qu'une certaine source externe de données, comme un autre pavé ou une autre puce de processeur, ait achevé le traitement requis pour mettre des données à disposition. Le fil superviseur peut aussi être utilisé pour réaliser d'autres fonctionnalités associées aux multiples fils de travail. Par exemple, le fil superviseur peut être responsable de communiquer des données à l'extérieur du module processeur 4 (pour recevoir des données externes sur lesquelles il faut agir avec un ou plusieurs des fils, et/ou pour transmettre des données fournies par un ou plusieurs des fils de travail). En général, le fil superviseur peut être utilisé pour fournir toute sorte de fonction de supervision ou de coordination souhaitée par le programmeur. Par exemple, dans un autre exemple, le superviseur peut superviser des transferts entre la mémoire locale de pavé 12 et une ou plusieurs ressources dans le système plus large (externes à la matrice 6) comme un disque de stockage ou une carte réseau. [0050] On notera bien sûr que quatre créneaux ne sont qu'un exemple, et qu'en général, dans d'autres modes de réalisation, il peut y avoir d'autres nombres, de sorte que s'il y a un maximum de M créneaux temporels 0 M-1 par tour, le processeur 4 comprend M+1 contextes CX_CX(M-1) & CXS, c'est-à-dire un pour chaque fil de travail qui peut être entrelacé à tout instant donné et un contexte supplémentaire pour le superviseur. Par exemple, dans un exemple de mise en oeuvre il y a six créneaux temporels et sept contextes. [0051] En référence à la figure 4, selon les principes montrés ici, le fil superviseur SV n'a pas son propre créneau B17823 FR - 400479FR temporel en soi dans le schéma de créneaux temporels d'exécution entrelacés. il en est de même pour les fils de travail puisque l'allocation de créneaux à des fils de travail est définie de manière flexible. Au lieu de cela, chaque créneau temporel comporte son propre banc de registres de contexte dédié (CXO_CXM-1) pour mémoriser un contexte de travail, qui est utilisé par le fil de travail lorsque le créneau est alloué au fil de travail, mais pas utilisé lorsque le créneau est alloué au superviseur. Lorsqu'un créneau donné est alloué au superviseur, à la place ce créneau utilise le banc de registres de contexte CVS du superviseur. On notera que le superviseur a toujours accès à son propre contexte et qu'aucun fil de travail n'est capable d'occuper le banc de registres de contexte de superviseur CXS. [0052] Le fil superviseur SV peut s'exécuter dans n'importe lequel et dans tous les créneaux temporels S0.. S3 (ou plus généralement SO_SM-1). L'ordonnanceur 24 est agencé pour, lorsque le programme dans son ensemble démarre, commencer par allouer le fil superviseur à la totalité des créneaux temporels, c'est-à-dire qu'ainsi le superviseur SV démarre en s'exécutant dans tous les créneaux S0_S3. Toutefois, le fil superviseur est muni d'un mécanisme pour, à un certain point ultérieur (soit immédiatement soit après avoir réalisé une ou plusieurs tâches de superviseur), abandonner temporairement chacun des créneaux dans lesquels il s'exécute a l'un respectif des fils de travail, par exemple initialement les fils de travail WO_W3 dans l'exemple représenté en figure 4. Cela est obtenu par le fait que le fil superviseur exécute une instruction d'abandon, appelée "RUN" à titre d'exemple ici. Dans des modes de réalisation cette instruction prend deux opérandes : une adresse d'un fil de travail dans la mémoire d'instructions 12 et une adresse de certaines données 21 B17823 FR - 400479FR pour ce fil de travail dans la mémoire de données 22 : RUN task addr, data addr [0053] Les fils de travail sont des portions de code qui peuvent être exécutées simultanément entre elles, chacune représentant une ou plusieurs tâches de calcul respectives à réaliser. L'adresse de données peut spécifier certaines données sur lesquelles le fil de travail doit agir. En variante, l'instruction d'abandon peut prendre un seul opérande spécifiant l'adresse du fil de travail, et l'adresse des données pourrait être incluse dans le code du fil de travail ; ou dans un autre exemple l'unique opérande pourrait pointer vers une structure de données spécifiant les adresses du fil de travail et des données. Comme cela a été mentionné, dans des modes de réalisation au moins certains des fils de travail peuvent prendre la forme de codelets, c'est-à-dire d'unités atomiques de code exécutables simultanément. En variante ou en plus, certains des fils de travail ne sont pas obligatoirement des codelets et peuvent au lieu de cela être capables de communiquer entre eux. [0054] L'instruction d'abandon ("RUN") agit sur l'ordon- nanceur 24 de manière à abandonner le créneau temporel courant, dans lequel cette instruction est exécutée elle-même, au fil de travail spécifié par l'opérande. On notera qu'il est implicite dans l'instruction d'abandon que ce soit le créneau temporel dans lequel cette instruction est exécutée qui soit abandonné (implicite dans le contexte d'instructions de code machine signifie qu'il n'y a pas besoin d'un opérande pour spécifier cela - c'est implicitement compris d'après le code opération lui-même). Ainsi le créneau temporel qui est abandonné est le créneau temporel dans lequel le superviseur exécute l'instruction d'abandon. Ou dit d'une autre façon, le superviseur s'exécute dans le même espace que celui qu'il abandonne. Le superviseur dit "exécuter ce morceau de code à 22 B17823 FR - 400479FR cet emplacement", puis à partir de ce point le créneau récurrent est la propriété (temporairement) du fil de travail concerné. [0055] Le fil superviseur SV réalise une opération similaire dans chacun d'un ou plusieurs autres des créneaux temporels, pour abandonner certains ou la totalité de ses créneaux temporels à des fils respectifs différents parmi les fils de travail WO_W3 (sélectionnés dans un ensemble plus grand WO_Wj dans la mémoire d'instructions 12). Une fois qu'il a réalisé cela pour le dernier créneau, le superviseur est suspendu (il reprendra plus tard là où il a Quitté lorsque l'un des créneaux sera rendu par un fil de travail W). [0056] Le fil superviseur SV est ainsi capable d'allouer des fils de travail différents, chacun réalisant une ou plusieurs tâches, à des créneaux différents parmi les créneaux temporels d'exécution entrelacés S0_S3. Lorsque le fil superviseur détermine qu'il est temps d'exécuter un fil de travail, il utilise l'instruction d'abandon ("RUN") pour allouer ce fil de travail au créneau temporel dans lequel l'instruction RUN a été exécutée. [0057] Dans certains modes de réalisation, le jeu d'instructions comprend aussi une variante de l'instruction d'exécution, RUNALL ("exécuter tous"). Cette instruction est utilisée pour lancer un ensemble de plusieurs fils de travail conjointement, tous exécutant le même code. Dans des modes de réalisation, cela lance un fil de travail dans chacun des créneaux de l'unité de traitement S0_S3 (ou plus généralement SO_ S(M-1)) [0058] A la place ou en plus de l'instruction RUNALL, dans certains modes de réalisation le jeu d'instructions peut inclure une instruction de "multi-exécution", MULTIRUN. Cette instruction lance aussi de multiples fils de travail, chacun 23 B17823 FR - 400479FR dans l'un respectif des créneaux temporels. Dans des modes de réalisation préférés, elle lance un fil de travail W respectif dans chacun de tous les créneaux SO_. S(M-1) (c'est-à-dire que le nombre total de fils de travail lancé est égal au nombre M de contextes de travail matériels). Cependant, l'instruction MULTIRUN diffère de l'instruction RUNALL en ce que les multiples fils lancés ne sont pas tous constitués du même code pris à partir de la même adresse de tâche. Au lieu de cela, l'instruction MULTIRUN prend au moins deux opérandes un premier qui est une adresse de tâche explicite ; et une valeur de pas de progression : MULTIRUN task addr, stride [0059] Un premier des multiples fils lancés est pris à l'adresse task addr spécifiée par l'opérande d'adresse de l'instruction MULTIRUN. Chacun des autres multiples fils lancés est pris à une adresse égale à celle du premier fil plus un multiple entier incrémentiel respectif de la valeur de pas de progression, les multiples étant la séquence d'entiers positifs commençant à 1 et s'incrémentant de 1 avec chaque créneau temporel. En d'autres termes, les fils de travail lancés sont dans une progression par étapes égales à la valeur de pas par rapport à la première adresse. C'est-à-dire qu'ainsi un deuxième des fils est pris à une adresse égale à task addr + stride, un troisième des fils est pris à une adresse égale à task addr + 2*stride, et un quatrième des fils est pris à une adresse égale à task addr + 3*stride (et ainsi de suite en fonction du nombre de fils lancés, nombre qui dans des modes de réalisation est égal au nombre de créneaux S). L'exécution de l'instruction MULTIRUN déclenche chacun des M multiple fils de travail pour les lancer dans l'un respectif des créneaux S0.. S(M-1), chacun commençant avec un compteur de programme défini par la valeur d'adresse respective déterminée de la manière spécifiée précédemment. 24 B17823 FR - 400479FR [0060] En outre, dans certains modes de réalisation, les instructions RUN, RUNALL et/ou MULTIRUN, lorsqu'elles sont exécutées, copient aussi automatiquement un état à partir d'un ou plusieurs registres d'état de superviseur CXS(SR) vers l'un correspondant d'un ou plusieurs registres d'état du ou des fils de travail lancés par l'instruction RUN ou RUNALL. Par exemple, l'état copié peut comprendre un ou plusieurs modes, comme un mode d'arrondi en virgule flottante (par exemple, arrondi au plus proche ou arrondi à zéro) et/ou un mode de débordement (par exemple qui sature ou utilise une valeur séparée représentant l'infini). L'état ou le mode copié contrôle ensuite le fil de travail en question pour fonctionner selon l'état ou le mode copié. Dans des modes de réalisation, le fil de travail peut ultérieurement écraser cela dans son propre registre d'état (mais ne peut pas modifier l'état du superviseur). Dans d'autres modes de réalisation alternatifs ou additionnels, les fils de travail peuvent choisir de lire un état dans un ou plusieurs registres d'état du superviseur (et de nouveau peuvent changer leur propre état plus tard). Par exemple, ici encore cela pourrait consister à adopter un mode à partir du registre d'état de superviseur, comme un mode en virgule flottante ou un mode d'arrondi. Toutefois, dans des modes de réalisation, le superviseur ne peut lire aucun des registres de contexte CX0." des fils de travail. [0061] Une fois lancé, chacun des fils de travail actuellement alloué W0...W3 procède de façon à réaliser une ou plusieurs tâches de calcul définies dans le code spécifié par l'instruction d'abandon respective. À la fin de cela, le fil e travail respectif retourne le créneau temporel dans lequel il s'exécute au fil superviseur. Cela est obtenu en exécutant une instruction de sortie ("EXIT"). Dans certains modes de B17823 FR - 400479FR réalisation cela ne prend aucun opérande : EXIT [0062] En variante, dans d'autres modes de réalisation, l'instruction EXIT prend un seul opérande exit state (par exemple une valeur binaire), à utiliser dans tout but souhaité par le programmeur pour indiquer un état du codelet respectif à sa terminaison (par exemple pour indiquer si une certaine condition est remplie ou si une erreur est survenue) EXIT exit state [0063] Dans tous les cas, l'instruction EXIT agit sur l'ordonnanceur 24 afin que le créneau temporel dans lequel elle est exécutée soit rendu au fil superviseur. Le fil superviseur peut alors réaliser une ou plusieurs tâches de supervision suivantes (par exemple une synchronisation à barrière et/ou un échange de données), et/ou continuer à exécuter une autre instruction d'abandon pour allouer un nouveau fil de travail (W4, etc.) au créneau en question. On notera de nouveau que par conséquent le nombre total de fils de travail dans la mémoire d'instructions 12 peut être supérieur au nombre de fils que l'unité de traitement à fils en barillet 10 peut entrelacer à chaque instant. C'est le rôle du fil superviseur SV de planifier lesquels des fils de travail WO_Wj provenant de la mémoire d'instructions 12, a quel stade dans le programme global, doivent être affectés à tel créneau des créneaux temporels entrelacés SO_SM dans le schéma de tour de rôle de l'ordonnanceur 24. [0064] Dans des modes de réalisation, il y a aussi une autre façon par laquelle un fil de travail peut retourner son créneau temporel au fil superviseur. C'est-à-dire que l'unité d'exécution 18 comprend un mécanisme d'exception agencé de manière à ce Que, lorsqu'un fil de travail rencontre une exception, celui-ci puisse rendre automatiquement son créneau 26 B17823 FR - 400479FR temporel au superviseur. Dans ce cas, l'état de sortie individuel peut être mis à une valeur par défaut ou peut être laissé inchangé. [0065] En outre, dans des modes de réalisation, l'unité de traitement 10 peut être agencée de telle sorte qu'une ou plusieurs instructions du jeu d'instructions soient réservées pour une utilisation par le fil superviseur et pas par les fils de travail, et/ou qu'une ou plusieurs instructions du jeu d'instructions soient réservées pour une utilisation par les fils de travail et pas par le fil superviseur. Par exemple, ceci pourrait être imposé dans l'étage d'exécution 18, l'étage de décodage 16 ou l'étage d'extraction 14, en supposant que les instructions d'abandon (RUN) et de sortie (EXIT) agissent sur l'étage concerné pour l'informer de quel type de fil est actuellement en train d'occuper le créneau en question. Dans de tels cas, les instructions spécifiques au superviseur comprennent au moins l'instruction d'abandon, mais pourraient aussi inclure d'autres instructions comme une ou plusieurs instructions de synchronisation à barrière si l'unité de traitement 10 contient de la logique dédiée pour réaliser une synchronisation à barrière. Aussi, les instructions spécifiques des fils de travail comprennent au moins l'instruction de sortie, mais peuvent aussi inclure d'autres instructions comme des opérations en virgule flottante (qui sont susceptibles d'erreurs). [0066] Le processeur 4 décrit précédemment peut être utilisé comme un unique processeur autonome comprenant une seule instance de l'unité de traitement 10 et de la mémoire 11. Toutefois en variante, comme cela est illustré en figure 5, dans certains modes de réalisation le processeur 4 peut être l'un de plusieurs processeurs dans une matrice 6, intégrée sur la même puce, ou s'étendant sur plusieurs puces. Dans ce cas, les processeurs 4 sont connectés entre eux par 27 B17823 FR - 400479FR l'intermédiaire d'une interconnexion 34 appropriée leur permettant d'échanger des données entre eux, y compris les résultats d'un ou plusieurs calculs réalisé par l'un, par certains ou par tous les différents fils de travail dans toute l'étendue de la matrice. Par exemple, le processeur 4 peut être l'un de multiples pavés dans un processeur multi-pavé plus large mis en oeuvre sur une seule puce, chaque pavé comprenant sa propre instance respective de l'unité de traitement à fils en barillet 10 et de la mémoire 11 associée, chacun étant agencé de la manière décrite précédemment en relation avec les figures 1 à 4. Pour être complet, on notera aussi qu'une "matrice" telle que mentionnée ici n'implique pas nécessairement un nombre particulier de dimensions ou une disposition physique des pavés ou des processeurs 4. Dans certains de ces modes de réalisation, le superviseur peut être responsable de la réalisation d'échanges entre pavés. [0067] Dans certains modes de réalisation, on donne à l'instruction EXIT une fonction spéciale, à savoir de faire en sorte Qu'un état de sortie spécifié dans l'opérande de l'instruction EXIT soit automatiquement agrégé (par de la logique matérielle dédiée) avec les états de sortie d'une pluralité d'autres fils du travail qui s'exécutent dans le même pipeline 13, chacun de ces fils de travail ayant un état de sortie respectif spécifié comme étant l'opérande de sa propre instance de l'instruction EXIT. Cela peut consister à agréger l'état de sortie spécifié avec les états de sortie de tous les fils de travail qui sont exécutés par le même module processeur 4 (c'est-à-dire dans le même pipeline 13 d'une unité de traitement 10 donnée), ou au moins de tous ceux Qui sont dans une phase spécifiée. Dans certains modes de réalisation, d'autres instructions peuvent être exécutées pour faire un agrégat avec les états de sortie de fils de travail qui sont exécutés sur un ou plusieurs autres 28 B17823 FR - 400479FR processeurs dans une matrice 6 (qui peuvent être d'autres pavés sur la même puce ou même sur d'autres puces). Dans tous les cas, le processeur 4 comprend au moins un registre 38 agencé spécifiquement pour mémoriser l'état de sortie agrégé localement du processeur 4. Dans certains modes de réalisation, il s'agit d'un des registres d'état du superviseur dans le banc de registres de contexte de superviseur CXS. Lorsque chaque instruction EXIT est exécutée par le fil respectif, la logique d'agrégation dédiée amène l'état de sortie spécifié dans l'opérande de l'instruction EXIT à contribuer à l'état de sortie agrégé mémorisé dans le registre d'état de sortie 38. À tout instant, par exemple une fois que tous les fils de travail auquel on s'intéresse se sont terminés au moyen d'une instruction de sortie respective, le fil superviseur peut ensuite accéder à l'état de sortie dans le registre d'état de sortie 38. Cela peut comprendre un accès à son propre registre d'état SR. [0068] La logique d'agrégation est mise en oeuvre dans des circuits matériels dédiés dans l'unité d'exécution 18. Ainsi une facilité implicite supplémentaire est incluse dans l'instruction pour mettre fin à un fil de travail. Des circuits ou du matériel dédiés désignent des circuits ayant une fonction câblée, contrairement au fait d'être programmée par logiciel en utilisant du code d'usage général. La mise à jour de l'état de sortie agrégé localement (dans le registre 38) est déclenché par l'exécution du code opération de l'instruction de sortie EXIT spéciale, celle-ci étant l'une des instructions de code machine fondamentales dans le jeu d'instructions du processeur 4, ayant la fonctionnalité inhérente d'agréger les états de sortie. Aussi, l'état de sortie agrégé localement est mémorisé dans un registre 38, ce qui signifie un élément de stockage dédié (dans certains modes de réalisation un seul bit de stockage) dont la valeur peut 29 B17823 FR - 400479FR être accédée par le code s'exécutant dans le pipeline. De préférence, le registre d'état de sortie 38 forme l'un des registres d'état du superviseur. [0069] Dans un exemple, les états de sortie des fils individuels et l'état de sortie agrégé peuvent chacun prendre la forme d'un seul bit, c'est-à-dire 0 ou 1, et la logique d'agrégation peut être agencée pour réaliser un ET logique des états de sortie de fils de travail individuels. Cela signifie que toute entrée à 0 provoque un agrégat à 0, mais si toutes les entrées sont à 1, alors l'agrégat vaut 1. C'est-à-dire que si on utilise un 1 pour représenter un résultat vrai ou avec succès, cela signifie que si l'un quelconque des états de sortie locaux de l'un des fils de travail est faux ou en échec, alors l'état de sortie agrégé global va aussi être faux ou va représenter un résultat sans succès. Par exemple, cela pourrait être utilisé pour déterminer si les fils de travail ont tous satisfait ou non une condition terminale. Ainsi, le sous-programme superviseur peut interroger un seul registre (dans des modes de réalisation un seul bit) pour demander "est-ce que quelque chose s'est mal passé ? Oui ou non", plutôt que de devoir examiner les états individuels des fils de travail individuels sur chaque pavé individuel. En fait, dans des modes de réalisation, le superviseur n'est pas capable d'interroger un fil de travail à un point arbitraire et n'a pas accès à l'état des fils de travail, ce qui fait que le registre d'état de sortie 38 est le seul moyen pour déterminer le résultat d'un fil de travail. Le superviseur ne sait pas quel banc de registres de contexte correspond à quel fil de travail, et après que le fil de travail est sorti par EXIT, l'état du fil de travail disparaît. La seule autre façon pour que le superviseur détermine une sortie d'un fil de travail serait que le fil de travail laisse un message dans la mémoire de données d'usage général 22. B17823 FR - 400479FR [0070] Une fonction équivalente à la logique susmentionnée serait de remplacer le ET par une porte OU et d'inverser l'interprétation des états de sortie 0 et 1 par logiciel, c'est-à-dire 0 , vrai, I faux. De manière équivalente si la porte ET est remplacée par une porte OU mais l'interprétation des états de sortie n'est pas inversée, et la valeur de réinitialisation non plus, alors l'état agrégé $LC va enregistrer si l'un quelconque (plutôt que tous) des fils de travail est sorti avec l'état I. Dans d'autres modes de réalisation, les états de sortie n'ont pas besoin d'être des bits uniques. Par exemple, l'état de sortie de chaque fil de travail individuel peut être un seul bit, mais l'état de sortie agrégé peut comprendre deux bits représentant un état trinaire : tous les fils de travail sont sortis avec l'état 1, tous les fils de travail sont sortis avec l'état 0, ou les états de sortie des fils de travail étaient mélangés. À titre d'exemple de la logique pour mettre cela en oeuvre, l'un des deux bits codant la valeur trinaire peut être un ET booléen des états de sortie individuels, et l'autre bit de la valeur trinaire peut être un OU booléen des états de sortie individuels. Le troisième cas codé, indiquant que les états de sortie des fils de travail étaient mélangés, peut alors être formé par un OU EXCLUSIF de ces deux bits. [0071] Les états de sortie peuvent être utilisés pour représenter ce que le programmeur souhaite, mais un exemple particulièrement envisagé consiste à utiliser un état de sortie à 1 pour indiquer que le fil de travail respectif est sorti avec un état "succès" ou "vrai", tandis qu'un état de sortie à 0 indique que le fil de travail respectif est sorti avec un état "échec" ou "faux" (ou vice versa si le circuit d'agrégation réalise un OU au lieu d'un ET et le registre $LC 38 est remis initialement à 0). Par exemple, si on considère une application où chaque fil de travail réalise un calcul 31 B17823 FR - 400479FR ayant une condition associée, comme une condition indiquant si l'erreur ou les erreurs dans lesdits un ou plusieurs paramètres d'un noeud respectif dans le graphe d'un algorithme d'intelligence artificielle se trouvent à un niveau acceptable selon une métrique prédéterminée. Dans ce cas, un état de sortie individuel d'un niveau logique donné (par exemple 1) peut être utilisé pour indiquer que la condition est satisfaite (par exemple que l'erreur ou les erreurs dans lesdits un ou plusieurs paramètres du noeud sont à un niveau acceptable selon une certaine métrique) ; tandis qu'un état de sortie individuel du niveau logique opposé (par exemple 0) peut être utilisé pour indiquer que la condition n'était pas satisfaite (par exemple l'erreur ou les erreurs ne sont pas à un niveau acceptable selon la métrique en question). La condition peut par exemple être un seuil d'erreur placé sur un seul paramètre ou sur chaque paramètre, ou pourrait être une fonction plus complexe d'une pluralité de paramètres associés au calcul respectif réalisé par le fil de travail. [0072] Dans un autre exemple plus complexe, les états de sortie individuels des fils de travail et l'état de sortie agrégé peuvent comprendre chacun deux ou plusieurs bits, qui peuvent être utilisés, par exemple, pour représenter un degré de confiance dans les résultats des fils de travail. Par exemple, l'état de sortie de chaque fil de travail individuel peut représenter une mesure probabiliste de confiance dans un résultat du fil de travail respectif, et la logique d'agrégation peut être remplacée par un circuit plus complexe pour réaliser une agrégation probabiliste des niveaux de confiance individuels sous forme matérielle. [0073] Quelle que soit la signification qui est donnée par le programmeur aux états de sortie, le fil superviseur SV peut alors obtenir la valeur agrégée à partir du registre d'état de sortie 38 pour déterminer l'état de sortie agrégé 32 B17823 FR - 400479FR de tous les fils de travail qui sont sortis depuis sa dernière réinitialisation, par exemple au niveau du dernier point de synchronisation, par exemple, pour déterminer si tous les fils de travail sont sortis ou non dans un état de succès ou vrai. En fonction de cette valeur agrégée, le fil superviseur peut alors prendre une décision conformément au choix de conception du programmeur. Le programmeur peut choisir de faire l'usage 'il souhaite de l'état de sortie agrégé localement, par exemple, pour déterminer s'il faut indiquer une exception, ou pour réaliser une décision de branchement en fonction de l'état de sortie agrégé. Par exemple, le fil superviseur peut consulter l'état de sortie agrégé local afin de déterminer si une certaine portion du programme constituée d'une pluralité e fils de travail s'est terminée comme attendu ou souhaité. Si ce n'est pas le cas (par exemple au moins l'un des fils de travail est sorti dans un état échec ou faux), il peut rendre compte à un processeur hôte, ou peut réaliser une autre itération de la partie du programme comprenant les mêmes fils de travail ; mais si c'est le cas (par exemple si tous les fils de travail sont sortis avec un état de succès ou vrai) il peut à la place se brancher sur une autre partie du programme comprenant un ou plusieurs nouveaux fils de travail. [0074] De préférence, le sous-programme superviseur ne devrait pas accéder à la valeur se trouvant dans le registre d'état de sortie 38 avant Que tous les fils de travail en question soient sortis, afin que la valeur mémorisée dedans représente l'état agrégé à jour correct de tous les fils souhaités. Cette attente pourrait être imposée par une synchronisation à barrière réalisée par le fil superviseur pour attendre que tous les fils de travail locaux s'exécutant simultanément (c'est-à-dire ceux se trouvant sur le même module processeur 4, s'exécutant dans le même pipeline 13) soient sortis. C'est-à-dire Que le fil superviseur 33 B17823 FR - 400479FR réinitialise le registre d'état de sortie 38, lance une pluralité de fils de travail, puis lance une synchronisation à barrière afin d'attendre que tous les fils de travail en suspens soient sortis avant que le superviseur soit autorisé à procéder à l'obtention de l'état de sortie agrégé dans le registre d'état 38. [0075] La figure 6 illustre un exemple d'application de l'architecture de processeur décrite ici, à savoir une application à l'intelligence artificielle. [0076] Comme cela est bien connu de l'homme de l'art dans la technique de l'intelligence artificielle, l'intelligence artificielle commence par une étape d'apprentissage dans laquelle l'algorithme d'intelligence artificielle apprend un modèle de connaissance. Le modèle comprend un graphe de noeuds (c'est-à-dire des sommets) interconnectés 102 et d'arêtes (c'est-à-dire des liens) 104. Chaque noeud 102 du graphe comporte une ou plusieurs arrêtes d'entrée et une ou plusieurs arrêtes de sortie. Certaines des arêtes d'entrée de certains des noeuds 102 sont les arêtes de sortie de certains autres des noeuds, connectant par cela les noeuds entre eux pour former le graphe. En outre, une ou plusieurs des arêtes d'entrée d'un ou plusieurs des noeuds 102 forment les entrées du graphe dans son ensemble, et une ou plusieurs des arêtes de sortie d'un ou plusieurs des noeuds 102 forment les sorties du graphe dans son ensemble. Parfois un noeud donné peut même avoir tout cela : des entrées du graphe, des sorties du graphe et des connexions à d'autres noeuds. Chaque arrête 104 communique une valeur ou plus souvent un tenseur (matrice à n dimensions), cela formant les entrées et les sorties fournies aux noeuds et obtenues à partir des noeuds 102 sur leurs arêtes d'entrée et de sortie respectivement. 34 B17823 FR - 400479FR [0077] Chaque noeud 102 représente une fonction de ses une ou plusieurs entrées reçues sur son ou ses arêtes d'entrée, le résultat de cette fonction étant la ou les sorties fournies sur la ou les arêtes de sortie. Chaque fonction est paramétrée par un ou plusieurs paramètres respectifs (parfois appelés poids ou pondérations, bien qu'ils n'aient pas besoin nécessairement d'être des poids multiplicateurs). En général, les fonctions représentées par les différents noeuds 102 peuvent prendre différentes formes de fonction et/ou peuvent être paramétrées par différents paramètres. [0078] En outre, chacun desdits un ou plusieurs paramètres de chaque fonction d'un noeud est caractérisé par une valeur d'erreur respective. En outre, une condition respective peut être associée à l'erreur ou aux erreurs dans le ou les paramètres de chaque noeud 102. Pour un noeud 102 représentant une fonction paramétrée par un seul paramètre, la condition peut être un simple seuil, c'est-à-dire que la condition est satisfaite si l'erreur est dans les limites du seuil spécifié mais n'est pas satisfaite si l'erreur est au-delà du seuil. Pour un noeud 102 paramétré par plus qu'un seul paramètre respectif, la condition pour que ce noeud 102 ait atteint un niveau d'erreur acceptable peut être plus complexe. Par exemple, la condition peut être satisfaite seulement si chacun des paramètres de ce noeud 102 reste inférieur au seuil respectif. Dans un autre exemple, une métrique combinée peut être définie comme combinant les erreurs dans les différents paramètres pour le même noeud 102, et la condition peut être satisfaite si la valeur de la métrique combinée reste inférieure à un seuil spécifié, mais sinon la condition n'est pas satisfaite si la valeur de la métrique combinée est au-delà du seuil (ou vice et versa en fonction de la définition de la métrique). Quelle que soit la condition, cela donne une mesure indiquant si l'erreur dans le ou les paramètres du B17823 FR - 400479FR noeud reste en dessous d'un certain niveau ou degré d'acceptabilité. En général toute métrique appropriée peut être utilisée. La condition ou la métrique peuvent être les mêmes pour tous les noeuds, ou peuvent être différentes pour certains noeuds différents respectifs. [0079] Dans l'étape d'apprentissage, l'algorithme reçoit des données expérimentales, c'est-à-dire de multiples points de données représentant différentes combinaisons possibles d'entrées du graphe. Au fur et à mesure que des données expérimentales sont reçues, l'algorithme ajuste progressivement les paramètres des divers noeuds 102 du graphe sur la base des données expérimentales de manière à tenter de minimiser les erreurs dans les paramètres. Le but est de trouver des valeurs des paramètres telles que la sortie du graphe soit le plus proche possible d'une sortie souhaitée pour une entrée donnée. Quand le graphe dans son ensemble tend vers un tel état, on dit que le graphe converge. Après un degré approprié de convergence le graphe peut être utilisé pour réaliser des prédictions ou des inférences, c'est-à-dire pour prédire une sortie pour une certaine entrée donnée ou inférer une cause pour une certaine sortie donnée. [0080] L'étage d'apprentissage peut prendre un certain nombre de différentes formes possibles. Par exemple, dans une approche supervisée, les données expérimentales d'entrée prennent la forme de données d'apprentissage, c'est-à-dire d'entrées qui correspondent à des sorties connues. Avec chaque point de données, l'algorithme peut ajuster les paramètres de telle sorte Que la sortie concorde plus précisément avec la sortie connue pour l'entrée donnée. Dans l'étage de prédiction qui suit, le graphe peut alors être utilisé pour mapper une interrogation d'entrée vers une sortie prédite approximative (ou vice et versa si on réalise une inférence). D'autres approches sont aussi possibles. Par exemple, dans une approche 36 B17823 FR - 400479FR non supervisée, il n'y a pas de concept de résultat de référence par donnée d'entrée, et à la place on laisse l'algorithme d'intelligence artificielle identifier sa propre structure dans les données de sortie. Ou, dans une approche de renforcement, l'algorithme essaye au moins une sortie possible pour chaque point de données dans les données expérimentales d'entrée, et on lui dit si sa sortie est positive ou négative (et potentiellement le degré avec lequel elle est positive ou négative), par exemple gagné ou perdu, ou récompense ou punition, ou similaire. Sur de nombreux essais, l'algorithme peut progressivement ajuster les paramètres du graphe pour être capable de prédire des entrées qui vont amener une sortie positive. Les diverses approches et divers algorithmes pour l'apprentissage d'un graphe sont connus de l'homme de l'art dans le domaine de l'intelligence artificielle. [0081] Selon un exemple d'application des techniques décrites ici, chaque fil de travail est programmé pour réaliser les calculs associés à un noeud individuel respectif parmi les noeuds 102 dans un graphe d'intelligence artificielle. Dans ce cas, au moins certaines des arêtes 104 entre les noeuds 102 correspondent aux échanges de données entre des fils, et certaines peuvent impliquer des échanges entre pavés. En outre, les états de sortie individuels des fils de travail sont utilisés par le programmeur pour représenter si le noeud respectif 102 a satisfait ou non sa condition respective pour la convergence du ou des paramètres de ce noeud, c'est-à-dire si l'erreur dans le ou les paramètres reste dans le niveau ou la région acceptable dans l'espace d'erreur. Par exemple, il existe un exemple d'utilisation des modes de réalisation dans lequel chacun des états de sortie individuels est un bit individuel et l'état de sortie agrégé est un ET des états de sortie individuels (ou de façon équivalente un OU si 0 est 37 B17823 FR - 400479FR pris comme étant positif) ; ou dans lequel l'état de sortie agrégé est une valeur trinaire représentant si les états de sortie individuels étaient tous vrais, tous faux ou mélangés. Ainsi, en examinant une seule valeur de registre dans le registre d'état de sortie 38, le programme peut déterminer si le graphe dans son ensemble, ou au moins une sous-région du graphe, a convergé jusqu'à un degré acceptable. [0082] Dans une autre variante de cela, on peut utiliser des modes de réalisation dans lesquels l'agrégation prend la forme d'une agrégation statistique de valeurs de confiance individuelles. Dans ce cas, chaque état de sortie individuel représente un niveau de confiance (par exemple un pourcentage) indiquant que les paramètres du noeud représenté par _Le fil respectif ont atteint un degré d'erreur acceptable. L'état de sortie agrégé peut alors être utilisé pour déterminer un degré de confiance global indiquant si le graphe, ou une sous-région graphe, a convergé jusqu'à un degré acceptable. [0083] Dans le cas d'un agencement multi-pavé 6, chaque pavé exécute un sous-graphe du graphe. Chaque sous-graphe comprend un sous-programme superviseur comprenant un ou plusieurs fils superviseurs, et un ensemble de fils de travail dans lequel certains ou la totalité des fils de travail peuvent prendre la forme de codelets. [0084] Dans de telles applications, ou effectivement dans toute application à base de graphe où chaque fil de travail est utilisé pour représenter un noeud respectif dans un graphe, le "codelet" que comprend chaque fil de travail peut être défini comme étant une procédure logicielle agissant sur l'état persistant et les entrées et/sorties d'un sommet, dans laquelle le codelet : - est lancé sur un contexte de registre de fil de travail, pour s'exécuter dans un créneau de barillet, par le fil 38 B17823 FR - 400479FR superviseur exécutant une instruction "run" ; - s'exécute jusqu'à achèvement sans communications avec d'autres codelets ou le superviseur (excepté pour le retour vers le superviseur lorsque le codelet sort) ; - a accès à l'état persistant d'un sommet par l'intermédiaire d'un pointeur mémoire fourni par l'instruction "run", et à une zone de travail non persistante en mémoire qui est privée pour ce créneau de barillet ; et - exécute un "EXIT" en tant que sa dernière instruction, suite quoi le créneau de barillet qu'il utilisait est rendu au superviseur, et l'état de sortie spécifié par l'instruction de sortie est agrégé avec l'état de sortie local du pavé qui est visible du superviseur. [0085] Mettre à jour un graphe (ou un sous-graphe) signifie mettre à jour une fois chaque sommet constituant, dans n'importe quel ordre cohérent avec la causalité définie par les arêtes. Mettre à jour un sommet signifie exécuter un codelet sur l'état du sommet. Un codelet est une procédure de mise à jour pour des sommets - un codelet est habituellement associé à de nombreux sommets. Le superviseur exécute une instruction RUN par sommet, chacune de ces instructions spécifiant une adresse d'état de sommet et une adresse de codelet. [0086] On notera que les modes de réalisation susmentionnés ont été décrits uniquement à titre d'exemple. [0087] Par exemple, l'applicabilité de la présente descrip- tion n'est pas limitée à l'architecture de processeur particulière décrite en relation avec les figures 2 et 3, et en général les concepts décrits ici pourraient s'appliquer à toute architecture de processeur comportant une pluralité de créneaux temporels d'exécution, en ajoutant au moins un ou plusieurs contextes qui sont des créneaux temporels possibles. 39 B17823 FR - 400479FR [0088] On notera aussi qu'il n'est pas exclu qu'encore d'autres contextes au-delà du nombre de créneaux temporels puissent être inclus dans d'autres buts. Par exemple, certains processeurs comprennent un contexte de débogage qui ne représente jamais un fil d'exécution effectif, mais est utilisé par un fil lorsqu'il rencontre une erreur afin de mémoriser l'état de programme du fil erroné pour le faire analyser ultérieurement par le développeur du programme dans un but de débogage. [0089] En outre, le rôle du fil superviseur ne se limite pas seulement à une synchronisation à barrière et/ou un échange de données entre des fils, et dans d'autres modes de réalisation il pourrait à la place ou en plus être responsable d'autres fonctionnalités impliquant une visibilité de deux ou plusieurs des fils de travail. Par exemple, dans des modes de réalisation où le programme comprend de multiples itérations d'un graphe, le fil superviseur pourrait être responsable de la détermination du nombre d'itérations du graphe qu'il faut effectuer, qui pourrait dépendre d'un résultat d'une itération précédente. [0090] D'autres variantes ou d'autres applications des techniques décrites pourraient apparaître à un homme de l'art étant donnée la description faite ici. La portée de cette description n'est pas limitée par les exemples de réalisation décrits ici, REVENDICATIONS1. Processeur comprenant : une unité d'exécution agencée pour exécuter un fil respectif dans chaque créneau temporel d'une séquence répétitive de créneaux temporels différents, la séquence étant constituée d'une pluralité de créneaux temporels dans lesquels la logique d'exécution est actionnable pour entrelacer l'exécution des fils respectifs ; et une pluralité d'ensembles de registres de contexte, chacun comprenant un ensemble respectif de registres pour représenter un état respectif d'un fil respectif, les ensembles de registres de contexte comprenant un ensemble de registres de contexte de fil de travail respectif pour chacun des créneaux temporels que l'unité d'exécution est capable d'entrelacer dans ladite séquence et au moins un ensemble de registres de contexte supplémentaire, de sorte que le nombre d'ensembles de registres de contexte est supérieur d'au moins un par rapport au nombre de créneaux temporels que l'unité d'exécution est capable d'entrelacer, les ensembles de registres de contexte de travail étant agencés pour représenter les états respectifs de fils de travail respectifs qui réalisent des tâches de calcul, et l'ensemble de registres de contexte supplémentaire étant agencé pour représenter l'état d'un fil superviseur qui planifie l'exécution des tâches réalisées par les fils de travail ; dans lequel le processeur est agencé pour commencer à exécuter le fil superviseur dans chacun des créneaux temporels, et pour permettre au fil superviseur d'abandonner ensuite individuellement chacun des créneaux temporels dans lesquels il s'exécute à l'un respectif des fils de travail. 41 B17823 FR - 400479FR 2. Processeur selon la revendication 1, le processeur étant agencé pour autoriser le fil superviseur à réaliser ledit abandon en exécutant une ou plusieurs instructions d'abandon dans le créneau temporel dans lequel il s'exécute. 3. Processeur selon la revendication 2, dans lequel lesdites une ou plusieurs instructions d'abandon sont une seule instruction d'abandon. 4. Processeur selon la revendication 2 ou 3, dans lequel l'unité d'exécution est agencée pour fonctionner selon un jeu d'instructions définissant des types d'instructions de code machine reconnus par le processeur, chaque instruction de code machine étant définie par un code opération respectif ; et dans lequel au moins l'une desdites une ou plusieurs instructions d'abandon est une instruction dédiée du jeu d'instructions ayant un code d'opération qui lorsqu'il est exécuté déclenche ledit abandon. 5. Processeur selon la revendication 4, dans lequel il est implicite dans le code opération de ladite au moins une instruction d'abandon que le créneau temporel qui est abandonné est le créneau temporel dans lequel ladite au moins une instruction d'abandon est exécutée. 6. Processeur selon l'une quelconque des revendications 4 ou 5, dans lequel une ou plusieurs instructions du jeu d'instructions comprenant au moins lesdites une ou plusieurs instructions d'abandon sont réservées pour une utilisation par le fil superviseur et ne sont pas exécutables par les fils de travail. 7. Processeur selon l'une quelconque des revendications précédentes, dans lequel lesdites une ou plusieurs instructions d'abandon spécifient comme opérande une adresse du fil de travail auquel est abandonné le créneau temporel abandonné. 42 B17823 FR - 400479FR S. Processeur selon l'une quelconque des revendications précédentes, le processeur étant agencé pour autoriser le fil de travail, auquel l'un des créneaux temporels a été abandonné, à retourner le créneau temporel dans lequel il s'exécute au fil superviseur en exécutant une instruction de sortie dans le créneau temporel dans lequel il s'exécute. 9. Processeur selon la revendication 8, dans lequel l'unité d'exécution est agencée pour fonctionner selon un jeu d'instructions définissant des types d'instructions de code machine reconnus par le processeur, chaque instruction de code machine étant définie par un code opération respectif ; et dans lequel l'instruction de sortie est une instruction dédiée du jeu d'instructions ayant un code opération qui lorsqu'il est exécuté réalise ledit retour du créneau temporel abandonné au fil superviseur. 10. Processeur selon la revendication 9, dans lequel il est implicite dans le code opération de l'instruction de sortie que le créneau temporel qui est retourné est le créneau temporel dans lequel l'instruction de sortie est exécutée. 11. Processeur selon la revendication 9 ou 10, dans lequel il est implicite dans le code opération de l'instruction de sortie que le fil auquel le créneau temporel retourné est retourné est le fil superviseur. 12. Processeur selon l'une quelconque des revendications 8 à 11, dans lequel une ou plusieurs instructions du jeu d'instructions comprenant au moins l'instruction de sortie sont réservées pour une utilisation par les fils de travail et ne sont pas exécutables par le fil superviseur. 13. Processeur selon l'une quelconque des revendications précédentes, dans lequel le fil superviseur est agencé pour 43 B17823 FR - 400479FR réaliser une synchronisation à barrière pour synchroniser les fils de travail. 14. Processeur selon l'une quelconque des revendications précédentes, dans lequel le fil superviseur est agencé pour réaliser une communication avec une ressource externe de la part d'un ou plusieurs des fils de travail. 15. Processeur selon la revendication 2 ou l'une quelconque des revendications dépendantes, dans lequel l'instruction d'abandon copie en outre un ou plusieurs modes à partir d'un ou plusieurs registres d'état de l'ensemble de registres de contexte de superviseur dans un ou plusieurs registres d'état correspondants du fil de travail lancé par l'instruction d'abandon, contrôlant par cela le fil de travail pour qu'il adopte lesdits un ou plusieurs modes. 16. Processeur selon l'une quelconque des revendications précédentes, le processeur étant en outre agencé pour exécuter une instruction qui lance un ensemble de plus qu'un seul fil de travail conjointement dans certains créneaux respectifs desdits créneaux, tous les fils exécutant le même code. 17. Processeur selon la revendication 4 ou l'une quel- conque des revendications dépendantes, dans lequel le jeu d'instructions que le processeur est destiné à exécuter comprend en outre une instruction de multi-exécution qui lance une pluralité de fils de travail ensemble dans des créneaux respectifs desdits créneaux, la pluralité de fils de travail étant de trois ou plus ; dans lequel l'un des fils de travail comprend du code extrait d'une première adresse spécifiée par un opérande de l'instruction de multi-exécution, et dans lequel les autres fils de la pluralité de fils de travail comprennent du code extrait 44 B17823 FR - 400479FR d'adresses respectives espacées d'un pas de progression d'une valeur de pas par rapport à la première adresse, la valeur de pas étant spécifiée par un autre opérande de l'instruction de multi-exécution. 18. Processeur selon la revendication 17, dans lequel le nombre de fils de travail est égal au nombre de créneaux temporels. 19. Procédé d'actionnement d'un processeur, le procédé comprenant : utiliser une unité d'exécution pour exécuter un fil respectif dans chaque créneau d'une séquence répétitive de créneaux temporels différents, la séquence étant constituée d'une pluralité de créneaux temporels dans lesquels la logique d'exécution est actionnable pour entrelacer l'exécution des fils respectifs ; dans lequel _Le processeur comprend une pluralité d'ensembles de registres de contexte, chacun comprenant un ensemble respectif de registres pour représenter un état respectif d'un fil respectif, dans lequel les ensembles de registres de contexte comprennent un ensemble de registres de contexte de travail respectif pour chaque créneau de la pluralité de créneaux temporels que l'unité d'exécution est capable d'entrelacer dans ladite séquence et au moins un ensemble de registres de contexte supplémentaire, de sorte que le nombre d'ensembles de registres de contexte est supérieur d'au moins un par rapport au nombre de créneaux temporels que l'unité d'exécution est capable d'entrelacer, les ensembles de registres de contexte de travail étant utilisés pour représenter les états respectifs de fils de travail respectifs qui réalisent des tâches de calcul, et l'ensemble de registres de contexte supplémentaire étant utilisé pour représenter l'état d'un fil superviseur qui planifie l'exécution des tâches réalisées par les fils de 45 B17823 FR - 400479FR travail ; et le procédé comprend en outre le fait de commencer l'exécution du fil superviseur dans chacun des créneaux temporels, et le fil superviseur abandonne ensuite individuellement chacun des créneaux temporels dans lesquels il s'exécute à l'un respectif des fils de travail. 20. Produit programme informatique comprenant du code incorporé sur un stockage lisible par un ordinateur et gui est agencé pour s'exécuter sur le processeur de l'une quelconque des revendications 1 à 18, dans lequel le code comprend le fil superviseur et les fils de travail.