FR 3072800 A1 20190426 FR 1859637 A 20181018 B17781 FR - 408529FR DESCRIPTION TITRE : SYNCHRONISATION DANS UN AGENCEMENT DE TRAITEMENT A PAVES MULTIPLES Domaine technique [0001] La présente description concerne la synchronisation des charges de travail de multiples pavés différents dans un agencement de traitement multi-pavé, chaque pavé comprenant sa propre unité de traitement et sa propre mémoire. En particulier, la description concerne des schémas de communication parallèles synchrones massifs (BSP) dans lesquels chaque pavé d'un groupe de pavés doit achever une phase de calcul avant que l'un quelconque des pavés du groupe puisse procéder à une phase d'échange. 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 2 B17781 FR - 408529FR 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 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 cacher la latence du pipeline. Aussi, cette approche ne nécessite pas autant de matériel supplémentaire 3 B17781 FR - 408529FR dédié a 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] Une forme de parallélisme peut être obtenue au moyen d'un processeur comprenant un agencement de pavés multiples sur la même puce (c'est-à-dire la même puce élémentaire), chaque pavé comprenant respectivement séparément sa propre unité de traitement et sa propre mémoire (comprenant la mémoire de programme et la mémoire de données). Ainsi des portions séparées de code de programme peuvent être exécutées en parallèle sur des pavés différents. Les pavés sont connectés entre eux par l'intermédiaire d'une interconnexion sur la puce qui permet au code exécuté sur des pavés différents de communiquer entre les pavés. Dans certains cas, l'unité de traitement de chaque pavé peut elle-même exécuter de multiples fils simultanés sur le pavé, chaque pavé ayant son propre ensemble de contextes respectifs et son pipeline correspondant comme cela a été décrit précédemment afin de prendre en charge l'entrelacement de multiples fils sur le même pavé à travers le même pipeline. [0007] En général, il peut exister des dépendances entre les portions d'un programme s'exécutant sur des pavés différents. Une technique est par conséquent nécessaire pour empêcher qu'un morceau de code sur un pavé s'exécute en avance sur des données dont il dépend Qui sont mises à disposition par un autre morceau de code sur un autre pavé. Il existe un certain nombre de schémas possibles pour obtenir cela, mais le schéma Qui nous intéresse ici est connu sous le nom de "parallèle synchrone massif" (BSP). Selon le schéma BSP, chaque pavé réalise une phase de calcul et une phase d'échange dans un cycle alternatif. Pendant la phase de calcul chaque pavé réalise une ou plusieurs tâches de calcul localement sur le pavé, mais ne communique aucun des résultats de ses calculs 4 B17781 FR - 408529FR à aucun autre des pavés. Dans la phase d'échange, chaque pavé est autorisé à échanger un ou plusieurs résultats des calculs provenant de la phase de calcul précédente avec un ou plusieurs autres des pavés du groupe, mais ne procède pas encore à la phase de calcul suivante. En outre, selon le principe BSP, une synchronisation à barrière est placée à la jointure faisant la transition entre la phase de calcul et la phase d'échange, ou à la transition entre la phase d'échange et la phase de calcul, ou les deux. C'est-à-dire que : soit (a) tous les pavés doivent achever leurs phases de calcul respectives avant que l'un quelconque du groupe soit autorisé a procéder à la phase d'échange suivante, soit (b) tous les pavés du groupe doivent achever leurs phases d'échange respectives avant que l'un quelconque des pavés du groupe soit autorisé à procéder à la phase de calcul suivante, soit (c) les deux. Dans certains scénarios un pavé réalisant un calcul peut être autorisé a communiquer avec d'autres ressources du système comme une carte réseau ou un disque de stockage, tant qu'aucune communication avec d'autres pavés se trouvant dans le groupe n'est impliquée. [0008] Un exemple d'utilisation de traitement multi-fil et/ou multi-pavé se trouve dans l'intelligence artificielle. Comme cela est connu de l'homme de l'art dans le domaine de l'intelligence artificielle, un algorithme d'intelligence artificielle est basé sur la réalisation de mises à jour itératives d'un "modèle de connaissance", qui peut être représenté par un graphe de multiples noeuds interconnectés. Chaque noeud représente une fonction de ses entrées. Certains noeuds reçoivent les entrées du graphe et certains noeuds reçoivent des entrées provenant d'un ou plusieurs autres noeuds, alors que la sortie de certains noeuds forme les entrées d'autres noeuds, et la sortie de certains noeuds fournit la sortie du graphe (et dans certains cas un noeud donné peut B17781 FR - 408529FR même avoir tout cela : des entrées vers le graphe, des sorties du graphe et des connexions à d'autres noeuds). En outre, la fonction au niveau de chaque noeud est paramétrée par un ou plusieurs paramètres respectifs, c'est-à-dire des pondérations. Pendant une étape d'apprentissage le but est, sur la base d'un ensemble de données d'entrée expérimentales, de trouver des valeurs pour les divers paramètres de telle sorte que le graphe dans son ensemble génère une sortie souhaitée pour une plage d'entrées possibles. Divers algorithmes pour réaliser cela sont connus dans la technique, comme un algorithme à rétro-propagation basé sur une descente de gradient stochastique. Sur de multiples itérations basées sur les données d'entrée, les paramètres sont progressivement ajustés pour diminuer leurs erreurs, et ainsi le graphe converge vers une solution. Dans un étage ultérieur, le modèle appris peut alors être utilisé pour réaliser des prédictions de sorties étant donné un ensemble spécifié d'entrées ou pour réaliser une inférence en ce qui concerne des entrées (des causes) étant donné un ensemble spécifié de sorties. [0009] La mise en oeuvre de chaque noeud va impliquer le traitement de données, et les interconnexions du graphe correspondent à des données à échanger entre les noeuds. Typiquement, au moins une partie du traitement de chaque noeud peut être réalisée indépendamment de certains ou de tous les autres noeuds du graphe, et par conséquent de grands graphes présentent de grandes opportunités de simultanéité et/ou de parallélisme. Résumé de l'invention [0010] On va décrire dans la suite des composants d'un processeur ayant une architecture qui a été développée pour répondre à des problèmes qui se posent dans les calculs impliqués dans des applications d'intelligence artificielle. 6 B17781 FR - 408529FR Le processeur décrit ici peut être utilisé comme accélérateur de travail, c'est-à-dire qu'il reçoit une charge de travail d'une application s'exécutant sur un ordinateur hôte, la charge de travail se présentant en général sous la forme de très grands ensembles de données à traiter (comme les grands ensembles de données expérimentales utilisés par un algorithme d'intelligence artificielle pour apprendre un modèle de connaissance, ou les données à partir desquelles on doit réaliser une prédiction ou une inférence en utilisant un modèle de connaissance acquis préalablement). Un but de l'architecture présentée ici est de traiter ces très grandes quantités de données avec une grande efficacité. L'architecture du processeur a été développée pour traiter des charges de travail impliquées dans l'intelligence artificielle. Néanmoins, il apparaîtra clairement que l'architecture décrite peut aussi être appropriée pour d'autres charges de travail partageant des caractéristiques similaires. [0011] Lors de l'exécution de différentes portions d'un programme sur de multiples pavés, il peut être nécessaire de réaliser une synchronisation à barrière pour amener de multiples pavés à un point d'exécution commun. il peut être aussi souhaité de déterminer un état du programme dans son ensemble après que tous les pavés ont achevé une phase de calcul, par exemple pour déterminer si une exception doit être rapportée à l'hôte, ou pour prendre une décision de branchement pour déterminer s'il faut se brancher vers une partie suivante du programme ou continuer l'itération de la partie courante. Par exemple, si chaque pavé d'un groupe de pavés réalise les calculs d'un sous-graphe respectif d'un graphe d'intelligence artificielle, il peut être souhaité de déterminer si les noeuds du sous-graphe ont tous satisfaits une certaine condition indiquant que le graphe converge vers une solution. Pour réaliser une telle détermination en 7 B17781 FR - 408529FR utilisant des techniques existantes on a besoin d'un certain nombre d'étapes programmées en utilisant des instructions d'usage général. [0012] Il est admis qu'il serait souhaitable d'adapter le jeu d'instructions d'un processeur à des applications à capacités multi-fils à grande échelle comme l'apprentissage par machine. Selon la présente description, cela est obtenu en prévoyant une instruction à code machine dédié pour valider un résultat d'un groupe de pavés seulement une fois que tous les pavés du groupe ont achevé la phase de calcul BSP courante, assurant ainsi la possibilité de synchroniser les pavés et en même temps de déterminer une issue globale des multiples fils avec une latence réduite et une plus faible densité de code. [0013] Selon un aspect décrit ici, on prévoit un système de traitement comprenant un agencement de pavés et une interconnexion pour communiquer entre les pavés, dans lequel : chaque pavé comprend une unité d'exécution pour exécuter des instructions de code machine, chacune étant une instance d'un ensemble prédéfini de types d'instructions dans un jeu d'instructions du processeur, chaque type d'instruction se trouvant dans le jeu d'instructions étant défini par un code opération correspondant et zéro ou plus champs d'opérandes pour prendre zéro ou plus opérandes ; l'interconnexion est actionnable pour conduire des communications dans un groupe de certains ou de la totalité des pavés selon un schéma parallèle synchrone massif, d'où il résulte que chacun des pavés dudit groupe réalise une phase de calcul sur le pavé suivie d'une phase d'échange inter-pavé, la phase d'échange étant retenue jusqu'à ce que tous les pavés du groupe aient achevé la phase de calcul, chaque pavé du groupe ayant un état de sortie local à l'achèvement de la phase de calcul ; 8 B17781 FR - 408529FR le jeu d'instructions comprend une instruction de synchronisation destinée à être exécutée par chaque pavé du groupe à l'achèvement de sa phase de calcul, l'exécution de l'instruction de synchronisation amenant l'unité d'exécution à envoyer une demande de synchronisation à de la logique matérielle se trouvant dans l'interconnexion ; et la logique se trouvant dans l'interconnexion est agencée pour agréger les états de sorties locaux en un état de sortie global, et, en réponse à l'achèvement de la phase de calcul par tous les pavés du groupe comme indiqué par la réception de la demande de synchronisation provenant de tous les pavés du groupe, pour mémoriser l'état de sortie global dans un registre d'état de sortie global sur chacun des pavés du groupe, rendant ainsi l'état de sortie global accessible par une portion de code s'exécutant sur chacun des pavés du groupe. [0014] Selon un autre aspect décrit ici, on prévoit un système de traitement comprenant un agencement de pavés et une interconnexion pour communiquer entre les pavés, dans lequel : chaque pavé comprend une unité d'exécution respective pour exécuter des instructions de code machine, chacune étant une instance d'un ensemble prédéfini de types d'instructions dans un jeu d'instructions du processeur, chaque type d'instruction se trouvant dans le jeu d'instructions étant défini par un code opération correspondant et zéro ou plus champs d'opérandes pour prendre zéro ou plus opérandes ; l'interconnexion comprend de la logique de synchronisation sous forme de logique matérielle dédiée pour la coordination dans un groupe de certains ou de la totalité des pavés ; le jeu d'instructions comprend une instruction de synchronisation, l'unité d'exécution sur chaque pavé respectif étant agencée de sorte que si une instance de l'instruction de synchronisation est exécutée à travers l'unité d'exécution 9 B17781 FR - 408529FR respective, en réponse au code opération de l'instruction de synchronisation, pour amener une instance d'une demande de synchronisation à être transmise à partir du pavé respectif à la logique de synchronisation dans l'interconnexion, et pour suspendre l'émission d'instructions sur le pavé respectif en attente d'un accusé de réception de synchronisation qui est reçu en retour à partir de la logique de synchronisation ; chaque pavé comporte un registre d'état de sortie local pour mémoriser un état de sortie local du pavé à l'achèvement d'une phase de calcul respective ; la logique de synchronisation est agencée pour agréger les états de sorties locaux des pavés dans le groupe en un état de sortie global ; et la logique de synchronisation est en outre agencée pour, en réponse à la réception d'une instance de la demande de synchronisation à partir de tous les pavés du groupe, pour renvoyer l'accusé de réception de synchronisation à chacun des pavés du groupe et ainsi permettre à l'émission d'instructions de reprendre, et pour mémoriser l'état de sortie global dans un registre d'état de sortie global sur chacun des pavés du groupe, rendant ainsi l'état de sortie global accessible par une portion de code s'exécutant sur chacun des pavés du groupe. [0015] Dans des modes de réalisation, l'unité d'exécution se trouvant sur chaque pavé peut être agencée pour mettre en pause l'émission d'instructions en réponse à l'exécution de l'instruction de synchronisation ; et la logique se trouvant dans l'interconnexion peut être agencée de manière à, en réponse à la réception de la demande de synchronisation à partir de tous les pavés du groupe, renvoyer un signal d'accusé de réception de synchronisation à chacun des pavés du groupe afin de reprendre l'émission d'instructions. B17781 FR - 408529FR [0016] Dans des modes de réalisation, chacun des états de sortie locaux et des états de sortie globaux peut être un seul bit. [0017] Dans des modes de réalisation, l'agrégation peut être constituée d'un ET booléen des états de sorties locaux ou d'un OU booléen des états de sorties locaux. [0018] Dans des variantes de réalisation, l'état de sortie agrégé peut comprendre au moins deux bits représentant une valeur trinaire, indiquant si les états de sorties locaux sont tous vrais, tous faux ou mélangés. [0019] Dans des modes de réalisation, chacun des pavés du groupe de pavés peut comprendre un registre d'état de sortie local agencé pour représenter l'état de sortie local du pavé. [0020] Dans des modes de réalisation chaque pavé se trouvant dans le groupe peut comprendre : de multiples ensembles de registres de contexte, chaque ensemble de registres de contexte étant agencé pour mémoriser un état de programme de l'un respectif de multiples fils d'exécution ; et un ordonnanceur agencé pour ordonnancer l'exécution de l'un respectif d'une pluralité de fils de travail dans chacun d'une pluralité de créneaux temporels dans une séquence répétitive de créneaux temporels entrelacés, l'état de programme de chacun des fils de travail étant mémorisé dans l'un respectif des ensembles de registres de contexte ; dans lequel selon le schéma parallèle synchrone massif, la phase d'échange est retenue jusqu'à ce que tous les fils de travail sur tous les pavés du groupe aient achevé la phase de calcul ; dans lequel l'état de sortie local sur chaque pavé est un agrégat d'un état de sortie individuel fourni par chacun des fils de travail sur le pavé ; et 11 B17781 FR - 408529FR dans lequel la portion de code peut comprendre au moins l'un des multiples fils de travail se trouvant sur le pavé. [0021] Dans des modes de réalisation, chaque pavé du groupe peut comprendre de la logique matérielle agencée pour réaliser l'agrégation des états de sortie individuels dans l'état de sortie local. [0022] Dans des modes de réalisation, le jeu d'instructions peut comprendre une instruction de sortie destinée à être incluse dans chacun des fils de travail, et l'unité d'exécution peut être agencée pour fournir l'état de sortie individuel du fil de travail respectif et pour mettre fin au fil de travail respectif en réponse au code opération de l'instruction de sortie. [0023] Dans des modes de réalisation, chacun des états de sortie individuels et des états de sortie locaux peut être un seul bit, et l'agrégation des états de sortie individuels peut être constituée d'un ET booléen des états de sortie individuels ou d'un OU booléen des états de sortie individuels. [0024] Dans des modes de réalisation, l'état de sortie local peut comprendre au moins deux bits représentant une valeur trinaire, indiquant si les états de sortie individuels sont tous vrais, tous faux, ou mélangés. [0025] Dans des modes de réalisation, la phase d'échange peut être agencée pour être réalisée par un fil superviseur séparé des fils de travail, et ledit au moins un fil peut comprendre le fil superviseur. [0026] Dans des modes de réalisation, la mise en pause de l'émission d'instructions peut comprendre au moins la mise en pause de l'émission d'instructions à partir du fil superviseur dans l'attente de l'accusé de réception de synchronisation. 12 B17781 FR - 408529FR [0027] Dans des modes de réalisation, les ensembles de registres de contexte situés sur chaque pavé peuvent comprendre de multiples ensembles de registres de contexte de fil de travail agencés pour représenter l'état de programme de fils respectifs de la pluralité de fils de travail, et un ensemble de registres de contexte de superviseur additionnel comprenant un ensemble additionnel de registres agencé pour représenter un état de programme du fil superviseur. [0028] Dans des modes de réalisation : le fil superviseur peut être agencé pour commencer en s'exécutant dans chacun des créneaux temporels ; le jeu d'instructions peut comprendre en outre une instruction d'abandon et l'unité d'exécution est agencée de manière à, en réponse au code opération de l'instruction d'abandon, abandonner le créneau temporel dans lequel l'instruction d'abandon est exécutée au fil de travail respectif ; et l'instruction de sortie peut amener le créneau temporel respectif dans lequel l'instruction de sortie est exécutée à être rendu au fil superviseur, de sorte que le fil superviseur reprend son exécution dans le créneau respectif. [0029] Dans des modes de réalisation, ladite portion de code peut être agencée pour utiliser l'état de sortie global, une fois valide, pour réaliser une décision de branchement qui dépend de l'état de sortie global. [0030] Dans des modes de réalisation, système de traitement peut être programmé pour réaliser un algorithme d'intelligence artificielle dans lequel chaque noeud se trouvant dans un graphe comporte une ou plusieurs arrêtes d'entrée respectives et une ou plusieurs arrêtes de sortie respectives, les arêtes d'entrée d'au moins certains des noeuds étant les arêtes de sortie d'au moins certains autres des noeuds, chaque noeud comprenant une fonction respective reliant 13 B17781 FR - 408529FR ses arêtes de sortie à ses arêtes d'entrée, chaque fonction respective étant paramétrée par un ou plusieurs paramètres respectifs, et chacun des paramètres respectifs ayant une erreur associée, de sorte que le graphe converge vers une solution lorsque les erreurs dans certains ou la totalité des paramètres se réduisent ; dans lequel chacun des pavés peut modéliser un sous-graphe respectif comprenant un sous-ensemble des noeuds du graphe, et chacun des états de sortie locaux peut être utilisé pour indiquer si les erreurs dans lesdits un ou plusieurs paramètres des noeuds dans le sous-graphe respectif ont satisfait une condition prédéterminée. [0031] Dans des modes de réalisation, ledit groupe peut être sélectionné au moins en partie par un opérande de l'instruction de synchronisation. [0032] Dans des modes de réalisation, l'opérande de l'instruction de synchronisation peut sélectionner s'il faut inclure seulement des pavés se trouvant sur la même puce ou des pavés se trouvant sur des puces différentes dans ledit groupe. [0033] Dans des modes de réalisation, l'opérande de l'instruction de synchronisation peut sélectionner ledit groupe parmi différents niveaux hiérarchiques de groupements. [0034] Dans des modes de réalisation, le jeu d'instructions peut en outre inclure une instruction d'abstention, qui amène le pavé sur lequel l'instruction d'abstention est exécutée à s'exclure dudit groupe. [0035] Selon un autre aspect décrit ici, on prévoit un procédé d'actionnement d'un système de traitement comprenant un agencement de pavés et une interconnexion pour communiquer entre les pavés, dans lequel chaque pavé comprend une unité d'exécution pour exécuter des instructions de code machine, chacune étant une instance d'un ensemble prédéfini de types 14 B17781 FR - 408529FR d'instructions dans un jeu d'instructions du processeur, chaque type d'instruction du jeu d'instructions étant défini par un code opération correspondant et zéro ou plus champs d'opérandes pour prendre zéro ou plus opérandes ; le procédé comprenant : conduire des communications dans un groupe de certains ou de la totalité des pavés, via l'interconnexion, selon un schéma parallèle synchrone massif, d'où il résulte que chacun des pavés du groupe réalise une phase de calcul sur le pavé suivi d'une phase d'échange inter-pavé, la phase d'échange étant retenue jusqu'à ce Que tous les pavés du groupe aient achevé la phase de calcul, chaque pavé du groupe ayant un état de sortie local à l'achèvement de la phase de calcul ; dans lequel le jeu d'instructions comprend une instruction de synchronisation destinée à être exécutée par chaque pavé du groupe à l'achèvement de sa phase de calcul, l'exécution de l'instruction de synchronisation amenant l'unité d'exécution à envoyer une demande de synchronisation à de la logique matérielle dans l'interconnexion ; et le procédé comprend, en réponse à l'achèvement de la phase de calcul par tous les pavés du groupe comme indiqué par la réception de la demande de synchronisation à partir de tous les pavés du groupe, le déclenchement de la logique se trouvant dans l'interconnexion pour agréger les états de sortie locaux en un état de sortie global, et pour mémoriser l'état de sortie global dans un registre d'état de sortie global sur chacun des pavés du groupe, rendant ainsi l'état de sortie global accessible à une portion de code s'exécutant sur chacun des pavés du groupe. [0036] Selon un autre aspect décrit ici, on prévoit un produit programme informatique comprenant du code incorporé dans un stockage lisible par un ordinateur et agencé pour s'exécuter sur le système de traitement de l'un Quelconque B17781 FR - 408529FR des modes de réalisation décrits ici, le code comprenant une portion destinée à être exécutée sur chaque pavé du groupe comprenant une instance de l'instruction de synchronisation dans chaque portion. Brève description des dessins [0037] Pour faciliter la compréhension de la présente description et pour montrer comment des modes de réalisation peuvent être mis en oeuvre, on va faire référence à titre d'exemple aux dessins joints dans lesquels : [0038] [Fig. 1] la figure 1 est un schéma blocs d'une unité de traitement multi-fil ; [0039] [Fig. 2] la figure 2 est un schéma blocs d'une pluralité de contextes de fils ; [0040] [Fig. 3] la figure 3 illustre un schéma de créneaux temporels d'exécution entrelacés ; [0041] [Fig. 4] la figure 4 illustre un fil superviseur et une pluralité de fils de travail ; [0042] [Fig. 5] la figure 5 est un schéma blocs de logique pour agréger des états de sortie de multiples fils ; [0043] [Fig. 6] la figure 6 illustre schématiquement la synchronisation entre des fils de travail sur le même pavé ; [0044] [Fig. 7] la figure 7 est un schéma blocs d'une puce de processeur comprenant de multiples pavés ; [0045] [Fig. 8] la figure 8 est une illustration schématique d'un modèle de calcul parallèle synchrone massif (BSP) ; [0046] [Fig. 9] la figure 9 est une autre illustration schématique d'un modèle BSP ; [0047] [Fig. 10] la figure 10 est une illustration schématique de BSP entre des unités de traitement multi-fils ; 16 B17781 FR - 408529FR [0048] [Fig. 11] la figure 11 est un schéma blocs d'un système d'interconnexion ; [0049] [Fig. 12] la figure 12 est une illustration schématique d'un système de multiples puces de processeurs interconnectées ; [0050] [Fig. 13] la figure 13 est une illustration schématique d'un schéma BSP multiniveau ; [0051] [Fig. 14] la figure 14 est une autre illustration schématique d'un système de multiples puces de processeur ; [0052] [Fig. 15] la figure 15 est une illustration schématique d'un graphe utilisé dans un algorithme d'intelligence artificielle ; et [0053] [Fig. 161 la figure 16 illustre un exemple de câblage pour une synchronisation entre puces. Description détaillée de modes de réalisation [0054] Dans la suite on décrit une architecture de processeur qui comprend une instruction dédiée dans son jeu d'instructions pour réaliser une synchronisation par barrière et en même temps agréger des états de sortie de multiples fils sur de multiples pavés en un seul état agrégé dans un registre d'état de sortie, ce registre d'état de sortie agrégé existant dans chaque pavé et contenant le même résultat pour chaque pavé ayant été agrégé. Toutefois on va décrire en premier un exemple de processeur dans lequel cela peut être incorporé en faisant référence aux figures 1 à 4. [0055] La figure 1 illustre un exemple de module processeur 4 selon des modes de réalisation de la présente description. Par exemple, le module processeur 4 peut être un pavé d'une matrice de pavés processeurs similaires sur une même puce, ou peut être mis en oeuvre sous forme d'un processeur autonome sur sa propre puce. Le module processeur 4 comprend une unité 17 B17781 FR - 408529FR 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 (qui peuvent être mises en oeuvre dans divers modules mémoire adressables différents ou dans différentes régions sur le 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). [0056] 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 désigné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. [0057] 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 a la forme d'un "codelet" respectif. Un "codelet" 18 B17781 FR - 408529FR 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 du fil (à partir de l'instant du lancement), c'est-à-dire qu'il ne prend aucune entrée dans aucune autre partie du programme ou 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 codeléts (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. [0058] 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 seul 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 19 B17781 FR - 408529FR d'instructions partagée 12 commune à la pluralité de fils, et à une mémoire de données partagée 22 qui est encore commune à la pluralité de fils. [0059] Le 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. [0060] 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 respectifs 28, 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 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 a 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 respectifs (non B17781 FR - 408529FR représentés). On notera aussi que bien que le terme "banc de registres" soit parfois utilisé pour désigner un groupe rqe registres dans un espace d'adresse commun, cela ne devra pas nécessairement être 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. [0061] 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 différent de registres par rapport à 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 : 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 21 B17781 FR - 408529FR d'instructions du module 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. [0062] 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. [0063] 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 fil ou un autre, c'est-à-dire que chaque créneau est toujours occupé par un certain fil, et chaque créneau est toujours inclus dans la séquence de l'ordonnanceur 24 ; bien qu'ils puisse 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 22 B17781 FR - 408529FR 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. [0064] 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 23 B17781 FR - 408529FR 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. [0065] 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 par lequel, dans chaque tour du schéma, le tour est divisé en une séquence de créneaux temporels SO, Sl, S2_, chacun pour 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 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 un schéma à tour de rôle égal soit un 24 B17781 FR - 408529FR schéma à tour de rôle pondéré, dans ce dernier cas la pondération pouvant être fixe ou adaptative. [0066] Quelle que soit la séquence pour chaque tour de rôle d'exécution, ce motif se répète, chaque tour de rôle 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 une répétition donnée de la séquence. Dit d'une autre façon, l'ordonnanceur 24 partage les cycles d'exécution du pipeline 13 en une pluralité de canaux d'exécution entrelacés temporellement (multi _Lexés par séparation temporelle), 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. [0067] 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. [0068] 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 CX0, CX1, CX2, CX3 et CXS. C'est-à-dire que même s'il y a seulement quatre créneaux temporels d'exécution S0_S3 dans le schéma à fils en barillet et ainsi B17781 FR - 408529FR 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 jeu d'instructions différent pour actionner le pipeline d'exécution 13. [0069] Chacun des quatre premiers contextes CXO_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 S0_S3, pour réaliser toute tâche de calcul spécifique d'une application souhaitée par le programmeur (on notera encore 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, Sl, 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 4, le superviseur peut réaliser une synchronisation à barrière 26 B17781 FR - 408529FR 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 externe au 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 (externe à la matrice 6) comme un disque de stockage ou une carte de réseau. [0070] On notera bien sûr que quatre créneaux ne constituent qu'un exemple, et qu'en général, dans d'autres modes 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 module 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. [0071] En référence à la figure 4, le fil superviseur SV n'a pas son propre créneau temporel en soi dans le schéma de créneaux temporels entrelacés. Il en est de même pour les 27 B17781 FR - 408529FR 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 le 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 CXS 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. [0072] Le fil superviseur SV a la capacité de 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 au 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 lequel il s'exécute à l'un respectif des fils de travail, par exemple initialement les fils de travail W0.A73 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 pour ce fil de travail dans la mémoire de données 22 : RUN task addr, data addr. 28 B17781 FR - 408529FR [0073] 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 n'ont pas besoin d'être des codelets et peuvent au lieu de cela être capables de communiquer entre eux. [0074] 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 - il 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 à cet emplacement", puis à partir de ce point le créneau 29 B17781 FR - 408529FR récurrent est possédé (temporairement) par le fil de travail concerné. [0075] 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 W0_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). [0076] Le fil superviseur SU 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 SO_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. [0077] 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)). [0078] En outre, dans certains modes de réalisation, les instructions RUN et/ou RUNALL, lorsqu'elles sont exécutées, copient aussi automatiquement un état provenant d'un ou plusieurs des registres d'état de superviseur CXS(SR) dans un ou plusieurs registres d'état correspondants du ou des fils B17781 FR - 408529FR de travail lancés par les instructions 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 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 en accord avec l'état ou le mode copié. Dans des modes de réalisation, le fil de travail peut plus tard écraser cela dans son propre registre d'état (mais ne peut pas changer l'état du superviseur). Dans d'autres variantes ou d'autres modes de réalisation additionnels, les fils de travail peuvent choisir de lire un certain é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 du 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. [0079] Une fois lancé, chacun des fils de travail actuellement alloué W0_W3 passe à la réalisation d'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 de travail respectif rend alors le créneau temporel dans lequel il s'exécute au fil superviseur. Cela est obtenu en exécutant une instruction de sortie ("EXIT"). [0080] L'instruction EXIT prend au moins un opérande et de préférence 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 31 B17781 FR - 408529FR condition a été remplie) : EXIT exit state [0081] 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 avec des ressources externes comme d'autres pavés), 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 d'exécution 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, à 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. [0082] En outre, l'instruction EXIT s'est vue donner une autre fonction spéciale, à savoir celle d'amener l'état de sortie spécifié dans l'opérande de l'instruction EXIT à être automatiquement agrégé (par de la logique matérielle dédiée) avec les états de sortie d'une pluralité d'autres fils de travail qui sont exécutés dans le même pipeline 13 du même module processeur 4 (par exemple le même pavé). Ainsi une facilité implicite supplémentaire est incluse dans l'instruction pour mettre fin à un fil de travail. [0083] Un exemple de circuit pour réaliser cela représenté en figure 5. Dans cet exemple, les états de sortie des fils individuels et l'état de sortie agrégé prennent 32 B17781 FR - 408529FR chacun la forme d'un seul bit, c'est-à-dire 0 ou 1. Le module processeur 4 comprend un registre 38 pour mémoriser l'état de sortie agrégé de ce module processeur 4. Ce registre peut être appelé ici le registre de "consensus local" $LC (par opposition à consensus global lorsque le module processeur 4 fait partie d'une matrice de pavés processeurs similaires, comme cela va être décrit plus en détail dans un instant). Dans des modes de réalisation, ce registre de consensus local $LC 38 est l'un des registres d'état du superviseur dans le banc de registres de contexte de superviseur CXS. La logique pour réaliser l'agrégation comprend une porte ET 37 agencée pour réaliser un ET logique de (A) l'état de sortie spécifié dans l'opérande de l'instruction EXIT et (B) la valeur courante dans le registre de consensus local ($LC) 38, et pour renvoyer en sortie le résultat (Q) dans le registre de consensus local $LC 38 en tant que nouvelle valeur de l'agrégat local. [0084] Au niveau d'un point de synchronisation approprié dans le programme, la valeur mémorisée dans le registre de consensus local ($LC) 38 est initialement réinitialisée à une valeur de 1. C'est-à-dire que tous les fils d'exécution sortant après ce point vont contribuer à l'état de sortie agrégé localement $LC jusqu'à la prochaine réinitialisation. La sortie (Q) de la porte ET 37 est à 1 si les deux entrées (A, B) sont à 1, mais sinon la sortie Q passe à zéro si l'une quelconque des entrées (A, B) est à 0. A chaque fois qu'une instruction EXIT est exécutée, son état de sortie est agrégé avec ceux qui sont arrivés précédemment (depuis la dernière réinitialisation). Ainsi au moyen de l'agencement représenté en figure 5, la logique maintient un agrégat courant des états de sortie de tous les fils de travail qui se sont terminés au moyen d'une instruction EXIT depuis la dernière fois où le registre de consensus local ($LC) 38 a été réinitialisé. Dans 33 B17781 FR - 408529FR cet exemple, l'agrégat courant indique si tous les fils d'exécution jusqu'à présent sont sortis à vrai : tout état de sortie à 0 provenant de l'un Quelconque des fils de travail va amener l'agrégat dans le registre 38 à devenir verrouillé à 0 jusqu'à la réinitialisation suivante. Dans des modes de réalisation, le superviseur SV peut lire l'agrégat courant à tout instant en obtenant la valeur courante à partir du registre de consensus local ($LC) 38 (il n'a pas besoin d'attendre une synchronisation sur le pavé pour faire cela). [0085] La réinitialisation de l'agrégat dans le registre de consensus local ($LC) 38 peut être réalisée par le superviseur SV en réalisant un PUT dans l'adresse du registre de consensus local ($LC) 38 en utilisant une ou plusieurs instructions d'usage général, dans cet exemple pour mettre une valeur de 1 dans le registre 38. En variante, il n'est pas exclu que la réinitialisation puisse être réalisée par un mécanisme automatique, par exemple déclenché en exécutant l'instruction SYNC décrite ultérieurement ici. [0086] Le circuit d'agrégation 37, dans ce cas la porte ET, est mis en oeuvre dans un circuit matériel dédié dans l'unité d'exécution de l'étage d'exécution 18, en utilisant toute combinaison de composants électroniques appropriée pour réaliser la fonctionnalité d'un ET booléen. Un circuit ou du matériel dédié désigne 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 local est déclenchée par l'exécution de l'instruction spéciale EXIT, celle-ci étant l'une des instructions de code machine fondamental dans le jeu d'instructions du module processeur 4, ayant la fonctionnalité inhérente d'agréger les états de sortie. Aussi, l'agrégat local est mémorisé dans un registre de commande 38, c'est-à-dire un élément de stockage dédié (dans certains modes 34 B17781 FR - 408529FR de réalisation, un seul bit de stockage) dont la valeur peut être accédée par le code s'exécutant dans le pipeline, mais qui n'est pas utilisable par l'unité de chargement-stockage (LSU) pour mémoriser des données d'usage général. Au lieu de cela, la fonction de données maintenues dans un registre de commande est fixée, dans ce cas à la fonction de mémorisation de l'état de sortie agrégé localement. De préférence le registre de consensus local ($LC) 38 forme l'un des registres de commande sur le module processeur 4 (par exemple sur le pavé), dont la valeur peut être accédée par le superviseur en exécutant une instruction GET et qui peut être définie par l'exécution d'une instruction PUT. [0087] On notera que le circuit représenté en figure 5 n'est qu'un exemple. Un circuit équivalent consisterait à remplacer la porte ET 37 par une porte OU et à inverser l'interprétation des états de sortie 0 et 1 par logiciel, c'est-à-dire 0 , vrai, 1 , faux (avec le registre 38 réinitialisé à 0 au lieu de 1 à chaque point de synchronisation). 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é dans $LC va enregistrer si l'un quelconque (plutôt que tous) des états de 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é $LC 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 en oeuvre cela, l'un des deux bits codant la valeur trinaire peut être un ET booléen (ou un OU) des états de sortie B17781 FR - 408529FR 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 sont mélangés, peut alors être formé par le OU Exclusif de ces deux bits. [0088] 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 37 réalise un OU au lieu d'un ET et le registre $LC 38 est réinitialisé initialement à 0). Par exemple, si on considère une application ou chaque fil de travail réalise un calcul ayant une condition d'association, 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é 36 B17781 FR - 408529FR de paramètres associés au calcul respectif réalisé par le fil de travail. [0089] 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é, 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 37 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. [0090] 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 de consensus local ($LC) 38 pour déterminer l'état de sortie agrégé 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 qu'il souhaite de l'état de sortie agrégé localement. 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'un certain sous-ensemble de 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 37 B17781 FR - 408529FR 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. [0091] De préférence, le fil superviseur ne doit pas accéder à la valeur se trouvant dans le registre de consensus local ($1,C) 38 avant que tous les fils de travail en question soient sortis, de sorte que la valeur mémorisée dedans représente l'état agrégé correct à jour de tous les fils d'exécution souhaités. Cette attente peut ê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 réinitialise le registre de consensus local ($LC) 38, lance une pluralité de fils de travail, puis lance une synchronisation locale à barrière (locale au module de traitement 4, locale à un pavé) afin de d'attendre que tous les fils de travail en suspens sortent avant que le superviseur soit autorisé à procéder à l'obtention de l'état de sortie agrégé à partir du registre de consensus local ($LC) 38. [0092] En faisant référence à la figure 6, dans des modes de réalisation une instruction SYNC (synchronisation) est prévue dans le jeu d'instructions du processeur. Cette instruction SYNC a pour effet d'amener le fil superviseur SV à attendre que tous les fils de travail W s'exécutant simultanément soient sortis au moyen d'une instruction EXIT. Dans des modes de réalisation l'instruction SYNC prend un mode sous forme d'un opérande (dans des modes de réalisation c'est seulement l'opérande), le mode spécifiant si l'instruction SYNC doit 38 B17781 FR - 408529FR agir seulement localement en relation avec seulement les fils de travail gui s'exécute localement sur le même module processeur 4, par exemple le même pavé, que le superviseur comme partie sur laquelle l'action SYNC est exécutée (c'est-à-dire seuls les fils d'exécution se trouvant dans le même pipeline 13 de la même unité de traitement à fils en barillet 10) ; ou si au lieu de cela elle doit s'appliquer sur multiples pavés ou même sur de multiples puces. SYNC mode // mode E chip, zone 1, zone 21 [0093] Cela sera décrit plus en détail ultérieurement mais en ce qui concerne la figure 6 un SYNC local sera supposé ("SYNC tile", c'est-à-dire une synchronisation dans un seul pavé). [0094] Les fils de travail n'ont pas besoin d'être identifiés comme opérandes de l'instruction SYNC, puisqu'il est implicite que le superviseur SV est alors amené à attendre automatiquement qu'aucun des créneaux temporels SO, Si, ... de l'unité de traitement à fils en barillet 10 ne soit occupé par un fil de travail. Comme cela est représenté en figure 6, une fois que tous les fils d'un lot courant de fils de travail WLn ont été lancés par le superviseur, le superviseur exécute alors une instruction SYNC. Si le superviseur SV lance des fils de travail W dans tous les créneaux S0."3 de l'unité de traitement à fils en barillet 10 (tous les quatre dans l'exemple illustré, mais cela n'est qu'un exemple de mise en oeuvre), alors l'instruction SYNC va être exécutée par le superviseur une fois que le premier élément du lot courant de fils de travail WLn est sorti, rendant ainsi le contrôle d'au moins un créneau au superviseur SV. Sinon, si les fils de travail ne prennent pas la totalité des créneaux, l'instruction SYNC va simplement être exécutée immédiatement après que le dernier fil du lot courant WLn a été lancé. De toute façon, l'instruction SYNC amène le superviseur SV à 39 B17781 FR - 408529FR attendre que tous les autres éléments du lot courant de fils de travail WLn-1 exécutent un EXIT avant que le superviseur puisse procéder. C'est seulement après cela que le superviseur exécute une instruction GET pour obtenir le contenu du registre de consensus local ($LC) 38. Cette attente par le fil superviseur est imposée par le matériel une fois que l'instruction SYNC a été exécutée. C'est-à-dire que, en réponse au code opération de l'instruction SYNC, la logique se trouvant dans l'unité d'exécution (EXU) de l'étage d'exécution 18 amène l'étage d'extraction 14 et l'ordonnanceur 24 à se mettre en pause dans l'émission d'instructions du fil superviseur jusqu'à ce que tous les fils de travail en suspens aient exécuté une instruction EXIT. À un certain point après l'obtention de la valeur du registre de consensus local ($LC) 38 (optionnellement avec un autre morceau de code superviseur entre les deux), le superviseur exécute une instruction PUT pour réinitialiser le registre de consensus local ($LC) 38 (à 1 dans l'exemple illustré). [0095] Comme cela est aussi illustré en figure 6, l'instruction SYNC peut aussi être utilisée pour placer des barrières de synchronisation entre des couches interdépendantes différentes WL1, WL2, WL3, ... de fils de travail, là où un ou plusieurs fils dans chaque couche successive est dépendant de données produites par un ou plusieurs fils de travail dans la couche précédente. Le SYNC local exécuté par le fil superviseur garantit qu'aucun des fils de travail se trouvant dans la couche suivante WLn+1 ne s'exécute avant que tous les fils de travail se trouvant dans la couche immédiatement précédente WLn soient sortis (en exécutant une instruction EXIT). [0096] Comme cela a été mentionné, dans des modes de réalisation, le module processeur 4 peut être mis en oeuvre sous forme d'une matrice de pavés interconnectés formant un B17781 FR - 408529FR processeur multi-pavé, chacun des pavés pouvant être agencé comme décrit précédemment en relation avec les figures 1 à 6. [0097] Cela est illustré en figure 7 qui représente un processeur en une seule puce 2, c'est-à-dire une seule puce élémentaire, comprenant une matrice 6 de multiples pavés processeurs 4 et une interconnexion sur la puce 34 interconnectant les pavés 4. La puce 2 peut être mise en oeuvre seule dans son propre boîtier de circuit intégré à une seule puce, ou sous forme de multiples puces empaquetées dans le même boîtier de circuit L'interconnexion sur la puce peut aussi être "tissu d'échange" 34 puisqu'il permet aux pavés des données entre eux. Chaque pavé 4 comprend élémentaires intégré, IC. appelée ici 4 d'échanger une instance respective de l'unité de traitement à fils en barillet 10 et une mémoire 11, chacune agencée comme décrit précédemment en relation avec les figures 1 à 6. Par exemple, à titre d'illustration la puce 2 peut comprendre de l'ordre d'une centaine de pavés 4, ou même plus d'un millier. Pour être complet, on notera aussi qu'une "matrice" telle que désignée ici n'implique pas nécessairement un nombre particulier de dimensions ou une disposition physique particulière des pavés 4. [0098] Dans des modes de réalisation chaque puce 2 comprend aussi une ou plusieurs liaisons externes 8, permettant à la puce 2 d'être connectée à un ou plusieurs autres processeurs externes sur différentes puces (par exemple une ou plusieurs autres instances de la même puce 2). Ces liaisons externes 8 peuvent comprendre un ou plusieurs éléments quelconques parmi une ou plusieurs liaisons puce-vers-hôte pour connecter la puce 2 à un processeur hôte, et/ou une ou plusieurs liaisons de puce à puce pour se connecter avec une ou plusieurs autres instances de la puce 2 sur le même boîtier IC ou la même carte, ou sur différentes cartes. Dans un 41 B17781 FR - 408529FR exemple d'agencement, la puce 2 reçoit du travail d'un processeur hôte (non représenté) qui est connecté à la puce par l'intermédiaire de l'une des liaisons puce-vers-hôte sous forme de données d'entrée à traiter par la puce 2. Dé multiples instances de la puce 2 peuvent être connectées entre elles dans des cartes par des liaisons de puce à puce. Ainsi un hôte peut accéder à un ordinateur qui a une architecture comportant un processeur en une seule puce 2 ou comportant de multiples processeurs en une seule puce 2 agencés éventuellement sur de multiples cartes interconnectées, en fonction de la charge de travail requise pour l'application hôte. [0099] L'interconnexion 34 est agencée pour permettre aux différents pavés processeurs 4 se trouvant dans la matrice 6 de communiquer entre eux sur la puce 2. Toutefois, comme il peut y avoir potentiellement des dépendances entre des fils d'exécution sur le même pavé 4, il peut aussi y avoir des dépendances entre les portions du programme s'exécutant sur des pavés 4 différents dans la matrice 6. Une technique est par conséquent nécessaire pour empêcher qu'un morceau de code sur un pavé 4 donné s'exécute en avance sur des données dont il dépend qui sont mises à disposition par un autre morceau de code sur un autre pavé 4. [0100] Dans certains modes de réalisation, cela est obtenu en mettant en oeuvré un schéma d'échange parallèle synchrone massif (BSP), comme cela est illustré schématiquement dans les figures 8 et 9. [0101] Selon une version de BSP, chaque pavé 4 réalise une phase de calcul 52 et une phase d'échange 50 dans un cycle alternatif, séparées entre elles par une synchronisation à barrière 30 entre les pavés. Dans le cas illustré, une synchronisation à barrière est placée entre chaque phase de 42 B17781 FR - 408529FR calcul 52 et la phase d'échange 50 suivante. Pendant la phase de calcul 52 chaque pavé 4 réalise une ou plusieurs tâches de calcul localement sur le pavé, mais ne communique pas de résultats de ces calculs à d'autres pavés 4. Dans la phase d'échange 50 chaque pavé 4 est autorisé à échanger un ou plusieurs résultats des calculs provenant de la phase de calcul précédente avec un ou plusieurs des autres pavés du groupe, mais ne réalise aucun nouveau calcul avant d'avoir reçu à partir d'autres pavés 4 les données dont sa tâche ou ses tâches dépendent. Il n'envoie pas non plus de données à d'autres pavés, excepté celles calculées dans la phase de calcul précédente. Il n'est pas exclu que d'autres opérations comme des opérations associées à la commande interne puissent être réalisées dans la phase d'échange. Dans certains modes de réalisation, la phase d'échange 50 ne comprend pas de calculs non déterministes dans le temps, mais un petit nombre de calculs déterministes dans le temps peuvent optionnellement être autorisés pendant la phase d'échange 50. On notera aussi qu'un pavé 4 réalisant un calcul peut être autorisé pendant la phase de calcul 52 à communiquer avec d'autres ressources système externes à la matrice de pavés 4 qui est synchronisée - par exemple une carte réseau, une unité de disque, ou un réseau de portes programmables sur site (FPGA) - tant que cela n'implique pas de communication avec d'autres pavés 4 dans le groupe qui est synchronisé. La communication externe au groupe de pavés peut optionnellement utiliser le mécanisme BSP, mais en variante peut ne pas utiliser le BSP et utiliser à la place un autre mécanisme de synchronisation qui lui est propre. [0102] Selon le principe BSP, une synchronisation à barrière 30 est placée à la jointure faisant la transition entre les phases de calcul 52 et la phase d'échange 50, ou la jointure faisant la transition entre les phases d'échanges 50 et la 43 B17781 FR - 408529FR phase de calcul 52, ou les deux. C'est-à-dire que soit : (a) tous les pavés 4 doivent achever leurs phases de calcul respectives 52 avant que l'un des pavés du groupe soit autorisé à procéder à la phase d'échange 50 suivante, soit (b) tous les pavés 4 du groupe doivent achever leurs phases d'échange respectives 50 avant que l'un des pavés du groupe soit autorisé à procéder à la phase de calcul 52 suivante, soit (c) ces deux conditions sont imposées. Dans les trois variantes ce sont les processeurs individuels qui alternent entre les phases, et l'ensemble global qui synchronise. La séquence de phases d'échange et de calcul peut ensuite se répéter de multiples fois. Dans la terminologie BSP, chaque répétition de phase d'échange et de phase de calcul est parfois appelée "super-étape" (on notera toutefois que dans la littérature la terminologie n'est pas toujours utilisée de manière cohérente : parfois chaque phase d'échange et chaque phase de calcul individuelles sont appelée individuellement super-étapes, tandis qu'ailleurs, comme dans la terminologie adoptée ici, les phases d'échange et de calcul ensemble sont appelées super-étape). [0103] On notera aussi, qu'il n'est pas exclu que de multiples groupes de pavés 4 indépendants différents sur la même puce 2 ou sur des puces différentes puissent former chacun un groupe BSP respectif séparé fonctionnant de manière asynchrone l'un par rapport à l'autre, le cycle BSP de calcul, de synchronisation et d'échange étant imposé seulement à l'intérieur de chaque groupe donnée, mais chaque groupe le faisant indépendamment des autres groupes. C'est-à-dire qu'une matrice multi-pavé 6 peut inclure de multiples groupes synchrones de façon interne fonctionnant chacun indépendamment et de manière asynchrone par rapport aux autres de ces groupes (décrit plus en détail dans la suite). Dans certains modes de réalisation, il y a un groupement 44 B17781 FR - 408529FR hiérarchique de synchronisation et d'échange, comme cela va être décrit plus en détail ci-après. [0104] La figure 9 illustre le principe BSP tel qu'il est mis en oeuvre parmi un groupe 4i, 4ii, 4iii de certains ou de tous les pavés de la matrice 6, dans le cas qui impose : (a) une synchronisation à barrière entre la phase de calcul 52 et la phase d'échange 50 (voir ci-avant). On notera que dans cet agencement, certains pavés 4 sont autorisés à commencer à calculer 52 pendant que certains autres sont encore en train d'échanger. [0105] Selon des modes de réalisation décrits ici, ce type de BSP peut être facilité en incorporant des fonctionnalités additionnelles, spéciales et dédiées dans une instruction de code machine pour réaliser une synchronisation à barrière, c'est-à-dire l'instruction SYNC. [0106] Dans certains modes de réalisation, la fonction SYNC prend cette fonctionnalité lorsqu'elle est qualifiée par un mode inter-pavé comme opérande, par exemple le mode sur la puce : SYNC chip. [0107] Cela est illustré schématiquement en figure 10. Dans le cas où chaque pavé 4 comprend une unité de traitement à fils multiples 10, chaque phase de calcul 52 d'un pavé peut en fait comprendre des tâches réalisées par de multiples fils de travail W sur le même pavé 4 (et une phase de calcul 52 donnée sur un pavé 4 donné peut comprendre une ou plusieurs couches WL de fils de travail, qui dans le cas de couches multiples peuvent être séparées par des synchronisations à barrière internes utilisant l'instruction SYNC avec le mode local sur le pavé comme opérande, comme décrit précédemment). Une fois que le fil superviseur SV sur un pavé 4 donné a lancé le dernier fil de travail dans la super-étape BSP courante, le superviseur se trouvant sur ce pavé 4 exécute alors une B17781 FR - 408529FR instruction SYNC avec le mode inter-pavé mis comme opérande : SYNC chip. Si le superviseur doit lancer (RUN) des fils de travail dans tous les créneaux de son unité de traitement 10 respective, le "SYNC chip" est exécuté dès que le premier créneau qui n'est plus nécessaire pour mettre en RUN d'autres fils de travail dans la super-étape BSP courante est rendu au superviseur. Par exemple, cela peut survenir après que premier fil a fait un EXIT dans la dernière couche WL, ou simplement après que le premier fil de travail a fait un EXIT s'il y a une seule couche. Sinon, si les créneaux ne doivent pas tous être utilisés pour des fils de travail en exécution dans la super-étape BSP courante, le "SYNC chip" peut être exécuté dès que le dernier fil de travail qui doit être mis en RUN dans la super-étape BSP courante a été lancé. Cela peut se produire une fois que tous les fils de travail se trouvant dans la dernière couche ont été mis en RUN, OU simplement une fois que tous les fils de travail ont été mis en RUN s'il y a seulement une couche. [0108] L'unité d'exécution (EXU) de l'étage d'exécution 18 est agencée de manière à, en réponse au code opération de l'instruction SYNC, lorsqu'il est qualifié par l'opérande sur la puce (inter-pavé), amener le fil superviseur dans lequel le "SYNC chip" a été exécuté à être mis en pause jusqu'à ce que tous les pavés 4 de la matrice 6 aient terminé l'exécution des fils de travail. Cela peut être utilisé pour mettre en oeuvre une barrière vers la super-étape BSP suivante, c'est-à-dire qu'après que tous les pavés 4 sur la puce 2 ont passé la barrière, le programme passant à travers les pavés dans son ensemble peut progresser vers la phase d'échange 50 suivante. [0109] La figure 11 est un schéma illustrant la logique déclenchée par un "SYNC chip" selon des modes de réalisation décrits ici. 46 B17781 FR - 408529FR [0110] Une fois que le superviseur a lancé (RUN) tous les fils d'exécution qu'il doit lancer dans le cycle de calcul courant 52, il exécute une instruction SYNC avec l'opérande inter-pavé, sur la puce : SYNC chip. Cela provoque le déclenchement de la fonctionnalité suivante dans la logique de synchronisation dédiée 39 sur le pavé 4, et dans un contrôleur de synchronisation 36 mis en oeuvre dans l'interconnexion matérielle 34. Cette fonctionnalité à la fois de la logique de synchronisation 39 sur le pavé et du contrôleur de synchronisation 36 dans l'interconnexion 34 est mise en oeuvre dans un circuit matériel dédié de sorte que, une fois que le SYNC chip est exécuté, le reste de la fonctionnalité procède sans que d'autres instructions soient exécutées pour le faire. [0111] Premièrement, la logique de synchronisation sur le pavé 39 amène l'émission d'instructions pour le superviseur sur le pavé 4 en question à se mettre automatiquement en pause (amène l'étage d'extraction 14 et l'ordonnanceur 24 a suspendre l'émission d'instructions du superviseur). Une fois Que tous les fils de travail en suspens sur le pavé 4 local ont réalisé un EXIT, la logique de synchronisation 39 envoie automatiquement une demande de synchronisation 'sync req" au contrôleur de synchronisation 36 dans l'interconnexion 34. Le pavé local 4 continue ensuite à attendre avec l'émission d'instructions de superviseur en pause. Un processus similaire est aussi mis en oeuvre sur chacun des autres pavés 4 dans la matrice 6 (chacun comprenant sa propre instance de la logique de synchronisation 39). Ainsi, à un certain point, une fois que tous les fils de travail finaux dans la phase de calcul 52 courante ont fait un EXIT sur tous les pavés 4 de la matrice 6, le contrôleur de synchronisation 36 aura reçu une demande de synchronisation respective (sync req) à partir de tous les pavés 4 de la matrice 6. C'est seulement alors, 47 B17781 FR - 408529FR en réponse à la réception du sync req provenant de chaque pavé 4 de la matrice 6 sur la même puce 2, que le contrôleur de synchronisation 36 renvoie un signal d'accusé de réception de synchronisation 'sync ack" vers la logique de synchronisation 39 sur chacun des pavés 4. Jusqu'à ce point, chacun des pavés 4 a eu son émission d'instructions de superviseur mise en pause en attente du signal d'accusé de réception de synchronisation (sync ack). À la réception du signal sync ack, la logique de synchronisation 39 se trouvant dans le pavé 4 met fin automatiquement à la pause de l'émission d'instructions de superviseur pour le fil superviseur respectif sur ce pavé 4. Le superviseur est alors libre de procéder à un échange de données avec d'autres pavés 4 par l'intermédiaire de l'interconnexion 34 dans une phase d'échange suivante 50. [0112] De préférence les signaux sync reg et sync ack sont émis et reçus vers et à partir du contrôleur de synchronisation, respectivement, par l'intermédiaire d'un ou plusieurs fils de synchronisation dédiés connectant chaque pavé 4 au contrôleur de synchronisation 36 dans l'interconnexion 34. [0113] En outre, selon des modes de réalisation décrits ici, une fonctionnalité additionnelle est incluse dans l'instruction SYNC, c'est-à-dire, qu'au moins lorsqu'elle est exécutée dans un mode inter-pavé (par exemple SYNC chip), l'instruction SYNC amène aussi les états de sorties locaux $LC de chacun des pavés 4 synchronisés à être agrégés automatiquement dans du matériel dédié supplémentaire 40 dans l'interconnexion 34. Dans les modes de réalisation représentés cette logique prend la forme d'une porte ET à entrées multiples (une entrée pour chaque pavé 4 de la matrice 6), par exemple formée à partir d'une chaîne de portes ET à deux entrées 40i, comme cela est représenté à titre d'exemple en figure 11. Cette 48 B17781 FR - 408529FR logique d'agrégation inter-pavé 40 reçoit la valeur se trouvant dans le registre d'état de sortie local (registre consensus local) $1,C 38 à partir de chaque pavé 4 de la matrice - dans des modes de réalisation chacune étant un seul bit - et agrège ces valeurs en une seule valeur, par exemple un ET de tous les états de sortie agrégés localement. Ainsi la logique forme un état de sortie agrégé globalement sur tous les fils d'exécution sur tous les pavés 4 de la matrice 6. [0114] Chacun des pavés 4 comprend une instance respective d'un registre de consensus global ($GC) 42 agencé pour recevoir et mémoriser l'état de sortie global provenant de la logique d'agrégation globale 40 dans l'interconnexion 34. Dans certains modes de réalisation cela est un autre des registres d'état se trouvant dans le banc de registres de contexte CXS du superviseur. En réponse à la demande de synchronisation (sync req) reçue de tous les pavés 4 de la matrice 6, le contrôleur de synchronisation 36 amène la sortie de la logique d'agrégation 40 (par exemple la sortie du ET) à être mémorisée dans le registre de consensus global ($GC) 42 sur chaque pavé 4 (on notera que le "commutateur" représenté en figure 11 est une représentation schématique de la fonctionnalité et qu'en fait la mise à jour peut être mise en oeuvre par toute logique numérique appropriée). Ce registre $GC 42 est accessible par le fil superviseur SV sur le pavé 4 respectif une fois que l'émission d'instructions de superviseur est reprise. Dans des modes de réalisation, le registre de consensus global $GC est mis en oeuvre sous forme d'un registre de commande dans le banc de registres de commande de sorte que le fil superviseur peut obtenir la valeur se trouvant dans le registre de consensus global ($GC) 42 au moyen d'une instruction GET. On notera que la logique de synchronisation 36 attend que le sync req soit reçu de tous les pavés 4 avant de mettre à jour la valeur dans l'un 49 B17781 FR - 408529FR quelconque des registres de consensus global ($GC) 42, sinon une valeur incorrecte peut être rendue disponible à un fil superviseur sur un pavé qui n'a pas encore terminé sa partie de phase de calcul 52 et qui est par conséquent encore en cours d'exécution. [0115] L'état de sortie agrégé globalement $GC permet au programme de déterminer une sortie globale de parties du programme s'exécutant sur de multiples pavés 4 différents sans avoir à examiner individuellement l'état de chaque fil de travail individuel sur chaque pavé individuel. Il peut être utilisé dans tout but souhaité par le programmeur. Par exemple, dans l'exemple représenté en figure 11 où l'agrégat global est un ET booléen, cela signifie que toute entrée à 0 amène un agrégat de 0, mais si toutes les entrées sont à 1 alors l'agrégat vaut 1. C'est-à-dire que si un 1 est utilisé pour représenter une sortie vraie ou un succès, cela signifie que si l'un quelconque des états de sortie locaux de l'un des pavés 4 est faux ou en échec, alors l'état agrégé global va aussi être faux ou va représenter une sortie en échec. Par exemple, cela pourrait être utilisé pour déterminer si les parties du code s'exécutant sur tous _Les pavés ont toutes satisfaites une condition prédéterminée. Ainsi, le programme peut interroger un seul registre (dans certains modes de réalisation un seul bit) pour demander "est-ce que quelque chose s'est mal passé ? Oui ou non ?" ou "est-ce que tous les noeuds du graphe ont atteint un niveau d'erreur acceptable ? Oui ou non ?", plutôt que d'avoir à examiner les états individuels des fils de travail individuels sur chaque pavé individuel (et de nouveau, dans des modes de réalisation le superviseur n'est en fait pas capable d'interroger l'état des fils de travail excepté par les registres d'état de sortie 38, 42). En d'autres termes, chacune des instructions EXIT et B17781 FR - 408529FR SYNC réduit les multiples états de sortie individuels en un seul état combiné. [0116] Dans un exemple de cas d'utilisation, le superviseur situé sur un ou plusieurs des pavés peut rapporter à un processeur hôte si l'agrégat global a indiqué une sortie à faux ou en échec. Dans un autre exemple, le programme peut prendre une décision de branchement en fonction de l'état de sortie global. Par exemple, le programme examine l'état de sortie agrégé global $GC et sur la base de cela détermine s'il doit continuer à boucler ou doit se brancher ailleurs. Si l'état de sortie global $GC est toujours à faux ou en échec, le programme continue son itération de la même première partie du programme, mais une fois que l'état de sortie global $GC est à vrai ou à succès, le programme se branche vers une deuxième partie différente du programme. La décision branchement peut être mise en oeuvre individuellement dans chaque fil superviseur, ou par le fait que l'un des superviseurs prenne le rôle de maître et donne instruction aux autres superviseurs esclaves sur les autres pavés (le rôle de maître étant configuré par logiciel). [0117] On notera que la logique d'agrégation 40 représentée en figure 11 n'est qu'un exemple. Dans un autre exemple équivalent, le ET peut être remplacé par un OU, et l'interprétation de 0 et 1 peut être inversée (0 , vrai, 1 , 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é dans $GC va enregistrer si l'un quelconque (au lieu de tous) des pavés est sorti avec l'état agrégé localement 1. Dans un autre exemple, l'état de sortie global $GC peut comprendre deux bits représentant un état trinaire : tous les états de sortie agrégés localement $LC des pavés avaient l'état 1, tous les états de sortie agrégés localement 51 B17781 FR - 408529FR $LC des pavés avaient l'état 0, ou les états de sortie agrégés localement $LC des pavés étaient mélangés. Dans un autre exemple le plus complexe, les états de sortie locaux des pavés 4 et l'état de sortie agrégé globalement 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 pavés 4. Par exemple, l'état de sortie agrégé localement $LC de chaque pavé individuel peut représenter une mesure probabiliste statistique de confiance dans un résultat du pavé 4 respectif, et la logique d'agrégation globale 40 peut être remplacée par un circuit plus complexe pour réaliser une agrégation statistique des niveaux de confiance individuels par du matériel. [0118] Comme cela a été mentionné précédemment, dans certains modes de réalisation de multiples instances de la puce 2 peuvent être connectées entre elles pour former une matrice de pavés 4 encore plus grande s'étendant sur de multiples puces 2. Cela est illustré en figure 12. Certaines ou la totalité des puces 2 peuvent être mises en oeuvre sur le même boîtier IC ou certaines ou la totalité des puces 2 peuvent être mises en oeuvre sur des boîtiers IC différents. Les puces 2 sont connectées entre elles par une interconnexion externe 72 (via les liaisons externes 8 représentées en figure 7). En plus de fournir un conduit pour échanger des données entre des pavés 4 se trouvant sur des puces différentes, le périphérique d'échange externe 72 fournit aussi un soutien matériel pour réaliser une synchronisation à barrière entre les pavés 4 se trouvant sur différentes puces 2 et agréger les états de sorties locaux des pavés 4 se trouvant sur les différentes puces 2. [0119] Dans certains modes de réalisation, l'instruction SYNC peut prendre au moins une autre valeur possible de son opérande de mode pour spécifier une synchronisation externe, 52 B17781 FR - 408529FR c'est à dire inter-puce : SYNC zone n, où zone n représente une zone de synchronisation externe. L'interconnexion externe 72 comprend de la logique matérielle similaire à celle décrite en relation avec la figure 11, mais sur une échelle inter-puce externe. Lorsque l'instruction SYNC est exécutée avec une zone de synchronisation externe de deux ou plusieurs puces 2 spécifiée dans son opérande, cela amène la logique se trouvant dans l'interconnexion externe 72 à fonctionner de manière similaire à celle décrite en relation avec l'interconnexion interne 34, mais dans l'ensemble des pavés 4 sur les multiples puces 2 différentes dans la zone de synchronisation spécifiée. [0120] C'est-à-dire que, en réponse à un SYNC externe, l'émission d'instructions du superviseur est mise en pause jusqu'à ce que tous les pavés 4 sur toutes les puces 2 dans la zone de synchronisation externe aient achevé leur phase de calcul 52 et aient soumis une demande de synchronisation. En outre, la logique se trouvant dans l'interconnexion externe 72 agrège les états de sortie locaux de tous ces pavés 4, dans l'ensemble des multiples puces 2 dans la zone en question. Une fois que tous les pavés 4 dans la zone de synchronisation externe ont fait la demande de synchronisation, l'interconnexion externe 72 renvoie un signal d'accusé de réception de synchronisation aux pavés 4 et mémorise l'état de sortie agrégé global au niveau puce dans les registres de consensus global ($GC) 42 de tous les pavés 4 en question. En réponse à l'accusé de réception de synchronisation, les pavés 4 sur toutes les puces 2 dans la zone reprennent l'émission d'instructions pour le superviseur. [0121] Dans des modes de réalisation, la fonctionnalité de l'interconnexion 72 peut être mise en oeuvre dans les puces 2, c'est-à-dire que la logique peut être répartie entre les puces 53 B17781 FR - 408529FR 2 de telle sorte que seulement des connexions câblées entre puces sont requises (les figures 11 et 12 sont schématiques). [0122] Tous _Les pavés 4 se trouvant dans la zone de synchronisation mentionnée sont programmés pour indiquer la même zone de synchronisation via l'opérande de mode de leurs instructions SYNC respectives. Dans des modes de réalisation, la logique de synchronisation dans le périphérique d'interconnexion externe 72 est agencée de sorte que, si ce n'est pas le cas en raison d'une erreur de programmation ou d'une autre erreur (comme une erreur de parité mémoire), certains ou la totalité des pavés 4 ne vont pas recevoir d'accusé de réception, et par conséquent le système va venir s'arrêter à la barrière externe suivante, permettant ainsi à un CPU externe de gestion (par exemple l'hôte) d'intervenir pour un débogage ou une récupération système. Dans d'autres modes de réalisation une erreur est signalée dans le cas où les zones de synchronisation ne concordent pas. Toutefois, de préférence le compilateur est agencé pour assurer que les pavés se trouvant dans la même zone indiquent tous la même zone de synchronisation correcte à l'instant concerné. [0123] La figure 13 illustre un exemple de flux de programme BSP impliquant à la fois une synchronisation interne (sur la puce) et une synchronisation externe (inter-puce). Comme cela est représenté, il est préférable de maintenir les échanges internes 50 (de données entre des pavés 4 sur la même puce 2) séparés des échanges externes 50' (de données entre des pavés 4 sur des puces 2 différentes). Une raison pour cela est qu'un échange global entre de multiples puces, qui est délimité par la synchronisation globale, peut être plus "coûteux" en termes de latence et de complexité d'équilibrage de charge que dans le cas de seulement une synchronisation et un échange au niveau puce. Une autre raison possible est que l'échange de données par l'intermédiaire de l'interconnexion interne 34 54 B17781 FR - 408529FR (sur la puce) peut être rendu déterministe dans le temps, tandis Que dans des modes de réalisation des échanges de données par l'intermédiaire de l'interconnexion externe 72 peuvent être non déterministes dans le temps. Dans de tels scénarios il peut être utile de séparer les échanges internes et externes de telle sorte que le processus de synchronisation et d'échange externe ne "contamine" pas la synchronisation et l'échange interne. [0124] En conséquence, pour obtenir une telle séparation, dans des modes de réalisation le programme est agencé pour réaliser une séquence de synchronisations, de phases d'échange et de phases de calcul comprenant dans l'ordre suivant : (i) une première phase de calcul, puis (ii) une synchronisation à barrière interne 30, puis (iii) une phase d'échange interne 50, puis (iv) une synchronisation à barrière externe 80, puis (v) une phase d'échange externe 50'. Voir la puce de 211 en figure 13. La barrière externe 80 est imposée après la phase d'échange interne 50, afin que le programme ne procède à l'échange externe 50' Qu'après l'échange interne 50. On notera aussi Que comme cela est représenté en ce qui concerne la puce de 21 en figure 12, optionnellement une phase de calcul peut être incluse entre l'échange interne (iii) et la barrière externe (iv). La séquence globale est imposée par le programme (par exemple en étant générée comme telle par le compilateur), et la synchronisation interne et l'échange ne s'étendent pas à des pavés ou d'autres entités sur une autre puce 2. La séquence (i)-(v) (avec la phase de calcul optionnelle susmentionnée entre iii est iv) peut être répétée dans une série d'itérations globales. Par itération il peut y avoir de multiples instances du calcul, de la synchronisation et de l'échange internes (i)-(iii) avant la synchronisation et l'échange externes. B17781 FR - 408529FR [0125] On notera que pendant un échange externe 50 les communications ne sont pas limitées a être seulement externes : certains pavés peuvent réaliser seulement des échanges internes, certains peuvent réaliser seulement des échanges externes, et certains peuvent réaliser un mélange des deux. On notera aussi que comme cela est représenté en figure 13, il est en général possible d'avoir une phase de calcul nulle 52 ou une phase d'échange nulle 50 dans toute super-étape BSP donnée. [0126] Dans certains modes de réalisation, comme cela est aussi représenté en figure 13, certains pavés 4 peuvent réaliser des entrées/sorties locales pendant une phase de calcul, par exemple ils peuvent échanger des données avec un hôte. [0127] Comme cela est illustré en figure 14, dans des modes de réalisation le mode de l'instruction SYNC peut être utilisé pour spécifier l'une de multiples zones de synchronisation externes possibles différentes, par exemple zone _î ou zone 2. Dans des modes de réalisation, cela correspond à des niveaux hiérarchiques différents. C'est-à-dire que chaque niveau hiérarchique supérieur 92 (par exemple zone 2) englobe deux ou plusieurs zones 91A, 91B d'au moins un niveau hiérarchique inférieur. Dans certains modes de réalisation, il y a seulement deux niveaux hiérarchiques, mais des nombres plus élevés de niveaux imbriqués ne sont pas exclus. Si l'opérande de l'instruction SYNC est mis au niveau hiérarchique inférieur de la zone de synchronisation externe (SYNC zone 1), alors les opérations de synchronisation et d'agrégation décrites précédemment sont réalisées en relation avec les pavés 4 sur les puces 2 seulement dans la même zone de synchronisation externe de niveau inférieur que le pavé sur lequel le SYNC a été exécuté. Si au contraire l'opérande de l'instruction SYNC est mis au niveau hiérarchique supérieur de la zone de 56 B17781 FR - 408529FR synchronisation externe (SYNC zone 2), alors les opérations de synchronisation et d'agrégation décrites précédemment sont réalisées automatiquement en relation avec tous les pavés sur toutes les puces 2 dans la même zone de synchronisation externe de niveau supérieur que le pavé sur lequel le SYNC a été exécuté. Dans certains modes de réalisation le niveau hiérarchique le plus élevé de zone de synchronisation englobe toutes les puces, c'est-à-dire qu'il est utilisé pour réaliser une synchronisation globale. Lorsque de multiples zones de niveau inférieur sont utilisées, un BSP peut être imposé de façon interne dans le groupe de pavés 4 sur la ou les puces 2 dans chaque zone, mais chaque zone peut fonctionner de manière asynchrone par rapport aux autres jusqu'à ce qu'une synchronisation globale soit réalisée. [0128] On notera que dans d'autres modes de réalisation, les zones de synchronisation qui peuvent être spécifiées par le mode de l'instruction SYNC ne sont pas limitées à être hiérarchiques de nature. En général, une instruction SYNC peut être fournie avec des modes correspondant à n'importe quelle sorte de regroupement. Par exemple, les modes peuvent permettre une sélection parmi seulement des groupes non hiérarchiques, ou un mélange de groupements hiérarchiques et d'un ou plusieurs groupes non hiérarchiques (où au moins un groupe n'est pas entièrement imbriqué dans un autre). Cela donne avantageusement une flexibilité pour le programmeur ou le compilateur, avec une densité de code minimale, pour sélectionner entre différentes dispositions de groupes synchrones de façon interne qui sont asynchrones entre eux. [0129] Un exemple de mécanisme pour mettre en oeuvre la synchronisation entre les groupes de synchronisation 91, 92 sélectionnés est illustré en figure 16. Comme cela est illustré, la logique de synchronisation externe 76 dans 57 B17781 FR - 408529FR l'interconnexion externe 72 comprend un bloc de synchronisation respectif 95 associé à chaque puce 2 respective. Chaque bloc de synchronisation 95 comprend de la logique de portes respective et un dispositif d'agrégation de synchronisation respectif. La logique de portes comprend des circuits matériels qui connectent entre elles les puces 2 dans une topologie en guirlande dans un but de synchronisation et d'agrégation d'états de sortie, et qui propagent la synchronisation et les informations d'état de sortie de la manière suivante. Le dispositif d'agrégation de synchronisation comprend des circuits matériels agencés pour agréger les demandes de synchronisation (sync reg) et les états sortie de la manière suivante. [0130] Le bloc de synchronisation respectif 95 associé à chaque puce 2 est connecté à sa puce 2 respective, de telle sorte qu'il peut détecter la demande de synchronisation (Sync reg) émise par cette puce 2 et l'état de sortie de cette puce 2, et de telle sorte qu'il peut renvoyer l'accusé de réception de synchronisation (Sync ack) et l'état de sortie global à la puce 2 respective. Le bloc de synchronisation 95 respectif associé à chaque puce 2 est aussi connecté au bloc de synchronisation 95 d'au moins une autre des puces 2 par l'intermédiaire d'une interface de synchronisation externe comprenant un faisceau de quatre fils de synchronisation 96, dont des détails vont être décrits de façon plus précise dans un instant. Cela peut faire partie de l'une des liaisons de puce à puce 8. Dans le cas d'une liaison entre des puces 2 sur différentes cartes, l'interface 8 peut par exemple comprendre une interface PCI et les quatre fils de synchronisation 96 peuvent être mis en oeuvre en réutilisant quatre fils de l'interface PCI. Certains des blocs de synchronisation 95 des puces sont connectés à ceux de deux puces 2 adjacentes, chaque connexion se faisant par 58 B17781 FR - 408529FR l'intermédiaire d'une instance respective des quatre fils de synchronisation 96. De cette manière, les puces 2 peuvent être connectées en une ou plusieurs guirlandes par l'intermédiaire de leurs blocs de synchronisation 95. Cela permet que les demandes de synchronisation, les accusés de réception de synchronisation, les agrégats courants d'états de sortie, et les états de sortie Globaux, soient propagés vers le haut et le bas de la chaîne. [0131] En fonctionnement, pour chaque groupe de synchro- nisation 91, 92, le bloc de synchronisation 95 associé à l'une des puces 2 dans ce groupe est mis comme maître dans un but de synchronisation et d'agrégation d'états de sortie, le reste du groupe étant des esclaves pour cela. Chacun des blocs de synchronisation esclaves 95 est confiauré avec la direction (par exemple gauche ou droite) dans laquelle il a besoin de propager des demandes de synchronisation, des accusés de réception de synchronisation et des états de sortie pour chaque groupe de synchronisation 91, 92 (c'est-à-dire la direction vers le maître). Dans certains modes de réalisation ces réglages sont configurables par logiciel, par exemple dans une phase de configuration initiale après laquelle la configuration reste en place dans la suite du fonctionnement du système. Par exemple cela peut être configuré par le processeur hôte. En variante, il n'est pas exclu que la configuration puisse être câblée. De toute manière, les différents groupes de synchronisation 91, 92 peuvent avoir des maîtres différents et en général il est possible qu'une puce donnée 2 (ou plutôt son bloc de synchronisation 95) soit le maître d'un groupe et pas d'un autre groupe dont elle est membre, ou soit le maître de multiples groupes. [0132] Par exemple, â titre d'illustration, considérons l'exemple de scénario de la figure 16. Disons à titre d'exemple que le bloc de synchronisation 95 de la puce 2IV 59 B17781 FR - 408529FR est mis comme maître d'un groupe de synchronisation donné 91A. Considérons maintenant la première puce 21 dans la chaîne de puces 2, connectées via leurs blocs de synchronisation 95 et des fils 96 en dernier lieu à la puce 2IV. Lorsque tous les fils de travail de la phase de calcul courante sur la première puce 21 ont exécuté une instruction EXIT, et les superviseurs sur tous les pavés 4 (participants) ont tous exécuté une instruction SYNC spécifiant le groupe de synchronisation 91A, alors la première puce 21 signale qu'elle est prête pour la synchronisation à son bloc de synchronisation 95 associé respectif. La puce 21 fournit aussi à son bloc de synchronisation 95 respectif son état de sortie agrégé au niveau puce (l'agrégat de tous les fils de travail sortant sur tous les pavés participants sur la puce 21 respective). En réponse, le bloc de synchronisation 95 de la première puce 21 propage une demande de synchronisation (Sync reg) vers le bloc de synchronisation 95 de la puce 211 suivante dans la chaîne. Il propage aussi l'état de sortie de la première puce 21 vers le bloc de synchronisation 95 de cette puce 211 suivante. Le bloc de synchronisation 95 de cette deuxième puce 211 attend Que les superviseurs de ses propres pavés 4 (participants) aient tous exécuté une instruction SYNC spécifiant le groupe de synchronisation 91A, amenant la deuxième puce 211 à signaler qu'elle est prête pour la synchronisation. C'est seulement alors que le deuxième bloc de synchronisation de puce 95 propage une demande de synchronisation vers le bloc de synchronisation 95 de la puce suivante 2111 (la troisième) dans la chaîne, et propage aussi un agrégat courant de l'état de sortie de la première puce 21 avec celui de la deuxième puce 211. Si la deuxième puce 211 était devenue prête pour la synchronisation avant la première 21, alors le bloc de synchronisation 95 de la deuxième puce 211 aurait attendu que la première puce 21 signale une demande B17781 FR - 408529FR de synchronisation avant de propager la demande de synchronisation vers le bloc de synchronisation 95 de la troisième puce 2111. Le bloc de synchronisation 95 de la troisième puce 2111 se comporte de manière similaire, cette fois en agrégeant l'état de sortie agrégé courant provenant de la deuxième puce 211 pour obtenir l'agrégat courant suivant a passer en avant, etc. Cela continue en direction du bloc de synchronisation maître, celui de la puce 2IV dans cet exemple. [0133] Le bloc de synchronisation 95 du maître détermine ensuite un agrégat global de tous les états de sortie sur la base de l'agrégat courant qu'il reçoit et de l'état de sortie de sa propre puce 2IV. Il propage cet agrégat global en arrière le long de la chaîne vers toutes les puces 2, accompagné de l'accusé de réception de synchronisation (Sync ack). [0134] Si le maître est à mi-chemin dans une chaîne, contrairement au fait d'être à une extrémité donnée comme dans l'exemple susmentionné, alors les informations de synchronisation et d'état de sortie se propagent dans des directions opposées de chaque côté du maître, des deux côtés en direction du maître. Dans ce cas le maître émet seulement l'accusé de réception de synchronisation et l'état de sortie global une fois que la demande de synchronisation provenant des deux côtés a été reçue. Par exemple considérons le cas où la puce 2111 est maître du groupe 92. En outre, dans des modes de réalisation le bloc de synchronisation 95 de certaines des puces 2 pourrait être connecté à celui de trois ou plus autres puces 2, créant ainsi de multiples branches de chaînes en direction du maître. Chaque chaîne se comporte alors comme décrit précédemment, et le maître émet seulement l'accusé de réception de synchronisation et l'état de sortie global une fois que la demande de synchronisation a été reçue à partir toutes les chaînes. Et/ou, une ou plusieurs des puces 2 61 B17781 FR - 408529FR pourraient être connectées à une ressource externe comme le processeur hôte, une carte réseau, un dispositif de stockage ou un FPGA. [0135] Dans certains modes de réalisation la signalisation de la synchronisation et de l'information d'état de sortie est mise en oeuvre de la manière suivante. Le faisceau de Quatre fils de synchronisation 96 entre chaque paire de puces 2 comprend deux paires de fils, une première paire 96_O et une deuxième paire 96 1. Chaque paire comprend une instance d'un fil de demande de synchronisation et une instance d'un fil d'accusé de réception de synchronisation. Pour signaler un état de sortie agrégé courant de valeur 0, le bloc de synchronisation 95 de la puce 2 émettrice utilise le fil de demande de synchronisation de la première paire de fils 96_0 lors du signalement de la demande de synchronisation (sync reg), ou pour signaler un agrégat courant de valeur 1 le bloc de synchronisation 95 utilise le fil de demande de synchronisation de la deuxième paire de fils 96_1 lors du signalement de la demande de synchronisation. Pour signaler un état de sortie d'agrégat global de valeur 0, le bloc de synchronisation 95 de la puce 2 émettrice utilise le fil d'accusé de réception de synchronisation de la première paire de fils 96_0 lors du signalement de l'accusé de réception de synchronisation (sync ack), ou pour signaler un agrégat global de valeur 1 le bloc de synchronisation 95 utilise le fil de demande de synchronisation de la deuxième paire de fils 96_1 lors du signalement de l'accusé de réception de synchronisation. [0136] On notera que ce qui vient d'être mentionné est seulement le mécanisme destiné à la propagation de la synchronisation et de l'information d'état de sortie. Les données effectives (contenu) sont transmises par un autre canal, par exemple comme cela est décrit dans la suite en 62 B17781 FR - 408529FR référence à la figure 16. En outre, on remarquera que cela n'est qu'un exemple de mise en oeuvre, et l'homme de l'art sera capable de construire d'autres circuits pour mettre en oeuvre la synchronisation décrite et la fonctionnalité d'agrégation une fois donnée la spécification de cette fonctionnalité décrite ici. Par exemple, la logique de synchronisation (95 en figure 18) pourrait à la place utiliser des paquets transportés sur l'interconnexion 34, 72 comme alternative au câblage dédié. Par exemple, le sync req et/ou le sync ack pourraient chacun être transmis sous la forme d'un ou plusieurs paquets. [0137] La fonctionnalité de l'instruction SYNC dans les différents modes possibles est résumée de la façon suivante. [0138] SYNC tile (réalise une synchronisation à barrière locale sur un pavé) - le mode d'exécution du superviseur passe d'exécution à attente que des fils de travail sortent - suspendre l'émission d'instructions pour le fil superviseur jusqu'à ce que tous les fils de travail soient inactifs - lorsque tous les fils de travail sont inactifs, l'état de sortie de travail agrégé est mis à disposition par l'intermédiaire du registre de consensus local ($LC) 38. [0139] SYNC chip (réalise une synchronisation à barrière interne sur une puce) - le mode d'exécution du superviseur passe d'exécution à attente que des fils de travail sortent - suspendre l'émission d'instructions pour le fil superviseur jusqu'à ce que tous les fils de travail soient inactifs - lorsque tous les fils de travail sont inactifs : - l'état de sortie du fil de travail local agrégé est mis à disposition par l'intermédiaire du registre de consensus local ($LC) 38 63 B17781 FR - 408529FR - une participation à la synchronisation interne est signalée au tissu d'échange 34 - le superviseur reste inactif jusqu'à ce que le pavé 4 reçoive un accusé de réception de synchronisation interne provenant du tissu d'échange 34 - le statut de sortie au niveau système est mis à jour dans le registre de consensus global ($GC) 42. [0140] SYNC zone _n (réalise une synchronisation à barrière externe dans l'ensemble de la zone n) - le mode d'exécution du superviseur passe d'exécution à attente que des fils de travail sortent - suspendre l'émission d'instructions pour le fil superviseur jusqu'à ce que tous les fils de travail soit inactifs - lorsque tous les fils de travail sont inactifs : - l'état de sortie de fil de travail local agrégé est mis à disposition par l'intermédiaire du registre de consensus local ($1,C) 38 - une participation à la synchronisation externe est signalée au système externe, par exemple la logique de synchronisation dans l'interconnexion externe 72 susmentionnée - le superviseur reste suspendu jusqu'à ce que le pavé 4 reçoive un accusé de réception de synchronisation externe provenant du système externe 72 - l'état de sortie au niveau système est mis à jour dans le registre de consensus global ($GC) 42. [0141] Comme cela a été mentionné précédemment, tous les pavés 4 ne doivent pas nécessairement participer à la synchronisation. Dans des modes de réalisation, comme cela a été décrit, le groupe de pavés participants peut être défini par l'opérande de mode de l'instruction de synchronisation. Toutefois, cela autorise seulement la sélection de groupes de pavés prédéfinis. il est admis ici qu'il serait aussi souhaitable de pouvoir sélectionner la participation à la 64 B17781 FR - 408529FR synchronisation pavé par pavé. Par conséquent, dans des modes de réalisation, on prévoit un mécanisme alternatif ou additionnel pour sélectionner les pavés 4 individuels qui participent à la synchronisation à barrière. [0142] En particulier, cela est obtenu en prévoyant un type d'instruction supplémentaire dans le jeu d'instructions du processeur, à exécuter par un ou certains des pavés 4 à la place de l'instruction SYNC. Cette instruction peut être appelée instruction d'"abstention", ou instruction "SANS" (synchronisation non participative automatique de départ). Dans des modes de réalisation l'instruction SANS est réservée à une utilisation par le fil superviseur. Dans des modes de réalisation elle prend un seul opérande immédiat : SANS n barriers [0143] Le comportement de l'instruction SANS est d'amener le pavé sur lequel elle est exécutée à s'abstenir de la synchronisation à barrière courante, mais sans retenir les autres pavés qui sont en train d'attendre que tous les pavés se trouvant dans le groupe de synchronisation spécifié exécutent le SYNC. En effet, elle dit "continuez sans moi". Lorsque l'instruction SANS est exécutée, le code opération de l'instruction SANS déclenche la logique dans l'unité d'exécution de l'étage d'exécution 18 pour envoyer une instance du signal de demande de synchronisation (Sync reg) au contrôleur de synchronisation interne et/ou externe 36, 76 (en fonction du mode). Dans des modes de réalisation, la demande de synchronisation générée par l'instruction SANS s'applique à tout groupe de synchronisation 91, 92 qui englobe le pavé 4 qui a exécuté l'instruction SANS. C'est-à-dire que quel que soit le groupe de synchronisation que les pavés 4 dans la ou les puces locales utilisent ensuite (ils doivent être d'accord sur le groupe de synchronisation), le sync req B17781 FR - 408529FR provenant de ceux qui ont exécuté l'instruction SANS va toujours être valide. [0144] Ainsi, du point de vue de la logique du contrôleur de synchronisation 36, 76 et des autres pavés 4 dans le groupe de synchronisation, le pavé 4 exécutant l'instruction SANS apparaît exactement comme étant un pavé 4 exécutant une instruction SYNC, et ne retient pas la barrière de synchronisation et l'envoi du signal d'accusé de réception de synchronisation (Sync ack) provenant de la logique de synchronisation 36, 76. C'est-à-dire que les pavés 4 exécutant l'instruction SANS au lieu de l'instruction SYNC ne retiennent pas ni ne bloquent aucun des autres pavés 4 impliqués dans un groupe de synchronisation dont le pavé en question est autrement un membre. Toute poignée de main réalisée par une instruction SANS est valide pour tous les groupes de synchronisation 91, 92. [0145] Toutefois, à la différence de l'instruction SYNC, l'instruction SANS ne provoque pas la mise en pause de l'émission d'instructions du superviseur en attendant le signal d'accusé de réception de synchronisation (Sync ack) provenant de la logique de synchronisation 36, 76. A la place, le pavé respectif peut simplement continuer sans être inhibé par la synchronisation à barrière courante réalisée entre les autres pavés 4 qui ont exécuté des instructions SYNC. Ainsi, en imitant une synchronisation mais sans attendre, l'instruction SANS permet à son pavé 4 de poursuivre le traitement d'une ou plusieurs tâches tout en permettant encore aux autres pavés 4 de se synchroniser. [0146] L'opérande n barriers spécifie nombre de synchronisations "postées", c'est-à-dire le nombre de futurs points de synchronisation (barrières) auxquels le pavé ne va pas participer. En variante, il n'est pas exclu que dans 66 B17781 FR - 408529FR d'autres modes de réalisation l'instruction SANS ne prenne pas cet opérande, et qu'à la place chaque exécution de l'instruction SANS provoque seulement une abstention d'une seule fois. [0147] Au moyen de l'instruction SANS, certains pavés 4 peuvent être responsables de la réalisation de tâches à l'extérieur de la portée directe du schéma de fonctionnement BSP. Par exemple, il peut être souhaitable d'allouer à un petit nombre de pavés 4 dans une puce 2 le lancement (et le traitement) de transferts de données vers et/ou à partir de la mémoire hôte pendant que la majorité des pavés 4 sont occupés avec la ou les tâches de calcul primaires. Dans de tels scénarios, ces pavés 4 qui ne sont pas directement impliqués dans un calcul primaire peuvent se déclarer eux-mêmes comme effectivement déconnectés du mécanisme de synchronisation pendant une période de temps en utilisant la fonctionnalité de synchronisation non participative automatique (SANS). Lorsqu'il utilise cette fonctionnalité, un pavé 4 n'est pas obligé de signaler activement (c'est-à-dire via l'exécution de l'instruction SYNC) sa capacité d'être prêt pour une synchronisation (pour n'importe laquelle des zones de synchronisation), et dans des modes de réalisation apporte une contribution nulle à l'état de sortie agrégé. [0148] L'instruction SANS commence ou rallonge une période pendant laquelle le pavé 4 sur lequel elle est exécutée va s'abstenir d'une participation active à une synchronisation inter-pavé (ou d'une synchronisation avec d'autres ressources externes si elles sont aussi impliquées dans la synchronisation). Pendant cette période, ce pavé 4 va automatiquement signaler sa capacité à être prêt pour la synchronisation, dans toutes les zones, et dans des modes de réalisation va aussi apporter une contribution nulle au consensus agrégé global $GC. Cette période de temps peut être 67 B17781 FR - 408529FR exprimée sous forme d'un opérande immédiat non signé (n barriers) indiquant combien de futurs points de synchronisation additionnels vont être signalés automatiquement par ce pavé 4. À l'exécution de l'instruction SANS, la valeur n barriers spécifiée par son opérande est placée dans un registre de décomptage $ANS DCOUNT sur le pavé 4 respectif. Cela est un élément d'état architectural utilisé pour garder une trace du nombre de futurs sync regs additionnels qui doivent être faits. Si le mécanisme de synchronisation non participative automatique est actuellement inactif, la première affirmation de capacité d'être prêt (demande de synchronisation, sync req) va être réalisée immédiatement. Des affirmations suivantes vont survenir en arrière-plan, une fois que la synchronisation précédente est achevée (c'est-à-dire à la suite de l'affirmation de l'accusé de réception de synchronisation, sync ack). Si le mécanisme de synchronisation non participative automatique est actuellement actif, le registre compteur de décomptage $ANS DCOUNT va être mis à jour de façon automatique, de sorte qu'aucun signal d'accusé de réception de synchronisation n'est laissé sans comptage. Le mécanisme de synchronisation non participative automatique est mis en oeuvre dans de la logique matérielle dédiée, avec de préférence une instance de celle-ci dans chaque pavé 4, bien que dans d'autres modes de réalisation il ne soit pas exclu qu'à la place il puisse être mis en oeuvre de manière centrale pour un groupe de pavés ou tous les pavés. [0149] En ce qui concerne le comportement de l'état de sortie, il y a en fait un certain nombre de possibilités Qui dépendent de la mise en oeuvre. Dans des modes de réalisation, pour obtenir l'état de sortie agrégé globalement, la logique de synchronisation 36, 76 agrège seulement les états de sorties locaux provenant des pavés 4 se trouvant dans le groupe de 68 B17781 FR - 408529FR synchronisation spécifié qui ont exécuté une instruction SYNC, et pas de celui ou ceux qui ont exécuté une instruction SANS (le ou les pavés qui s'abstiennent). En variante, l'état de sortie agrégé globalement est obtenu en agrégeant les états de sorties locaux provenant de tous les pavés 4 se trouvant dans le groupe de synchronisation qui a exécuté un SYNC et de ceux qui ont exécuté une instruction SANS (à la fois les pavés 4 participants et les pavés 4 s'abstenant). Dans ce dernier cas, la sortie d'état de sortie local par le ou les pavés 4 gui s'abstiennent pour une agrégation globale peut être l'état de sortie agrégé localement effectif des fils de travail de ce pavé à l'instant de l'exécution de l'instruction SANS, juste comme avec l'instruction SYNC (voir la description du registre de consensus local de $LC 38). En variante, 1' "état de sortie" local produit par le pavé 4 qui s'abstient peut être une valeur par défaut, par exemple la valeur vraie (par exemple l'état logique 1) dans des modes de réalisation où l'état de sortie est binaire. Cela empêche que le pavé 4 qui s'abstient n'interfère avec l'état de sortie global dans des modes de réalisation où un état de sortie local faux amène l'état de sortie global à être faux. [0150] En ce qui concerne le retour de l'état de sortie global, il y a deux possibilités, indépendamment du fait que le pavé qui s'abstient soumette ou non un état de sortie local pour produire l'agrégat local, et indépendamment du fait que cette valeur soit une valeur effective ou une valeur par défaut. C'est-à-dire que, dans une mise en oeuvre, l'état de sortie agrégé global produit par la logique de synchronisation 36, 76 se trouvant dans l'interconnexion 34, 72 est mémorisé seulement dans les registres de consensus global $GC 42 des pavés 4 participants qui ont exécuté une instruction SYNC, et pas des pavés 4 qui s'abstiennent qui à la place ont exécuté une instruction SANS. Dans des modes de réalisation, à la 69 B17781 FR - 408529FR place une valeur par défaut est mémorisée dans le registre de consensus global $GX 42 du ou des pavés 4 qui ont exécuté une instruction SANS (les pavés qui s'abstiennent). Par exemple, cette valeur par défaut peut être vraie, par exemple l'état logique 1, dans le cas d'un état de sortie global binaire. Toutefois, dans une variante de mise en oeuvre, l'agrégat global effectif produit par la logique de synchronisation 36, 76 est mémorisé dans les registres de consensus global $GC 42 à la fois des pavés 4 participants qui ont exécuté des instructions SYNC et des pavés 4 s'abstenant qui à la place ont exécuté une instruction SANS. Ainsi tous les pavés du groupe peuvent encore avoir accès à l'état de sortie agrégé globalement. [0151] La figure 15 illustre un exemple d'application de l'architecture de processeur décrite ici, à savoir une application d'intelligence artificielle. [0152] 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 dans le 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 B17781 FR - 408529FR 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. [0153] 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. [0154] 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 71 B17781 FR - 408529FR 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 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. [0155] 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 dans le 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. [0156] 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 72 B17781 FR - 408529FR 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 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. [0157] 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 73 B17781 FR - 408529FR 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 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. [0158] 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 une confiance (par exemple un pourcentage) 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 du graphe, a convergé jusqu'à un degré acceptable. [0159] 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. [0160] 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 74 B17781 FR - 408529FR 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 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. [0161] Mettre à jour un graphe (ou un sous-graphe) signifie mettre a 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. [0162] On notera que les modes de réalisation susmentionnés ont été décrits uniquement à titre d'exemple. [0163] Par exemple, l'applicabilité du mécanisme d'agré- gation d'états de sortie n'est pas limitée à l'architecture B17781 FR - 408529FR qu'on a décrit précédemment dans laquelle un contexte séparé est prévu pour le fil superviseur, ou dans laquelle le fil superviseur s'exécute dans un créneau puis abandonne son créneau à un fil de travail. Dans un autre agencement par exemple, le superviseur peut s'exécuter dans son propre créneau dédié. [0164] En outre, les termes "superviseur" et "fil de travail" n'impliquent pas de responsabilités spécifiques sauf si cela est mentionné explicitement, et en particulier ne se limitent pas nécessairement en eux-mêmes au schéma décrit précédemment dans lequel un fil superviseur abandonne son créneau temporel à un fil de travail et ainsi de suite. En général, un fil de travail peut désigner tout fil auquel une tâche de calcul est allouée. Le superviseur peut représenter toute sorte de fil de supervision ou de coordination responsable d'actions comme : affecter des fils de travail à des créneaux de barillet, et/ou réaliser des synchronisations à barrière entre de multiples fils, et/ou réaliser toute opération de contrôle de flux (comme un branchement) en fonction de la sortie de plus qu'un seul fil. [0165] Lorsque l'on fait référence à une séquence de créneaux temporels entrelacés, ou similaire, cela n'implique pas nécessairement que la séquence mentionnée soit constituée de tous les créneaux possibles ou disponibles. Par exemple, la séquence en question pourrait être constituée de tous les créneaux possibles ou de seulement ceux qui sont actuellement actifs. Il n'est pas nécessairement exclu qu'il puisse y avoir d'autres créneaux potentiels qui ne sont pas actuellement inclus dans la séquence planifiée. [0166] Le terme pavé tel qu'il est utilisé ici ne se limite pas nécessairement à une topographie particulière ou similaire, et en général peut désigner toute unité modulaire 76 B17781 FR - 408529FR de ressources de traitement, comprenant une unité de traitement 10 et une mémoire 11 correspondante, dans une matrice de modules similaires, dont typiquement au moins certains sont sur la même puce (c'est-à-dire la même puce élémentaire). [0167] En outre, la portée la présente description n'est pas limitée à une interconnexion interne déterministe dans le temps ou une interconnexion externe non déterministe dans le temps. Les mécanismes de synchronisation et d'agrégation décrits ici peuvent aussi être utilisés dans un agencement complètement déterministe dans le temps, ou un agencement complètement non déterministe dans le temps. [0168] En outre, lorsqu'on fait référence à la réalisation d'une synchronisation ou d'une agrégation dans un groupe de pavés, ou entre une pluralité de pavés ou similaire, cela ne doit pas nécessairement désigner tous les pavés sur la puce ou tous les pavés dans le système sauf mention explicite. Par exemple, I p.q instructions SYNC et EXIT pourraient être agencées pour réaliser la synchronisation et l'agrégation seulement en relation avec un certain sous-ensemble de pavés 4 sur une puce donnée et/ou seulement un sous-ensemble de puces 2 dans un système donné ; tandis que certains autres pavés 4 sur une puce donnée, et/ou certaines autres puces dans un système donné, peuvent ne pas être impliqués dans un groupe BSP donné, et pourraient même être utilisés pour un ensemble complètement séparé de tâches non reliées au calcul qui est réalisé par le groupe à portée de main. [0169] Aussi, alors qu'on a décrit ici certains modes d'instructions SYNC, la portée de la présente description plus généralement n'est pas limitée à de tels modes. Par exemple, la liste de modes donnée précédemment n'est pas nécessairement exhaustive. Ou dans d'autres modes de réalisation, 77 B17781 FR - 408529FR l'instruction SYNC peut avoir moins de modes, par exemple le SYNC n'a pas besoin de prendre en charge différents niveaux hiérarchiques de synchronisation externe, ou n'a pas besoin de distinguer entre des synchronisations sur la puce et entre puces (c'est-à-dire dans un mode inter-pavé, agit toujours en relation avec tous les pavés qu'on soit sur la puce ou hors puce). Dans encore d'autres variantes de réalisation, l'instruction SYNC n'a pas besoin du tout de prendre un mode comme opérande. Par exemple, dans certains modes de réalisation des versions séparées de l'instruction SYNC (différents codes d'opération) peuvent être prévues pour les différents niveaux de synchronisation et l'agrégation d'états de sortie (comme des instructions SYNC différentes pour la synchronisation sur les pavés et inter-pavé, la synchronisation sur les puces). Ou dans d'autres modes de réalisation, une instruction SYNC dédiée peut être prévue seulement pour des synchronisations inter-pavés (laissant la synchronisation au niveau pavé entre les fils, si nécessaire, être réalisée par du logiciel d'usage général). [0170] En outre, les zones de synchronisation ne sont pas limitées à être hiérarchiques (c'est-à-dire imbriquées les unes dans les autres), et dans d'autres modes de réalisation, les zones de synchronisation sélectionnables peuvent être constituées de ou inclure un ou plusieurs groupes non hiérarchiques (tous les pavés de ce groupe non imbriqués dans un seul autre groupe sélectionnable). [0171] En outre, les schémas de synchronisation décrits ici n'excluent pas l'implication, dans des modes de réalisation, de ressources externes autres que des processeurs multi-pavés, par exemple un processeur CPU comme le processeur hôte, ou même un ou plusieurs composants qui ne sont pas des processeurs comme une ou plusieurs cartes réseau, dispositifs de stockage et/ou FPGA. Par exemple, certains pavés peuvent 78 B17781 FR - 408529FR choisir de s'engager dans des transferts de données avec un système externe, ces transferts formant la charge de calcul de ce pavé. Dans ce cas, les transferts devraient être achevés avant la barrière suivante. Dans certains cas, l'état de sortie du pavé peut dépendre du résultat de la communication avec la ressource externe, et cette ressource peut influencer indirectement l'état de sortie. En variante ou en plus, des ressources autres que des processeurs multi-pavés, par exemple l'hôte ou un ou plusieurs FPGA, pourraient être incorporées dans le réseau de synchronisation lui-même. C'est-à-dire qu'un signal de synchronisation comme un Sync req est requis de cette ou ces ressources additionnelles afin que la barrière de synchronisation soit satisfaite et que les pavés procèdent à la phase d'échange suivante. En outre, dans des modes de réalisation l'état de sortie global agrégé peut inclure dans l'agrégation un état de sortie de la ressource externe, par exemple provenant d'un FPGA. [0172] D'autres applications et variantes des techniques décrites pourront apparaître à l'homme de l'art avec la description donnée ici. Le domaine de la présente description n'est REVENDICATIONS1. Système de traitement comprenant un agencement de pavés et une interconnexion pour communiquer entre _Les pavés, dans lequel : chaque pavé comprend une unité d'exécution pour exécuter des instructions de code machine, chacune étant une instance d'un ensemble prédéfini de types d'instructions dans un jeu d'instructions du processeur, chaque type d'instruction se trouvant dans le jeu d'instructions étant défini par un code opération correspondant et zéro ou plus champs d'opérandes pour prendre zéro ou plus opérandes ; l'interconnexion est actionnable pour conduire des communications dans un groupe de certains ou de la totalité des pavés selon un schéma parallèle synchrone massif, d'où il résulte que chacun des pavés dudit groupe réalise une phase de calcul sur le pavé suivie d'une phase d'échange inter-pavé, la phase d'échange étant retenue jusqu'à ce que tous les pavés du groupe aient achevé la phase de calcul, chaque pavé du groupe ayant un état de sortie local à l'achèvement de la phase de calcul ; le jeu d'instructions comprend une instruction de synchronisation destinée à être exécutée par chaque pavé du groupe à l'achèvement de sa phase de calcul, l'exécution de l'instruction de synchronisation amenant l'unité d'exécution à envoyer une demande de synchronisation à de la logique matérielle se trouvant dans l'interconnexion ; et la logique se trouvant dans l'interconnexion est agencée pour agréger les états de sorties locaux en un état de sortie global, et, en réponse à l'achèvement de la phase de calcul par tous les pavés du groupe comme indiqué par la réception de la demande de synchronisation provenant de tous les pavés du groupe, pour mémoriser l'état de sortie 80 B17781 FR - 408529FR global dans un registre d'état de sortie global sur chacun des pavés du groupe, rendant ainsi l'état de sortie global accessible par une portion de code s'exécutant sur chacun des pavés du groupe. 2. Système de traitement selon la revendication 1, dans lequel l'unité d'exécution se trouvant sur chaque pavé est agencée pour mettre en pause l'émission d'instructions en réponse à l'exécution de l'instruction de synchronisation ; et dans lequel la logique se trouvant dans l'interconnexion est agencée de manière à, en demande de synchronisation réponse à la réception de la à partir de tous les pavés du groupe, renvoyer un signal d'accusé de réception de synchronisation à chacun des pavés du groupe afin de reprendre l'émission d'instructions. 3. Système de traitement selon l'une quelconque des revendications précédentes, dans lequel chacun des états de sortie locaux et des états de sortie globaux est un seul bit. 4. Système de traitement selon la revendication 3, dans lequel l'agrégation est constituée d'un ET booléen des états de sorties locaux ou d'un OU booléen des états de sorties locaux. 5. Système de traitement selon la revendication 1 ou 2, dans lequel l'état de sortie agrégé comprend au moins deux bits représentant une valeur trinaire, indiquant si les états de sorties locaux sont tous vrais, tous faux ou mélangés. 6. Système de traitement selon l'une quelconque des revendications précédentes, dans lequel chacun des pavés du groupe de pavés comprend un registre d'état de sortie local agencé pour représenter l'état de sortie local du pavé. 7. Système de traitement selon l'une quelconque des revendications précédentes, dans lequel chaque pavé se trouvant 81 B17781 FR - 408529FR dans le groupe comprend : de multiples ensembles de registres de contexte, chaque ensemble de registres de contexte étant agencé pour mémoriser un état de programme de l'un respectif de multiples fils d'exécution ; et un ordonnanceur agencé pour ordonnancer l'exécution de l'un respectif d'une pluralité de fils de travail dans chacun d'une pluralité de créneaux temporels dans une séquence répétitive de créneaux temporels entrelacés, l'état de programme de chacun des fils de travail étant mémorisé dans l'un respectif des ensembles de registres de contexte ; dans lequel selon le schéma parallèle synchrone massif, la phase d'échange est retenue jusqu'à ce que tous les fils de travail sur tous les pavés du groupe aient achevé la phase de calcul ; dans lequel l'état de sortie local sur chaque pavé est un agrégat d'un état de sortie individuel fourni par chacun des fils de travail sur le pavé ; et dans lequel ladite portion de code comprend au moins l'un des multiples fils de travail se trouvant sur le pavé. 8. Système de traitement selon la revendication 7, dans lequel chaque pavé du groupe comprend de la logique matérielle agencée pour réaliser l'agrégation des états de sortie individuels dans l'état de sortie local. 9. Système de traitement selon la revendication 8, dans lequel le jeu d'instructions comprend une instruction de sortie destinée à être incluse dans chacun des fils de travail, l'unité d'exécution étant agencée pour fournir l'état de sortie individuel du fil de travail respectif et pour mettre fin au fil de travail respectif en réponse au code opération de l'instruction de sortie. 82 B17781 FR - 408529FR 10. Système de traitement selon la revendication 7, 8 ou 9, dans lequel chacun des états de sortie individuels et des états de sortie locaux est un seul bit, et l'agrégation des états de sortie individuels est constituée d'un ET booléen des états de sortie individuels ou d'un OU booléen des états de sortie individuels. 11. Système de traitement selon la revendication 7, 8 ou 9, dans lequel l'état de sortie local comprend au moins deux bits représentant une valeur trinaire, indiquant si les états de sortie individuels sont tous vrais, tous faux, ou mélangés. 12. Système de traitement selon l'une quelconque des revendications 7 à 11, dans lequel la phase d'échange est agencée pour être réalisée par un fil superviseur séparé des fils de travail, et ledit au moins un fil comprend le fil superviseur. 13. Système de traitement selon la revendication 12, dans sa dépendance de la revendication 2, dans lequel la mise en pause de l'émission d'instructions comprend au moins la mise en pause de l'émission d'instructions à partir du fil superviseur dans l'attente de l'accusé de réception de synchronisation. 14. Système de traitement selon la revendication 12 ou 13, dans lequel les ensembles de registres de contexte situés sur chaque pavé comprennent : de multiples ensembles de registres de contexte de fil de travail agencés pour représenter l'état de programme de fils respectifs de la pluralité de fils de travail, et un ensemble de registres de contexte de superviseur additionnel comprenant un ensemble additionnel de registres agencé pour représenter un état de programme du fil superviseur. 83 B17781 FR - 408529FR 15. Système de traitement selon la revendication 14, dans lequel : le fil superviseur est agencé pour commencer en s'exécutant dans chacun des créneaux temporels ; le jeu d'instructions comprend en outre une instruction d'abandon et l'unité d'exécution est agencée de manière à, en réponse au code opération de l'instruction d'abandon, abandonner le créneau temporel dans lequel l'instruction d'abandon est exécutée au fil de travail respectif ; et l'instruction de sortie amène le créneau temporel respectif dans lequel l'instruction de sortie est exécutée à être rendu au fil superviseur, de sorte que le fil superviseur reprend son exécution dans le créneau respectif. 16. Système de traitement selon l'une quelconque des revendications précédentes, programmé avec ledit code ; dans lequel ladite portion de code est agencée pour utiliser l'état de sortie global, une fois valide, pour réaliser une décision de branchement qui dépend de l'état de sortie global. 17. Système de traitement selon l'une quelconque des revendications précédentes, programmé pour réaliser un algorithme d'intelligence artificielle dans lequel chaque noeud se trouvant dans un graphe comporte une ou plusieurs arrêtes d'entrée respectives et une ou plusieurs arrêtes de sortie respectives, les arêtes d'entrée d'au moins certains des noeuds étant les arêtes de sortie d'au moins certains autres des noeuds, chaque noeud comprenant une fonction respective reliant ses arêtes de sortie à ses arêtes d'entrée, chaque fonction respective étant paramétrée par un ou plusieurs paramètres respectifs, et chacun des paramètres respectifs ayant une erreur associée, de sorte Que le graphe converge vers une solution lorsque les erreurs dans certains ou la totalité des paramètres se 84 B17781 FR - 408529FR réduisent ; dans lequel chacun des pavés modélise un sous-graphe respectif comprenant un sous-ensemble des noeuds du graphe, et chacun des états de sortie locaux est utilisé pour indiquer si les erreurs dans lesdits un ou plusieurs paramètres des noeuds dans le sous-graphe respectif ont satisfait une condition prédéterminée. 18. Système de traitement selon l'une quelconque des revendications précédentes, dans lequel le groupe est choisi au moins en partie par un opérande de l'instruction de synchronisation. 19. Système de traitement selon la revendication 18, dans lequel l'opérande des instructions de synchronisation sélectionne s'il faut inclure seulement des pavés se trouvant sur la même puce ou des pavés se trouvant sur des puces différentes dans ledit groupe. 20. Système de traitement selon la revendication 18 ou 19, dans lequel l'opérande des instructions de synchronisation sélectionne ledit groupe parmi différents niveaux hiérarchiques de groupements. 21. Système de traitement selon l'une quelconque des revendications précédentes, dans lequel le jeu d'instructions comprend en outre une instruction d'abstention, qui amène le pavé sur lequel l'instruction d'abstention est exécutée à s'exclure dudit groupe. 22. Procédé d'actionnement d'un système de traitement comprenant un agencement de pavés et une interconnexion pour communiquer entre les pavés, dans lequel chaque pavé comprend une unité d'exécution pour exécuter des instructions de code machine, chacune étant une instance d'un ensemble prédéfini de types d'instructions dans un jeu d'instructions du processeur, chaque type d'instruction du 85 B17781 FR - 408529FR jeu d'instructions étant défini par un code opération correspondant et zéro ou plus champs d'opérandes pour prendre zéro ou plus opérandes ; le procédé comprenant : conduire des communications dans un groupe de certains ou de la totalité des pavés, via l'interconnexion, selon un schéma parallèle synchrone massif, d'où il résulte que chacun des pavés du groupe réalise une phase de calcul sur le pavé suivi d'une phase d'échange inter-pavé, la phase d'échange étant retenue jusqu'à ce que tous les pavés du groupe aient achevé la phase de calcul, chaque pavé du groupe ayant un état de sortie local à l'achèvement de la phase de calcul ; dans lequel le jeu d'instructions comprend une instruction de synchronisation destinée à être exécutée par chaque pavé du groupe à l'achèvement de sa phase de calcul, l'exécution de l'instruction de synchronisation amenant l'unité d'exécution à envoyer une demande de synchronisation à de la logique matérielle dans l'interconnexion ; et le procédé comprend, en réponse à l'achèvement de la phase de calcul par tous les pavés du groupe comme indiqué par la réception de la demande de synchronisation à partir de tous les pavés du groupe, le déclenchement de la logique se trouvant dans l'interconnexion pour agréger les états de sortie locaux en un état de sortie global, et pour mémoriser l'état de sortie global dans un registre d'état de sortie global sur chacun des pavés du groupe, rendant ainsi l'état de sortie global accessible à une portion de code s'exécutant sur chacun des pavés du groupe. 23. Produit programme informatique comprenant du code incorporé dans un stockage lisible par un ordinateur et agencé pour s'exécuter sur le système de traitement de l'une quelconque des revendications 1 à 21, le code comprenant une portion destinée à être exécutée sur chaque 86 B17781 FR - 408529FR pavé du groupe comprenant une instance de l'instruction de synchronisation dans chaque portion.