FR 3072797 A1 20190426 FR 1859638 A 20181018 B17782 FR - 409133FR DESCRIPTION TITRE : SYNCHRONISATION DANS UN AGENCEMENT DE TRAITEMENT A PAVES MULTIPLES ET A PUCES MULTIPLES Domaine technique [0001] La présente description concerne la synchronisation des charges de travail de multiples pavés différents dans un processeur comprenant 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 communications parallèles synchrones massives (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 B17782 FR - 409133FR 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 B17782 FR - 409133FR 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 schéma "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 B17782 FR - 409133FR à 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 des 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] Dans un système interconnecté d'émetteurs et de récepteurs qui peuvent aussi avoir des tâches de calcul à réaliser entre des communications entre eux, il y a principalement trois manières pour que les émetteurs et les récepteurs puissent mettre en oeuvre cela. La première manière est l'approche à "rendez-vous". Selon cette approche, l'émetteur envoie un signal au récepteur lorsqu'il est prêt à envoyer des données et le récepteur envoie un signal à l'émetteur lorsqu'il est prêt à recevoir des données. Si l'émetteur a des données prêtes à envoyer mais le récepteur est en train de réaliser une autre tâche de calcul, alors soit l'émetteur doit attendre que le récepteur finisse sa tâche de calcul et signale qu'il est prêt à recevoir des B17782 FR - 409133FR données de l'émetteur, soit l'émetteur doit interrompre le récepteur. De manière similaire si le récepteur demande des données de l'émetteur pendant que l'émetteur est encore en train de réaliser une autre tâche de calcul, alors soit le récepteur doit attendre que l'émetteur finisse sa tâche de calcul et signale qu'il est prêt à envoyer des données au récepteur, soit le récepteur doit interrompre l'émetteur. L'approche à rendez-vous présente l'avantage qu'elle ne demande pas de files d'attente pour former la file des données émises, puisque la communication des données ne se déroule qu'une fois que l'émetteur et le récepteur sont tous les deux d'accord qu'ils sont prêts à communiquer. Toutefois, l'inconvénient est la latence : les émetteurs et les récepteurs vont passer beaucoup de temps à s'attendre, ou sinon vont devoir réaliser beaucoup d'interruptions, ce qui fait subir une pénalité de latence. La latence en final se manifeste sous forme d'un débit global réduit. [0009] La deuxième possibilité est l'approche à "boite aux lettres". Selon cette approche l'émetteur n'attend pas le récepteur avant d'envoyer ses données. Au lieu de cela, les données émises sont mises en tampon dans une file d'attente dans laquelle le récepteur lit les données lorsqu'il est prêt. Tant que les files d'attente sont suffisamment longues cela résout le problème de la latence de l'approche à rendez-vous. Toutefois, si les files d'attente sont remplies, le processus se bloque et en effet les communications retombent l'approche à rendez-vous. Pour réduire les chances de cela, les files d'attente doivent être conçues assez longues par rapport à la quantité de données supposée à transmettre. Mais les files d'attente entrainent une surface de silicium significative, en particulier dans une matrice de nombreuses combinaisons potentielles d'émetteurs et de récepteurs. Aussi, 6 B17782 FR - 409133FR en pratique les files d'attente ne peuvent pas être choisies infiniment longues. [0010] Le parallélisme synchrone massif (BSP) fournit une troisième manière de faire : chaque pavé réalise une certaine quantité définie de traitement de calcul dans une phase de calcul, puis tous les pavés se synchronisent entre eux (par une synchronisation à barrière) avant d'avancer vers une phase d'échange. Cela ne provoque pas autant de latence que l'approche à rendez-vous, et ne provoque pas autant de mise en file d'attente que l'approche à boite aux lettres. [0011] 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 même avoir tout cela : des entrées du 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 7 B17782 FR - 409133FR 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. [0012] 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é 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 [0013] La présente invention démarre d'une position consistant à choisir une approche parallèle synchrone massive (BSP) comme base pour les communications entre pavés. [0014] Selon la présente invention, on souhaite mettre en oeuvre un procédé BSP dans l'ensemble d'un système comprenant de multiples pavés de traitement agencés dans des domaines déterministes dans le temps différents, dans lequel les communications entre pavés dans le même domaine sont déterministes dans le temps, mais les communications entre pavés dans des domaines différents ne sont pas déterministes dans le temps. Dans de tels scénarios, les inventeurs ont identifié qu'il serait souhaitable de séparer le processus BSP en étages déterministes dans le temps et non déterministes dans le temps, de façon à empêcher que le déterminisme 8 B17782 FR - 409133FR temporel d'au moins certains des échanges déterministes dans le temps dans des domaines déterministes dans le temps soit contaminé par les échanges non déterministes dans le temps entre de tels domaines. [0015] Selon un aspect décrit ici, on prévoit un procédé d'actionnement d'un système comprenant de multiples pavés processeurs divisés en une pluralité de domaines, dans lequel dans chaque domaine les pavés sont connectés entre eux par l'intermédiaire d'une instance respective d'une interconnexion déterministe dans le temps, et entre les domaines les pavés sont connectés entre eux par l'intermédiaire d'une interconnexion non déterministe dans le temps ; le procédé comprenant : sur chaque pavé respectif d'un groupe participant de certains ou de la totalité des pavés dans l'ensemble des domaines, réaliser un étage de calcul dans lequel le pavé respectif réalise un ou plusieurs calculs respectifs sur le pavé, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre des pavés du groupe ; dans chaque domaine respectif desdits un ou plusieurs domaines, réaliser une synchronisation à barrière interne respective pour imposer que tous les pavés participants dans le domaine respectif aient achevé la phase de calcul avant que l'un quelconque des pavés participants dans le domaine respectif ne soit autorisé à procéder à une phase d'échange interne, établissant ainsi une référence de temps commune entre tous les pavés participants de manière interne dans chaque domaine individuel desdits un ou plusieurs domaines ; à la suite de la synchronisation à barrière interne respective, réaliser la phase d'échange interne dans chacun desdits un ou plusieurs domaines, dans laquelle chaque pavé participant dans le domaine respectif communique un ou plusieurs résultats de ses calculs respectifs vers et/ou à partir d'un ou 9 B17782 FR - 409133FR plusieurs autres pavés parmi les pavés participants dans le même domaine par l'intermédiaire de l'interconnexion déterministe dans le temps, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre desdits domaines ; réaliser une synchronisation à barrière externe pour imposer que tous les pavés participants desdits domaines aient achevé leur phase d'échange interne avant que l'un quelconque des pavés participants ne soit autorisé à procéder à une phase d'échange externe, établissant ainsi une référence de temps commune entre tous les pavés participants dans l'ensemble des domaines ; et à la suite de la synchronisation à barrière externe, réaliser la phase d'échange externe dans laquelle un ou plusieurs des pavés participants communiquent un ou plusieurs des résultats de calcul avec un autre des domaines par l'intermédiaire de l'interconnexion non déterministe dans le temps. [0016] C'est-à-dire que premièrement un ou plusieurs étages BSP internes sont exécutés d'où il résulte que des pavés se trouvant dans le même domaine déterministe dans le temps se synchronisent et échangent des données entre eux, mais ne sont pas obligés de se synchroniser avec des entités se trouvant dans des domaines déterministes différents, et n'échangent pas de données entre ces domaines. Ensuite, un étage BSP externe séparé est réalisé dans lequel tous les pavés se trouvant dans l'ensemble de la sphère non déterministe dans le temps plus large se synchronisent dans une "synchronisation globale" puis échangent des données entre les domaines. [0017] Une raison pour laquelle le déterminisme temporel est souhaitable est que cela permet des communications entre des pavés dans le même domaine sans subir l'emprise sur le silicium de files d'attente dans l'interconnexion respective. B17782 FR - 409133FR [0018] C'est pourquoi, dans des modes de réalisation, les communications via l'interconnexion non déterministe dans le temps sont mises en file d'attente, mais les communications entre pavés via l'interconnexion déterministe dans le temps ne sont pas mises en file d'attente. [0019] Dans des modes de réalisation, sur l'interconnexion déterministe dans le temps, la communication entre chaque paire de pavés émetteur et récepteur est réalisée par : émission d'un message à partir du pavé récepteur, et contrôle du pavé récepteur pour écouter une adresse du pavé émetteur à un intervalle de temps prédéterminé après l'émission par le pavé émetteur, dans lequel l'intervalle de temps prédéterminé est égal à un délai prédéterminé total entre le pavé émetteur et le pavé récepteur, l'intervalle de temps étant défini par un compilateur ayant une information prédéterminée sur le délai. [0020] Une autre raison pour faire une division entre les sphères déterministes dans le temps et non déterministes dans le temps est que le déterminisme temporel implique typiquement un support sans pertes au niveau physique, mais d'un autre côté il peut ne pas être pratique d'étendre cela sur une plage indéfinie de pavés. Par conséquent ici encore il serait souhaitable de permettre un déterminisme temporel dans certains domaines tout en évitant que les communications non déterministes dans le temps plus larges contaminent une phase d'échange déterministe dans le temps. [0021] C'est pourquoi dans des modes de réalisation, l'interconnexion déterministe dans le temps est sans pertes, alors que l'interconnexion non déterministe dans le temps est avec pertes au niveau d'une couche physique, d'une couche transport ou d'une couche réseau. 11 B17782 FR - 409133FR [0022] Une autre raison de faire une division entre la sphère déterministe dans le temps et la sphère non déterministe dans le temps et que, dans des modes de réalisation, une interconnexion déterministe dans le temps est prévue pour un échange de données interne sur une puce mais il est moins pratique de faire des communications entre puces qui soient déterministes dans le temps. [0023] C'est pourquoi dans des modes de réalisation, chacun des domaines peut être une puce respective différente, l'interconnexion déterministe dans le temps étant une interconnexion interne sur la puce et l'interconnexion non déterministe dans le temps étant une interconnexion externe entre les puces. [0024] Une pénalité plus grande va être subie dans des échanges de données entre des puces par rapport à des communications internes entre des pavés sur la même puce. La communication externe subit une latence plus longue et une plus grande incertitude par rapport à une communication interne, puisque elle est moins locale Des connexions entre puces ont tendance à avoir une densité de câblage inférieure en raison de limitations imposées par le boîtier, et par conséquent une bande passante de données disponible inférieure. Aussi, des fils atteignent de plus grandes distances et sont donc plus capacitifs, et sont plus vulnérables au bruit (qui peut provoquer des pertes et par conséquent le besoin de retransmissions au niveau de la couche physique). En outre, en plus d'une plus grande distance physique, les transferts de données entre puces traversent typiquement une plus grande quantité de logique comme de la logique SerDes (sérialiseurs-désérialiseurs) et des mécanismes de contrôle de flux, tout cela ajoutant des retards supplémentaires par rapport à des communications internes. 12 B17782 FR - 409133FR [0025] En séparant des étages BSP internes, sur une puce, et externes, hors des puces, on empêche que certains des échanges entre pavés sur la même puce soient "contaminés" par la latence d'un échange global, qui est une opération plus coûteuse en ce qui concerne la latence. Si chaque étage BSP au lieu de cela impliquait une synchronisation et un échange globaux cela pourrait amener un programme notablement plus lent. [0026] Les différentes puces peuvent être des puces élémentaires différentes dans le même boîtier de circuit intégré (IC), ou des puces élémentaires différentes dans des boîtiers IC différents, ou un mélange de cela. [0027] On notera aussi que plus généralement, il n'est pas exclu que la division entre sphère déterministe dans le temps et sphère non déterministe dans le temps soit faite ailleurs, autre part qu'à la frontière sur la puce/hors de la puce. Par exemple, une interconnexion déterministe dans le temps pourrait être prévue pour des échanges de données entre des sous-groupes de multiples puces, ou en variante des domaines déterministes dans le temps différents qui sont asynchrones entre eux pourraient être formés sur la même puce. [0028] C'est pourquoi, dans des modes de réalisation, chacun des domaines peut comprendre de multiples puces, l'interconnexion déterministe dans le temps étant une interconnexion externe inter-puce sans pertes et l'interconnexion non déterministe dans le temps étant une interconnexion externe avec pertes. [0029] Dans des modes de réalisation, le procédé peut comprendre la réalisation d'une série d'itérations répétitives, chacune comprenant une instance respective de l'étage de calcul, suivie d'une instance respective de la synchronisation à barrière interne, suivie d'une instance 13 B17782 FR - 409133FR respective de la phase d'échange interne, suivie d'une instance respective de la synchronisation à barrière externe, suivie d'une instance respective de la phase d'échange externe ; et chaque itération successive n'est pas autorisée à procéder avant que la synchronisation à barrière externe de l'itération immédiatement précédente ait été réalisée. [0030] Dans des modes de réalisation, le procédé peut comprendre la réalisation d'une séquence d'instances de la phase de calcul, chacune étant suivie d'une instance correspondante de la phase d'échange interne puis d'une instance correspondante de la synchronisation à barrière interne, et la synchronisation à barrière externe peut suivre la dernière phase de calcul dans ladite séquence. [0031] Dans des modes de réalisation, chacune desdites une ou plusieurs itérations peut comprendre une séquence respective de multiples instances de la phase de calcul, chacune étant suivie d'une instance correspondante de la phase d'échange interne puis d'une instance correspondante de la synchronisation à barrière interne, et la synchronisation à barrière externe respective peut suivre la dernière instance de la phase de calcul dans la séquence respective. [0032] Dans des modes de réalisation, chacune des synchro- nisations à barrière interne et externe peut être réalisée en exécutant une instruction de synchronisation comprenant un code opération et un opérande, l'opérande spécifiant un mode de l'instruction de synchronisation comme étant soit interne soit externe, et le code opération, lorsqu'il est exécuté, amenant de la logique matérielle se trouvant dans l'interconnexion déterministe dans le temps à coordonner le fonctionnement de la synchronisation à barrière interne lorsque l'opérande spécifie le mode interne, et amenant la logique matérielle se trouvant dans l'interconnexion non 14 B17782 FR - 409133FR déterministe dans le temps à coordonner le fonctionnement de la synchronisation à barrière externe lorsque l'opérande spécifie le mode externe. [0033] Dans des modes de réalisation, le procédé peut comprendre la sélection de l'une d'une pluralité de zones prédéfinies comme pavés participants, chaque zone comprenant un ensemble ou un sous-ensemble différent des multiples domaines. [0034] Dans des modes de réalisation, les zones sont hiérarchiques, avec au moins deux zones de niveau inférieur qui sont imbriquées dans au moins une zone de niveau supérieur. [0035] Dans des modes de réalisation, l'opérande de l'instruction de synchronisation peut spécifier laquelle d'une pluralité de variantes différentes possibles du mode externe de la synchronisation à barrière externe s'applique, chacune correspondant à une zone différente dans lesdites zones. [0036] Dans des modes de réalisation, les variantes du mode externe spécifient au moins à quel niveau hiérarchique de zone s'applique la synchronisation à barrière externe. [0037] Dans des modes de réalisation, la synchronisation et l'échange externes peuvent comprendre : premièrement réaliser une synchronisation externe d'un premier niveau puis un échange contraint dans une première zone d'un niveau inférieur des zones hiérarchiques ; Pt à la suite de la synchronisation et de l'échange du premier niveau, réaliser une synchronisation et un échange externe d'un deuxième niveau dans une deuxième zone d'un niveau supérieur desdites zones. [0038] Dans des modes de réalisation, l'une des zones hiérarchiques peut être constituée de tous les pavés se B17782 FR - 409133FR trouvant sur un même boîtier de circuit intégré, IC, mais pas au-delà ; et/ou l'une des zones hiérarchiques peut être constituée de tous les pavés se trouvant dans une même carte, mais pas au-delà ; et/ou l'une des zones hiérarchiques peut être constituée de tous les pavés se trouvant dans un même châssis, mais pas au-delà. [0039] Dans des modes de réalisation, le procédé peut comprendre l'exécution d'une instruction d'abstention sur l'un ou certains des pavés, le code opération de l'instruction d'abstention amenant le ou les pavés sur lesquels elle est exécutée à être exclu du groupe. [0040] Dans des modes de réalisation, dans la phase d'échange externe, un ou plusieurs des pavés participants peuvent aussi communiquer un ou plusieurs des résultats de calcul à un processeur hôte via l'interconnexion externe, le processeur hôte étant mis en oeuvre sur une puce de processeur hôte séparée. [0041] Dans des modes de réalisation, dans la phase de calcul, certains ou la totalité des pavés participants peuvent exécuter un lot de fils de travail de manière entrelacée, et la synchronisation à barrière interne peut imposer que tous les fils de travail dans tous les lots soient sortis. [0042] Dans des modes de réalisation, le procédé peut comprendre l'utilisation du système pour réaliser un algorithme d'intelligence artificielle dans lequel chaque noeud se trouvant dans un graphe comporte un ou plusieurs sommets d'entrée respectifs et un ou plusieurs sommets de sortie respectifs, les sommets d'entrée d'au moins certains des noeuds étant les sommets de sortie d'au moins certains autres des noeuds, chaque noeud comprenant une fonction respective reliant ses sommets de sortie a ses sommets d'entrée, chaque fonction respective étant paramétrée par un 16 B17782 FR - 409133FR 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 être utilisé pour modéliser un ou plusieurs noeuds respectifs des noeuds du graphe. [0043] Dans des modes de réalisation, les puces sont des puces accélératrices AI assistant le processeur hôte. [0044] Dans des variantes d'aspect de la présente description, la division primaire entre les différents niveaux de BSP pourrait être faite entre les sphères sur la puce et hors de la puce, plutôt que de diviser obligatoirement le processus BSP selon des sphères déterministes dans le temps et non déterministes dans le temps. il n'est pas exclu que les communications internes et externes puissent toutes les deux être rendues déterministes dans le temps, ou qu'aucune des deux ne le soit, ou que la division entre sphères déterministes dans le temps ne soit pas particulièrement dessinée en fonction du fait que des pavés soient sur la même puce ou sur des puces différentes. Dans de tels cas la séparation entre BSP interne, sur la puce, et externe, hors de la puce, sera encore avantageuse en ce qui concerne la latence décrite précédemment. [0045] Par conséquent, selon un autre aspect décrit ici, on prévoit un procédé d'actionnement d'un système comprenant de multiples puces de processeur connectées entre elles par l'intermédiaire d'une interconnexion externe, au moins l'une des puces comprenant une matrice de pavés processeurs connectés entre eux par une interconnexion interne ; le procédé comprenant : sur chaque pavé respectif d'un groupe participant de certains ou de la totalité des pavés s'étendant sur une ou plusieurs 17 B17782 FR - 409133FR des puces, réaliser un étage de calcul dans lequel le pavé respectif réalise un ou plusieurs calculs respectifs sur le pavé, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre des pavés du groupe ; sur chaque puce respective desdites une ou plusieurs puces, réaliser une synchronisation à barrière interne respective pour imposer que tous les pavés participants sur la puce respective aient achevé la phase de calcul avant que l'un quelconque des pavés participants sur la puce respective ne soit autorisé à procéder à une phase d'échange interne ; à la suite de la synchronisation à barrière interne respective, réaliser la phase d'échange interne sur chacune desdites une ou plusieurs puces, dans laquelle chaque pavé participant sur la puce respective communique un ou plusieurs résultats de ses calculs respectifs vers et/ou à partir d'un ou plusieurs autres pavés parmi les pavés participants sur la même puce par l'intermédiaire de l'interconnexion interne, mais ne communique des résultats de calcul ni vers ni à partir d'aucune des autres puces ; réaliser une synchronisation à barrière externe pour imposer que tous les pavés participants sur lesdites une ou plusieurs puces aient achevé leur phase d'échange interne avant que l'un quelconque des pavés du groupe ne soit autorisé procéder à une phase d'échange externe ; et à la suite de la synchronisation à barrière externe, réaliser une phase d'échange externe à l'intérieur d'un ensemble de puces participantes, dans laquelle un ou plusieurs des pavés du groupe communiquent un ou plusieurs des résultats de calcul avec une autre des puces participantes par l'intermédiaire de l'interconnexion externe. [0046] Selon un autre aspect décrit ici, on prévoit un produit programme informatique incorporé sur un support lisible par un ordinateur et comprenant du code agencé de 18 B17782 FR - 409133FR telle sorte que, lorsqu'il est exécuté sur les pavés, il réalise des opérations selon l'un quelconque des procédés décrits ici. [0047] Selon un autre aspect décrit ici, on prévoit un système comprenant de multiples pavés processeurs divisés en pluralité de domaines, dans lequel dans chaque domaine les pavés sont connectés entre eux via une instance respective d'une interconnexion déterministe dans le temps et entre les domaines les pavés sont connectés entre eux via une interconnexion non déterministe dans le temps ; le système étant programmé pour réaliser les opérations suivantes : sur chaque pavé respectif d'un groupe participant de certains ou de la totalité des pavés dans l'ensemble des domaines, réaliser un étage de calcul dans lequel le pavé respectif réalise un ou plusieurs calculs respectifs sur le pavé, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre des pavés du groupe ; dans chaque domaine respectif desdits un ou plusieurs domaines, réaliser une synchronisation à barrière interne respective pour imposer que tous les pavés participants dans le domaine respectif aient achevé la phase de calcul avant que l'un quelconque des pavés participants dans le domaine respectif ne soit autorisé à procéder à une phase d'échange interne, établissant ainsi une référence de temps commune entre tous les pavés participants de manière interne dans chaque domaine individuel desdits un ou plusieurs domaines ; à la suite de la synchronisation à barrière interne respective, réaliser la phase d'échange interne dans chacun desdits un ou plusieurs domaines, dans laquelle chaque pavé participant dans le domaine respectif communique un ou plusieurs résultats de ses calculs respectifs vers et/ou à partir d'un ou plusieurs autres pavés parmi les pavés participants dans le même domaine par l'intermédiaire de l'interconnexion 19 B17782 FR - 409133FR déterministe dans le temps, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre desdits domaines ; réaliser une synchronisation à barrière externe pour imposer crue tous les pavés participants desdits domaines aient achevé leur phase d'échange interne avant que l'un quelconque des pavés participants ne soit autorisé à procéder à une phase d'échange externe, établissant ainsi une référence de temps commune entre tous les pavés participants dans l'ensemble des domaines ; et à la suite de la synchronisation à barrière externe, réaliser la phase d'échange externe dans laquelle un ou plusieurs des pavés participants communiquent un ou plusieurs des résultats de calcul avec un autre des domaines par l'intermédiaire de l'interconnexion non déterministe dans le temps. Brève description des dessins [0048] 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 : [0049] [Fig. 1] la figure 1 est un schéma blocs d'une unité de traitement multi-fil ; [0050] [Fig. 2] la figure 2 est un schéma blocs d'une pluralité de contextes de fils ; [0051] [Fig. 3] la figure 3 illustre un schéma de créneaux temporels d'exécution entrelacés ; [0052] [Fig. 4] la figure 4 illustre un fil superviseur et une pluralité de fils de travail ; [0053] [Fig. 5] la figure 5 est un schéma blocs de logique pour agréger des états de sortie de multiples fils ; [0054] [Fig. 6] la figure 6 illustre schématiquement la synchronisation entre des fils de travail sur le même pavé ; B17782 FR - 409133FR [0055] [Fig. 7] la figure 7 est un schéma blocs d'une puce de processeur comprenant de multiples pavés ; [0056] [Fig. 8] la figure 8 est une illustration schématique d'un modèle de calcul parallèle synchrone massif (BSP) ; [0057] [Fig. 9] la figure 9 est une autre illustration schématique d'un modèle BSP ; [0058] [Fig. 10] la figure 10 est une illustration schématique de BSP entre des unités de traitement multi-fils ; [0059] [Fig. 11] la figure 11 est un schéma blocs d'un système d'interconnexion ; [0060] [Fig. 12] la figure 12 est une illustration schématique d'un système de multiples puces de processeurs interconnectées ; [0061] [Fig. 13] la figure 13 est une illustration schématique d'un schéma BSP multiniyeau ; [0062] [Fig. 14] la figure 14 est une autre illustration schématique d'un système de multiples puces de processeur ; [0063] [Fig. 15] la figure 15 est une illustration schématique d'un graphe utilisé dans un algorithme d'intelligence artificielle ; [0064] [Fig. 161 la figure 16 illustre schématiquement un agencement pour échanger des données entre des pavés ; [0065] [Fig. 17] la figure 17 illustre un schéma temporel d'échanges ; [0066] [Fig. 18] la figure 18 illustre un exemple de câblage pour une synchronisation entre puces ; et [0067] [Fig. 191 la figure 19 illustre schématiquement un mécanisme de contrôle de flux externe pour des échanges entre puces. 21 B17782 FR - 409133FR Description détaillée de modes de réalisation [0068] On va décrire dans la suite des composants d'un processeur ayant une architecture gui a été développée pour répondre à des problèmes apparaissant dans les calculs impliqués dans des applications d'intelligence artificielle. 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 a partir d'une application s'exécutant sur un ordinateur hôte, la charge de travail ayant généralement 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 il faut réaliser une prédiction ou une inférence en utilisant un modèle de connaissance appris préalablement). Un but de l'architecture présentée ici est de traiter ces très grands ensembles de données très efficacement. L'architecture de 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. [0069] 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é 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 22 B17782 FR - 409133FR 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). [0070] 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 au processeur, constituée d'un seul code opération et de zéro ou plus opérandes. [0071] 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 de travail a la forme d'un "codelet" respectif. Un "codelet" est un type particulier de fil d'exécution, parfois aussi appelé fil "atomique". Il a toutes les informations d'entrée dont il a besoin pour son exécution à partir du début 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 23 B17782 FR - 409133FR dans la mémoire après avoir été lancé. En outre, aucune autre partie du programme ne va utiliser de sorties (résultats) du fil avant Qu'il ne soit terminé (Qu'il se finisse). À moins Qu'il ne rencontre une erreur, il est assuré de terminer. On notera que certaines littératures définissent aussi un "codelet" comme étant sans état, c'est-à-dire que s'il s'exécute deux fois il ne pourra hériter d'aucune information provenant de sa première exécution, mais cette définition additionnelle n'est pas adoptée ici. On notera aussi que tous les fils de travail n'ont pas besoin d'être des codelets (atomiques), et dans des modes de réalisation certains ou la totalité des fils de travail peuvent au lieu de cela être capables de communiquer entre eux. [0072] 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 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. [0073] Le pipeline d'exécution 13 comprend un étage d'extraction 14, un étage de décodage 16, et un étage 24 B17782 FR - 409133FR 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. [0074] 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 représentés). On notera aussi que bien que le terme "banc de registres" soit parfois utilisé pour désigner un groupe de registres dans un espace d'adresse commun, cela ne devra pas nécessairement être le cas dans la présente description et chacun des contextes matériels 26 (chacun des ensembles de B17782 FR - 409133FR registres 26 représentant chaque contexte) peut plus généralement comprendre un ou plusieurs bancs de registres de la sorte. [0075] 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 CM_ 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é à 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 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. 26 B17782 FR - 409133FR [0076] 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. [0077] 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 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 27 B17782 FR - 409133FR 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. [0078] 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 a 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 a 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 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 28 B17782 FR - 409133FR 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 de la description ne soit pas limitée à une instruction par créneau temporel, par exemple dans des variantes 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. [0079] 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, Si, 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 schéma à tour de rôle pondéré, dans ce dernier cas la pondération pouvant être fixe ou adaptative. [0080] 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 29 B17782 FR - 409133FR 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 (multiplexé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. [0081] 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. [0082] 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 CM, 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 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 B17782 FR - 409133FR 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. [0083] 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, Si, S2... et à quel point dans le programme global. Optionnellement, le fil superviseur peut avoir d'autres responsabilités de "supervision" ou de coordination. Par exemple, le fil superviseur peut être responsable de la réalisation de synchronisations à barrière pour assurer un certain ordre d'exécution. Par exemple, dans le cas où un ou plusieurs deuxièmes fils dépendent de données à fournir par un ou plusieurs premiers fils exécutés sur le même module processeur 4, le superviseur peut réaliser une synchronisation à barrière pour assurer qu'aucun des deuxièmes fils ne commence avant que les premiers fils soient terminés. En plus ou à la place, le superviseur peut réaliser une synchronisation à barrière pour assurer qu'un ou plusieurs fils sur le module processeur 4 ne commencent pas avant qu'une certaine source externe de 31 B17782 FR - 409133FR 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 fils de travail. Par exemple, le fil superviseur responsable de communiquer des données multiples peut être module externe au 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. [0084] On notera bien sûr que quatre créneaux ne constituent qu'un exemple, et qu'en général, dans d'autres modes de réalisation il peut y avoir d'autres nombres, de sorte que s'il y a un maximum de M créneaux temporels 0 M-1 par tour, le 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. [0085] 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 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, aui est utilisé par le fil de travail lorsque le 32 B17782 FR - 409133FR 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. [0086] 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 WO_W3 dans l'exemple représenté en figure 4. Cela est obtenu par le fait que le fil superviseur exécute une instruction d'abandon, appelée "RUN" à titre d'exemple ici. Dans des modes de réalisation cette instruction prend deux opérandes : une adresse d'un fil de travail dans la mémoire d'instructions 12 et une adresse de certaines données pour ce fil de travail dans la mémoire de données 22 : RUN task addr, data addr [0087] 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 33 B17782 FR - 409133FR 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. [0088] 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 récurrent est possédé (temporairement) par le fil de travail concerné. [0089] 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 34 B17782 FR - 409133FR 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). [0090] Le fil superviseur SV est ainsi capable d'allouer des fils de travail différents, chacun réalisant une ou plusieurs tâches, à des créneaux différents parmi les créneaux temporels d'exécution entrelacés 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. [0091] 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)). [0092] 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 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 B17782 FR - 409133FR 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. [0093] 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. A 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"). [0094] 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 condition a été remplie) : EXIT exit state [0095] 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 36 B17782 FR - 409133FR 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_Wi 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. [0096] En outre, l'instruction EXIT s'est vue donner une autre fonction spéciale, à savoir celle d'amener l'état de sortie spécifié automatiquement avec les états de sortie travail qui sont exécutés module processeur 4 (par d'une pluralité d'autres fils de dans le même pipeline 13 du même exemple le même pavé). Ainsi une dans l'opérande de l'instruction EXIT à être agrégé (par de la logique matérielle dédiée) facilité implicite supplémentaire est incluse dans l'instruction pour mettre fin à un fil de travail. [0097] Un exemple de circuit pour réaliser cela est représenté en figure 5. Dans cet exemple, les états de sortie des fils individuels et l'état de sortie agrégé prennent 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). 37 B17782 FR - 409133FR 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. [0098] 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 à 0 si l'une quelconque des entrées (A, B) est à 0. À 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 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 38 B17782 FR - 409133FR registre de consensus local ($LC) 38 (il n'a pas besoin d'attendre une synchronisation sur le pavé pour faire cela). [0099] 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. [0100] 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 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 l'état de sortie agrégé localement. De préférence le 39 B17782 FR - 409133FR 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. [0101] 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 1. 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. A 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 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. [0102] Les états de sortie peuvent être utilisés pour représenter ce que le programmeur souhaite, mais un exemple B17782 FR - 409133FR 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é de paramètres associés au calcul respectif réalisé par le fil travail. [0103] 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 41 B17782 FR - 409133FR 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. [0104] 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 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. [0105] De préférence, le fil superviseur ne doit pas accéder à la valeur se trouvant dans le registre de consensus local ($LC) 38 avant que tous les fils de travail en question soient 42 B17782 FR - 409133FR 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. [0106] 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 agir seulement localement en relation avec seulement les fils de travail qui 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 de 43 B17782 FR - 409133FR multiples pavés ou même sur de multiples puces. SYNC mode // mode E (tue, chip, zone 1, zone 2] [0107] 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é). [0108] 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 à 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 44 B17782 FR - 409133FR 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. A 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é). [0109] 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 Ln+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). [0110] 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 processeur multi-pavé, chacun des pavés pouvant être agencé comme décrit précédemment en relation avec les figures 1 à 6. [0111] 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 B17782 FR - 409133FR 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 élémentaires empaquetées dans le même boîtier de circuit intégré, IC. L'interconnexion sur la puce peut aussi être appelée ici "tissu d'échange" 34 puisqu'il permet aux pavés 4 d'échanger des données entre eux. Chaque pavé 4 comprend 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, a 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. [0112] 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 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. De multiples instances de la puce 2 peuvent être connectées entre elles dans des cartes par des liaisons de puce à puce. Ainsi 46 B17782 FR - 409133FR 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. [0113] 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. [0114] Cela peut être obtenu en mettant en oeuvre un schéma d'échange parallèle synchrone massif (BSP), comme cela est illustré schématiquement dans les figures 8 et 9. [0115] 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 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 47 B17782 FR - 409133FR 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 aui lui est propre. [0116] 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 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, 48 B17782 FR - 409133FR 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). [0117] 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 hiérarchique de synchronisation et d'échange, comme cela va être décrit plus en détail ci-après. [0118] 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 49 B17782 FR - 409133FR agencement, certains pavés 4 sont autorisés à commencer à calculer 52 pendant que certains autres sont encore en train d'échanger. [0119] 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. [0120] 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. [0121] 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 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 le B17782 FR - 409133FR 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 v 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. [0122] 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 crue 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. [0123] 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. [0124] 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 51 B17782 FR - 409133FR 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. [0125] 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, 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 52 B17782 FR - 409133FR mise en pause en attente du signal d'accusé de réception de synchronisation (sync ack). A 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. [0126] 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. [0127] 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, 40ii,_ comme cela est représenté à titre d'exemple en figure 11. Cette logique d'agrégation inter-pavé 40 reçoit la valeur se trouvant dans le registre d'état de sortie local (registre de consensus local) $LC 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 tous les états de sortie agrégés localement. Ainsi la 53 B17782 FR - 409133FR 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. [0128] 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 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. 54 B17782 FR - 409133FR [0129] 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 SYNC réduit les multiples états de sortie individuels en un seul état combiné. [0130] 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 B17782 FR - 409133FR 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 de 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). [0131] 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 $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 56 B17782 FR - 409133FR 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. [0132] Comme cela a été mentionné précédemment, dans des 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). Cela peut faire une connexion entre des puces 2 sur le même boitier IC, différents boitiers IC sur la même carte, et/ou différents boitiers IC sur différentes cartes). En plus de fournir un conduit pour échanger des données entre des pavés 4 se trouvant sur des puces différentes, l'interconnexion 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. [0133] 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, 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- 57 B17782 FR - 409133FR 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. [0134] C'est-à-dire que, en réponse au code opération de l'instruction SYNC dont l'opérande spécifie une synchronisation externe, l'étage d'exécution 18 amène le niveau de synchronisation spécifié par l'opérande à être signalé à de la logique de synchronisation matérielle 76 dédiée dans interconnexion externe 72. En réponse à cela, la logique de synchronisation 76 dans l'interconnexion externe conduit processus de demande (sync reg) et d'accusé de réception (sync ack) de synchronisation à être réalisé seulement entre tous les pavés 4 externes, par exemple tous les pavés dans l'ensemble de toutes les puces 2 du système pour une synchronisation globale. C'est-à-dire que la logique de synchronisation 76 se trouvant dans l'interconnexion externe 72 va renvoyer le signal d'accusé de réception de synchronisation (sync ack) aux pavés 4 dans l'ensemble des puces 2 seulement une fois qu'une demande de synchronisation (sync reg) a été reçue de tous les pavés 4 provenant de ces puces. Tous les pavés 4 sur toutes ces puces 2 vont être automatiquement mis en pause jusqu'à ce que l'accusé de réception de synchronisation (sync ack) provenant de la logique de synchronisation externe 76 soit renvoyé. [0135] Ainsi, 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 58 B17782 FR - 409133FR 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. [0136] On notera que 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 2 de sorte que seulement des connexions câblées entre puces sont requises (les figures 11 et 12 sont schématiques). [0137] 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 76 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. Toutefois, de préférence le compilateur est agencé pour assurer que les 59 B17782 FR - 409133FR pavés se trouvant dans la même zone indiquent tous la même zone de synchronisation correcte à l'instant concerné. La logique de synchronisation peut aussi être agencée pour prendre d'autres mesures alternatives ou additionnelles dans l'éventualité d'incohérence dans les modes indiqués par les différentes instructions SYNC, par exemple signaler une exception au CPU externe, et/ou stopper l'exécution par un autre mécanisme. [0138] 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 _i ou zone 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, 9I5 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 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 4 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é. B17782 FR - 409133FR [0139] En réponse au fait que le code opération de l'instruction SYNC comporte une zone de synchronisation externe comme opérande, l'étage d'exécution 18 amène le niveau de synchronisation spécifié par l'opérande à être signalé à de la logique de synchronisation matérielle dédiée 76 dans l'interconnexion externe 72. En réponse à cela, la logique de synchronisation 76 se trouvant dans l'interconnexion externe conduit le processus de demande de synchronisation (sync req) et d'accusé de réception (sync ack) à être réalisé seulement entre les pavés 4 du groupe signalé. C'est-à-dire que la logique de synchronisation 76 se trouvant dans l'interconnexion externe 72 va renvoyer le signal d'accusé de réception de synchronisation (sync ack) aux pavés se trouvant dans la zone de synchronisation signalée seulement une fois qu'une demande de synchronisation (sync reg) a été reçue de tous les pavés 4 dans cette zone (mais ne va pas attendre d'autres pavés situés en dehors de cette zone si ce n'est pas une synchronisation globale). [0140] 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é au programmeur ou au compilateur, avec une densité de code minimale, pour sélectionner entre différentes dispositions de groupes synchrones en interne qui sont asynchrones entre eux. 61 B17782 FR - 409133FR [0141] 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 18. Comme cela est illustré, la logique de synchronisation externe 76 dans 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 qui suit. 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 de sortie de la manière qui suit. [0142] 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 req) é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 des cartes différentes, l'interface 8 peut par exemple comprendre une interface PCI et les quatre fils de 62 B17782 FR - 409133FR 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 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. [0143] 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 configuré 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 63 B17782 FR - 409133FR le maître d'un groupe et pas d'un autre groupe dont elle est membre, ou soit le maître de multiples groupes. [0144] Par exemple, à titre d'illustration, considérons l'exemple de scénario de la figure 18. Disons à titre d'exemple que le bloc de synchronisation 95 de la puce 2IV 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 req) 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 64 B17782 FR - 409133FR 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 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. [0145] 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). [0146] 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 B17782 FR - 409133FR 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 de toutes les chaînes. Et/ou, une ou plusieurs des puces 2 pourraient être connectées à une ressource externe comme le processeur hôte, une carte réseau, un dispositif de stockage ou un FPGA. [0147] 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 req), 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. 66 B17782 FR - 409133FR [0148] 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 référence à la figure 19. 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 une 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. [0149] 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 synchronisation pavé par pavé. de réalisation, on prévoit additionnel pour sélectionner Par conséquent, dans des modes un mécanisme alternatif OU les pavés 4 individuels gui participent à la synchronisation à barrière. [0150] 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 instructions d'abstention", ou instruction "SANS" 67 B17782 FR - 409133FR (synchronisation non participative à départ automatique). 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 [0151] 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 req) 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 reg provenant de ceux qui ont exécuté l'instruction SANS va toujours être valide. [0152] 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 68 B17782 FR - 409133FR 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. [0153] 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. À 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. [0154] L'opérande n barriers spécifie le 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 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. [0155] 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 69 B17782 FR - 409133FR 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é. [0156] 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 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 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. A 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 B17782 FR - 409133FR 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, svnc 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. [0157] 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 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 s'abstenant). Dans ce dernier cas, la sortie d'état de sortie local fourni par le ou les pavés 71 B17782 FR - 409133FR 4 qui 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, l'"é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 gui 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. [0158] 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é gui 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 gui 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 place une valeur par défaut est mémorisée dans le registre de consensus global $GC 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 72 B17782 FR - 409133FR 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. [0159] La figure 13 illustre un exemple de flux de programme impliquant à la fois une synchronisation interne (sur la puce) et externe (inter-puce). Comme cela est représenté, le flux comprend des échanges internes 50 (de données entre des pavés 4 sur la même puce 2) et des échanges externes 50' (de données entre des pavés 4 sur des puces 2 différentes. [0160] Comme cela est illustré en figure 13, selon la présente description on décrit de conserver les super-étapes BSP internes (cela comprenant les échanges internes 50 de données entre des pavés 4 sur la même puce 2) séparés de la synchronisation et de l'échange externes (comprenant les échanges externes 50' de données entre des pavés 4 sur des puces 2 différentes). [0161] Une raison pour conserver les BSP interne et externe séparés est que, dans des modes de réalisation, l'échange de données par l'intermédiaire de l'interconnexion interne (sur la puce) 34 peut être rendu déterministe dans le temps, comme on va le décrire plus en détail dans un instant en faisant référence aux figures 16 et 17 ; alors que l'échange de données par l'intermédiaire de l'interconnexion externe 72 peut être non déterministe dans le temps, par exemple en raison d'un canal physique à pertes qui va demander la retransmission de messages. En général, une interconnexion externe pourrait être rendue déterministe dans le temps mais il pourrait être difficile de le faire ou ce pourrait conférer trop peu d'avantages sur une interconnexion non déterministe, et ainsi pourrait ne pas être mis en oeuvre en pratique. 73 B17782 FR - 409133FR [0162] Dans de tels modes de réalisation, il serait souhaitable de conserver les communications internes déterministes dans le temps afin Qu'elles puissent être conduites sans avoir besoin de files d'attente dans l'interconnexion interne 34, puisque des files d'attente entraineraient une surface de silicium non souhaitable dans l'interconnexion 34. Toutefois, dans des modes de réalisation des communications externes peuvent ne pas être déterministes. Si chaque super-étape BSP était un échange global, alors le déterminisme temporel serait "contaminé" par les échanges externes non déterministes dans le temps. Cela provient du fait qu'une fois qu'un pavé ou un fil donné a réalisé un échange externe, le déterminisme temporel est perdu et ne peut pas être récupéré avant la synchronisation à barrière suivante. [0163] Comme on va le décrire dans un instant plus en détail, la communication sans files d'attente peut être obtenue par le compilateur en connaissant l'instant où chaque pavé 4 transmet ses données, et aussi en connaissant le délai inter-pavé sur une puce entre le pavé émetteur et le pavé récepteur. Étant donné cette connaissance prédéterminée, le compilateur peut alors programmer le pavé de réception pour écouter l'adresse du pavé émetteur à un instant connu spécifique après l'émission des données concernées par le pavé émetteur, c'est-à-dire l'instant d'émission plus le délai inter-pavé. Les caractéristiques temporelles de la transmission sont connues par le compilateur puisque le compilateur lui-même sélectionne à quel point dans chaque fil il faut inclure le ou les instructions d'envoi. En outre, le retard inter-pavé, pour des communications sur la puce, est une valeur fixe pouvant être connue pour une paire donnée de pavés 4 d'émission et de réception. Le compilateur peut connaître cela à partir d'une table de correspondance des délais inter-pavés pour 74 B17782 FR - 409133FR différentes combinaisons possibles de pavés émetteurs et récepteurs. Le compilateur peut ensuite inclure l'instruction de réception correspondante, pour écouter l'adresse de l'émetteur, au niveau du nombre de cycles correspondant après l'instruction d'émission. [0164] Une autre raison pour séparer le BSP en des étages internes et externes est qu'une synchronisation et un échancre globaux dans l'ensemble de multiples puces va être plus "coûteux" que seulement une synchronisation et un échange sur une puce, le coût total étant celui de la synchronisation interne susmentionnée plus _Les délais additionnels nécessaires pour agréger cela globalement. En outre, bien que dans des modes de réalisation la signalisation de la synchronisation elle-même n'ait pas besoin de contrôle de flux et soit par conséquent relativement rapide, la synchronisation externe synchronise dans un échange externe. Un échange externe subi une latence plus longue et une incertitude plus grande par rapport à un échange interne. [0165] Premièrement, il y a habituellement nettement moins de bande passante de données disponible entre puces que sur une puce. Cela provient du fait que la densité de câblage inter-puce est limitée par la densité des connexions des boîtiers (des billes ou des plots), qui est nettement inférieure à la densité de câblage disponible sur une puce. Ainsi la communication d'une quantité fixe de données entre puces va prendre nettement plus de temps que sur une puce, même si les délais de transmission sont similaires. Aussi, un échange externe est moins local : des fils vont plus loin et par conséquent sont plus capacitifs et plus vulnérables au bruit. Cela à son tour peut provoquer des pertes et par conséquent demander un mécanisme de contrôle de flux qui assure une retransmission au niveau de la couche physique, conduisant à un débit global réduit (et à une perte de B17782 FR - 409133FR déterminisme temporel - voir ci-après). En outre, en plus d'une plus grande distance physique, la signalisation et les données transmises entre puces doivent typiquement traverser une plus grande quantité de logique comme des SerDes (sérialiseurs dé-sérialiseurs) et des mécanismes de contrôle de flux, tout cela ajoutant un retard supplémentaire par rapport à des communications internes. Par exemple, les inventeurs ont identifié qu'en utilisant des technologies conventionnelles, on peut s'attendre à ce qu'un processus de synchronisation à barrière externe prenne de l'ordre de dix fois plus de temps qu'une synchronisation interne, et puisse compter pour 5-10 1 du temps d'exécution du programme. En utilisant le mécanisme de synchronisation matériel décrit ici, cela peut être réduit à de l'ordre de trois fois, mais reste encore plus lent qu'une synchronisation interne. En outre, l'échange de données de manière externe va, par exemple en raison de facteurs comme les pertes et les retransmissions au niveau de la couche physique en raison du bruit, et/ou la sérialisation et la dé-sérialisation entre puces. [0166] Dans d'autres variantes, l'interconnexion entre puces peut être sans pertes au niveau de la couche physique et/ou la couche liaison, mais est effectivement avec pertes au niveau de la couche réseau supérieure en raison des encombrements des flux de couche réseau entre différentes sources et destinations qui provoquent le débordement de files d'attente et des pertes de paquets. Cela est la manière avec laquelle Ethernet travaille et il est envisagé qu'une interconnexion alternative non déterministe dans le temps puisse utiliser Ethernet. On notera aussi que dans tout processus d'échange, qu'il soit sans pertes ou avec pertes, il peut effectivement v avoir des erreurs non récupérables (par exemple en raison de rayonnement alpha) qui provoquent un échec total de l'échange et qui ne peuvent être récupérées 76 B17782 FR - 409133FR par aucun mécanisme matériel (par exemple la couche liaison). A la fois dans les cas déterministes dans le temps et dans les cas non déterministes dans le temps, dans des modes de réalisation le système peut détecter mais ne pas corriger de telles erreurs. Une fois détectée, l'erreur peut être signalée à l'hôte, dont la stratégie peut être de nécessiter que l'état de l'application BSP soit vérifié périodiquement dans l'éventualité d'une telle erreur matérielle fatale, et de ramener l'état de l'application au dernier point de contrôle. Par ce mécanisme, même des mécanismes à pertes utilisés pour effectuer des échanges de données peuvent se voir donner une apparence sans pertes vue de l'utilisateur, avec un certain coût sur les performances. [0167] Pour toutes les raisons susmentionnées ou d'autres, il serait souhaitable de séparer le processus BSP en étages déterministes dans le temps et non déterministes dans le temps, de façon à empêcher que le déterminisme temporel d'au moins certain des échanges déterministes dans le temps dans des domaines déterministes dans le temps soient contaminés par les échanges non déterministes dans le temps entre de tels domaines. [0168] En conséquence, le programme peut être 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 77 B17782 FR - 409133FR de calcul peut être incluse entre l'échange interne (iii) et la barrière externe (iv). [0169] Cette séquence globale est imposée par le programme (par exemple en étant générée de la sorte par le compilateur). Dans des modes de réalisation le programme est programmé pour agir de cette manière au moyen de l'instruction SYNC décrite précédemment. La synchronisation et l'échange internes ne s'étendent à aucun pavé ou autre entité sur une autre puce 2. La séquence (i)-(v) (avec la phase de calcul optionnelle susmentionnée entre iii et 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. C'est-à-dire que de multiples instances (i)-(iii) (en retenant cet ordre), c'est-à-dire de multiples super-étapes BSP internes, peuvent être mises en oeuvre avant (iv)-(v), c'est-à-dire la synchronisation et l'échange externes. On notera aussi que l'un quelconque des pavés 4 peut être en train de réaliser sa propre instance de la synchronisation et de l'échange internes (ii)-(iii) en parallèle avec les autres pavés 4. [0170] Ainsi pour chaque cycle BSP global (i)-(v), il est assuré qu'il y a au moins une partie du cycle (ii)-(iii) dans laquelle la synchronisation est contrainte à être effectuée seulement de manière interne, c'est-à-dire sur la puce. [0171] On notera que pendant un échange externe 50, les communications ne sont pas limitées à être seulement externes. Certains pavés peuvent juste effectuer des échanges internes, certains peuvent seulement effectuer des échanges externes, et certains peuvent effectuer un mélange. Toutefois, en raison de la perte de déterminisme temporel Qui survient dans l'interconnexion externe 72 dans certains modes de 78 B17782 FR - 409133FR réalisation, dans de tels mode de réalisation, une fois qu'un pavé a réalisé une communication externe, il ne peut pas réaliser de nouveau une communication interne avant la synchronisation suivante (voir ci-après une explication du mécanisme préféré de communication sur la puce qui repose sur une connaissance prédéterminée de caractéristiques temporelles de messages et de délais inter-pavés. [0172] 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. [0173] On notera aussi que comme cela est représenté en figure 13, il est en général possible que l'un quelconque ou tous les pavés ait une phase de calcul 52 nulle ou une phase d'échange 50 nulle dans toute super-étape BSP donnée. [0174] Dans des modes de réalisation, les différents niveaux de zones de synchronisation 91, 92 peuvent être utilisés pour contraindre l'étendue de certaines des opérations de synchronisation et d'échange externes à seulement un sous-groupe des puces 2 dans le système, et limiter le nombre de fois où la pénalité d'une synchronisation et d'un échange global complet est nécessaire. C'est-à-dire que le cycle global peut comprendre : (i) une première phase de calcul, puis (ii) une synchronisation à barrière interne, puis (iii) une phase d'échange interne, puis (iv) une synchronisation à barrière externe 80 dans les pavés de seulement une première zone de synchronisation de niveau inférieur 91 ; puis (v) une phase d'échange externe entre seulement les puces de la première zone de synchronisation 91 ; puis (vi) une synchronisation à barrière externe dans l'ensemble d'une deuxième zone de synchronisation de niveau supérieur 92 ; 79 B17782 FR - 409133FR puis (vii) une phase d'échange externe entre les puces de la zone de synchronisation de deuxième niveau 92. La barrière externe vers la phase d'échange du deuxième niveau est imposée après la phase d'échange externe du premier niveau, de sorte que le programme ne procède à l'échange externe du deuxième niveau qu'après la phase d'échange du premier niveau. Ce comportement peut être programmé en utilisant l'instruction SYNC qualifiée par des niveaux différents du mode externe dans son opérande. [0175] Dans des modes de réalisation, le niveau hiérarchique de zone de synchronisation le plus élevé englobe tous les pavés 4 sur toutes les puces 2 dans la matrice 6, c'est-à-dire qu'il est utilisé pour réaliser une synchronisation globale. Lorsque de multiples zones de niveau inférieur sont utilisées, le BSP peut être imposé de manière interne entre les groupes de pavés 4 sur la ou les puces 2 dans chaque zone, mais chaque zone peut fonctionner de manière asynchrone par rapport à une autre jusqu'à ce qu'une synchronisation globale soit exécutée. [0176] Note en ce qui concerne la synchronisation et l'échange externes de niveau inférieur (iv)-(v), l'une quelconque des zones de niveau inférieur 91A, 9IB peut être en train d'effectuer sa propre instance d'échange externe de niveau inférieur en parallèle avec la ou les autres zones de niveau inférieur. Et/ou, dans certains cas de multiples instances de (i)-(v) peuvent être mises en oeuvre avant (vi)- (vii), c'est-à-dire qu'il peut y avoir de multiples instances de la super-étape BSP externe de niveau inférieur avant la synchronisation et l'échange externes. En outre, le schéma pourrait être étendu à trois ou plus niveaux hiérarchiques de zone de synchronisation. B17782 FR - 409133FR [0177] La suite décrit un exemple de mécanisme pour communiquer sur une puce (échange interne) sans avoir besoin de files d'attente. On fait référence à la figure 16. [0178] Sur chaque puce 2, la puce 2 comprend une horloge respective qui commande le fonctionnement temporel de l'activité de la puce. L'horloge est connectée à tous les circuits et composants de la puce. La puce 2 comprend aussi l'interconnexion interne déterministe dans le temps ou "tissu de commutation" 34 auquel tous les pavés et toutes les connexions sont connectés par des ensembles de fils connexion. Dans des modes de réalisation, l'interconnexion 34 peut être sans état, en ce qu'elle ne comporte pas d'état lisible par logiciel. Chaque ensemble de fils de connexion est fixé d'extrémité à extrémité. Les fils sont en pipeline. Dans ce mode de réalisation, un ensemble comprend trente-deux fils. Chaque ensemble peut transporter un paquet constitué d'une ou plusieurs données de 32 bits, une donnée étant transférée à chaque cycle d'horloge. On notera ici que le mot "paquet" représente un ensemble de bits représentant une donnée (parfois appelé ici élément de données), peut-être avec un ou plusieurs bits valides. Les "paquets" ne comportent pas d'en-tête ni aucune forme d'identifiant de destination (qui permet à un destinataire visé d'être identifié de manière unique), ni ne comportent d'informations de fin de paquet. À la place, chacun représente une valeur numérique d'entrée ou de sortie d'un pavé. Chaque pavé comporte sa propre mémoire locale (décrite dans la suite). La puce ne comporte pas de mémoire partagée. Le tissu de commutation constitue seulement un ensemble croisé de fils de connexion et aussi ne contient aucun état. L'échange de données entre pavés sur la même puce est effectué de manière déterministe dans le temps comme cela a été décrit ici. Un fil de connexion en pipeline comprend une série d'éléments de stockage temporaires, par exemple des 81 B17782 FR - 409133FR verrous ou des bascules qui maintiennent une donnée pendant un cycle d'horloge avant de la libérer vers l'élément de stockage suivant. Le temps de parcours le long du fil est déterminé par ces éléments de stockage temporaires, chacun utilisant le temps d'un cycle d'horloge dans un chemin entre deux points quelconques. [0179] Chaque pavé 4 indique son état de synchronisation au contrôleur de synchronisation 36 dans l'interconnexion 34. Une fois qu'il a été établi que chaque pavé 4 est prêt à envoyer des données, le processus de synchronisation 30 amène le système à rentrer dans la phase d'échange 50. On notera que chaque pavé subit l'accusé de réception de synchronisation avec un délai différent mais connu. Le programme superviseur insère des cycles additionnels de retard comme cela est nécessaire pour que chaque pavé commence sa phase d'échange exactement sur le même cycle. Dans cette phase d'échange, des valeurs de données se déplacent entre pavés (en fait entre les mémoires de pavés dans un mouvement de données de mémoire à mémoire). Dans la phase d'échange, il n'y a pas de calculs et par conséquent pas de danger de simultanéité (ou au moins il n'y a pas de calculs qui reposent sur des données qui restent à recevoir d'un autre pavé 4). Dans la phase d'échange, chaque donnée se déplace le long des fils de connexion sur lesquels elle sort d'un pavé entre un pavé émetteur et son pavé récepteur. À chaque cycle d'horloge, la donnée se déplace d'une certaine distance sur son chemin (d'élément à élément de stockage), en pipeline. Lorsqu'une donnée est émise par un pavé, elle n'est pas émise avec un en-tête identifiant un pavé récepteur. À la place, le pavé récepteur sait qu'il va attendre une donnée provenant d'un certain pavé émetteur à un certain instant. Ainsi, l'ordinateur décrit déterministe dans le temps. r, -L est 82 B17782 FR - 409133FR [0180] Chaque pavé 4 exécute une portion du programme qui lui a été allouée par le programmeur ou par un exercice de compilateur, dans laquelle le programmeur ou la fonction du compilateur a connaissance de ce qui va être émis par un pavé particulier à un certain instant et de ce qui doit être reçu par un pavé récepteur à un certain instant. Afin d'atteindre cela, des instructions SEND sont incluses dans les programmes locaux exécutés par le processeur sur chaque pavé, le temps d'exécution de l'instruction SEND étant prédéterminé par rapport au déroulement temporel d'autres instructions qui sont exécutées sur d'autres pavés dans l'ordinateur. [0181] Chaque pavé 4 est associé à son propre multiplexeur 210. Chaque multiplexeur comporte au moins autant d'entrées qu'il y a de pavés 4 sur la puce, chaque entrée étant connectée au tissu de commutation 34. Les fils croisés du tissu de commutation sont connectés à un ensemble de fils de connexion de sortie de données 218 provenant de chaque pavé (un bus d'échange de diffusion). Pour faciliter l'illustration, tous les fils croisés ne sont pas représentés en figure 16. Un ensemble de fils croisés est référencé 140x pour indiquer qu'il est l'un d'un certain nombre d'ensembles de fils croisés. [0182] Lorsque le multiplexeur 210 est commuté sur l'entrée référencée 220x, cela va la connecter aux fils croisés 140x et ainsi au bus de données 218T du pavé émetteur (d'envoi) 4T. Si le multiplexeur est contrôlé pour commuter sur cette entrée à un certain instant, alors la données reçue sur le bus de données 230 qui est connecté au fil croisé 140x va apparaître à la sortie du multiplexeur 210 à un certain instant. Elle va arriver au niveau du pavé récepteur 4R après un certain délai, le délai dépendant de la distance entre le multiplexeur 210 et le pavé récepteur 4R. Puisque les multiplexeurs tendent à être agencés près du tissu de 83 B17782 FR - 409133FR commutation, le retard entre le pavé et le multiplexeur peut varier en fonction de l'emplacement du pavé récepteur 4R. [0183] Pour mettre en oeuvre la commutation, les programmes locaux exécutés sur les pavés 4 comprennent des instructions de commande de commutateur (PUTi) qui provoquent l'émission d'un signal de commande de multiplexeur 214 pour contrôler le multiplexeur 210 associé à ce pavé pour commuter son entrée un certain temps avant l'instant où une donnée particulière est attendue pour être reçue au niveau du pavé. Dans la phase d'échange, des multiplexeurs sont commutés et des paquets (data) sont échangés entre pavés en utilisant le tissu de commutation. On peut voir d'après cette explication que l'interconnexion interne 34 n'a pas d'état et n'a besoin d'aucune file d'attente - le mouvement de chaque donnée est prédéterminé par le fil croisé particulier auquel l'entrée de chaque multiplexeur est connectée. [0184] Dans la phase d'échange, tous les pavés 4 sont autorisés à communiquer avec tous les autres pavés dans son groupe de synchronisation. Chaque pavé 4 a le contrôle de son propre et unique multiplexeur d'entrée 210. Le trafic entrant peut ainsi être sélectionné à partir de n'importe quel autre pavé dans la puce 2 (ou à partir de l'une des liaisons de connexions externes dans un échange externe). Il est aussi possible qu'un multiplexeur 210 soit réglé pour recevoir une entrée nulle, c'est-à-dire aucune entrée, dans n'importe quelle phase d'échange donnée. [0185] Chaque pavé 4 comporte trois interfaces une interface "exin" 224 qui passe des données du tissu de commutation 34 au pavé 4 ; une interface "exout" 226 qui passe des données à partir du pavé au tissu de commutation sur le bus d'échange à diffusion 218 ; et une interface "exmux" 228 84 B17782 FR - 409133FR qui passe le signal de commandé de multiplexeur 214 (muxselect) du pavé 4 à son multiplexeur 210. [0186] Afin d'assurer que chaque pavé individuel exécute des instructions SEND et des instructions de commande de commutateurs à des instants appropriés pour émettre et recevoir les données correctes, des exigences de planification d'échanges doivent être satisfaites par le programmeur ou le compilateur qui alloue des programmes individuels aux pavés individuels dans l'ordinateur. Cette fonction est réalisée par un ordonnanceur d'échange, préférence au moment de la compilation, qui a besoin de connaitre les paramètres suivants. [0187] Paramètre I : le délai d'accusé de réception SYNC relatif de chaque pavé, RSAK (TID pavé émetteur, TID pavé récepteur). C'est une fonction de l'identifiant ID de pavé (TID) des pavés émetteur et récepteur, qui est maintenu dans le registre TILE ID. Il est exprimé en nombre de cycles, toujours supérieur ou égal à 0 indiquant quand chaque pavé reçoit le signal d'accusé de réception de synchronisation provenant du contrôleur de synchronisation 36 par rapport à tous les autres pavés. Cela peut être calculé à partir de l'ID de pavé, en notant que l'ID de pavé indique l'emplacement particulier sur la puce de ce pavé, et par conséquent reflète les distances physiques. Dit d'une autre façon, les délais d'accusé de réception de synchronisation sont égalisés. Si le pavé d'émission 4T est plus proche du contrôleur de synchronisation 36 et le pavé récepteur 4R est plus loin, la conséquence est que le délai d'accusé de réception de synchronisation va être plus court vers le pavé émetteur 4T que pour le pavé récepteur 4R, et vice versa. Une valeur particulière va être associée à chaque pavé pour le délai d'accusé de réception de synchronisation. Ces valeurs peuvent être maintenues par exemple dans une table de délais, ou B17782 FR - 409133FR peuvent être calculées au vol à chaque fois sur la base de l'ID de pavé. [0188] Paramètre II : le délai de boucle de commande de multiplexeur d'échange, MXP (TID du pavé récepteur). C'est le nombre de cycles entre l'émission d'une instruction (PUTi MUXptr) qui modifie une sélection de multiplexeur d'entrée de pavé et le point le plus en avance où le même pavé pourrait émettre une instruction de chargement (hypothétique) pour échanger des données stockées en mémoire comme résultat de la nouvelle sélection de multiplexeur. Cela comprend le délai pour que signal de commande passe de l'interface exmux 228R du pavé destinataire 4R à son multiplexeur 210R et la longueur de la ligne entre la sortie du multiplexeur et l'interface exin d'entrée de données 224. [0189] Paramètre III : le délai d'échange de pavé à pavé, TT (TID de pavé émetteur, TID de pavé récepteur). C'est le nombre de cycles entre une instruction SEND qui est émise sur un pavé et le point le plus en avance où le pavé récepteur pourrait émettre une instruction de chargement (hypothétique) pointant sur la valeur envoyée dans sa propre mémoire. Cela peut être calculé à partir des TID des pavés émetteur et récepteur, soit en accédant à une table, soit en calculant au vol. Ce délai comprend le temps pris par des données pour se déplacer du pavé d'émission 4T à partir de son interface exout 226T jusqu'au tissu de commutation 14 en suivant son bus d'échange 218T et ensuite via le multiplexeur d'entrée 210R au niveau du pavé récepteur 4R jusqu'à l'interface exin 224R du pavé récepteur. [0190] Paramètre IV : le délai de mise à jour de pointeur de mémoire de trafic d'échange, MMP (). C'est le nombre de cycles entre l'émission d'une instruction (PUTi MEMptr) qui modifie un pointeur de mémoire de trafic d'entrée d'échange 232 d'un 86 B17782 FR - 409133FR pavé et le point le plus en avance où ce même pavé pourrait émettre une instruction de chargement (hypothétique) pour des données d'échange stockées en mémoire comme résultat du nouveau pointeur. C'est un petit nombre fixe de cycles. Le pointeur mémoire 232 se comporte comme un pointeur dans la mémoire de données 202 et indique où des données entrantes provenant de l'interface exin 224 vont être mémorisées. [0191] Ensemble ces paramètres donnent le délai inter-pavé total entre l'émission d'une données à partir du pavé émetteur 4T et la réception de cette donnée par le pavé récepteur 4R. Le mécanisme d'échange particulier Pt les paramètres susmentionnés sont donnés seulement à titre d'exemple. Des mécanismes d'échange différents peuvent différer dans la composition exacte du délai, mais tant que l'échange est maintenu déterministe dans le temps, il peut être connu par le programmeur ou le compilateur et ainsi un échange sans files d'attente est possible. [0192] La figure 17 représente l'exemple de déroulement temporel des échanges plus en détail. Sur le côté gauche sont représentés les cycles d'horloge de la puce allant de 0 à 30. L'action sur le pavé émetteur 4T survient entre les cycles d'horloge 0 et 9, commençant par l'émission d'une instruction d'envoi (SEND E0). Dans les cycles d'horloge 10 à 24, la donnée chemine en pipeline à travers le tissu de commutation 34. [0193] En regardant le pavé récepteur 4R dans le cycle d'horloge IPU 11, on voit qu'une instruction PUTi est exécutée et change la sélection du multiplexeur d'entrée du pavé. Dans le cycle 18, l'instruction de pointeur mémoire est exécutée autorisant une instruction de chargement dans le cycle d'horloge 25. Sur le pavé émetteur 4T, des cycles 1 à 9 sont un délai de pavé interne entre l'émission d'une instruction 87 B17782 FR - 409133FR SEND et la manifestation de ces données sur l'interface exout. El, E2 représentent une donnée provenant d'une instruction SEND précédente. Dans le tissu d'échanges 34, les cycles d'horloge 10 à 24 sont notés "échange". Dans chacun de ces cycles, une donnée se déplace de "un pas" dans le pipeline (entre des stockages temporaires). Les cycles 25 à 29 sur le pavé récepteur 4R représentent le délai entre la réception d'une données au niveau de l'interface exin et 1P codage de celle-ci en mémoire. [0194] En termes simples, si le processeur du pavé récepteur 4R veut agir sur une donnée qui était la sortie d'un processus sur le pavé émetteur 4T, alors le pavé émetteur 4T doit exécuter une instruction SEND envoyée à un certain instant (par exemple le cycle d'horloge 0 en figure 17), et le pavé récepteur 4R doit exécuter une instruction de commande de commutateur PUTi EXCH MXptr (comme dans le cycle d'horloge 11) avec un certain délai par rapport à l'exécution de l'instruction SEND sur le pavé émetteur. Cela va garantir que les données arrivent au niveau du pavé récepteur à temps pour être chargées pour servir dans un codelet en cours d'exécution au niveau du pavé récepteur 4R. [0195] On notera que le processus de réception au niveau du pavé récepteur n'a pas besoin d'impliquer la mise en place du pointeur mémoire comme avec l'instruction PUTi MEMptr. Au lieu de cela, le pointeur mémoire 232 s'incrémente automatiquement après la réception de chaque donnée au niveau de l'interface exin 224. Les données reçues sont ensuite juste chargées dans le prochain emplacement mémoire disponible. Toutefois, la possibilité de changer le pointeur mémoire permet au pavé récepteur d'altérer l'emplacement mémoire où la donnée est écrite. Tout cela peut être déterminé par le compilateur ou le programmeur Qui écrit les programmes individuels dans les pavés individuels afin qu'ils communiquent correctement. Cela 88 B17782 FR - 409133FR amène les caractéristiques temporelles d'un échange interne (l'échange inter-pavé sur une puce) a être complètement déterministes dans le temps. Ce déterminisme temporel peut être utilisé par l'ordonnanceur d'échange pour optimiser très fortement des séquences d'échange. [0196] La figure 19 illustre un exemple de mécanisme pour communiquer hors-puce (échange externe). Ce mécanisme est non déterministe dans le temps. Le mécanisme est mis en oeuvre dans de la logique matérielle dédiée dans l'interconnexion externe 72. Des données sont envoyées sur l'interconnexion externe 72 sous forme de paquets. À la différence des paquets envoyés sur l'interconnexion interne, ces paquets ont des entêtes : puisque l'ordre de la transmission peut changer, ils ont besoin que l'adresse de destination soit présente dans l'en-tête du paquet. Aussi, dans des modes de réalisation l'interconnexion externe 72 prend la forme d'un réseau et par conséquent nécessite des informations additionnelles dans un but d'acheminement. [0197] Au niveau de la couche physique le mécanisme d'interconnexion est avec pertes, mais au niveau de la couche de transaction le mécanisme est sans pertes en raison de l'architecture de la couche liaison : si un paquet ne fournit pas d'accusé de réception, il va être réémis automatiquement par le matériel se trouvant dans l'interconnexion 72. La possibilité de pertes et de réémission au niveau de la couche de liaison de données signifie toutefois que la délivrance de paquets de données sur l'interconnexion externe n'est pas déterministe dans le temps. En outre, tous les paquets d'un échange donné peuvent arriver ensemble ou séparés dans le temps, et dans n'importe quel ordre, de sorte que l'interconnexion externe nécessite un contrôle de flux et l'utilisation de files d'attente. En outre, l'interconnexion peut utiliser une technologie de récupération de données 89 B17782 FR - 409133FR d'horloge (CDR) pour inférer une horloge à partir d'un flux de données reçues comportant suffisamment de transitions de signal de données pour maintenir un verrouillage binaire. Cette horloge inférée va avoir une relation de phase inconnue avec l'horloge d'émission et par conséquent représente une source additionnelle de non déterminisme. [0198] Comme cela est illustré, l'interconnexion externe 72 comprend un bloc d'échange externe (XE) 78. Le compilateur nomme l'un des pavés 4 pour envoyer une demande d'échange externe (XREQ) au bloc d'échange 78 (étape SI). La demande XREQ est un message comprenant un ou plusieurs paquets de commande, indiquant lequel des pavés 4 a des paquets de données (contenu) à envoyer à un autre pavé ou à d'autres pavés 4 sur une autre puce 2. Cela est illustré schématiquement en figure 19 par les coches et les croix : à titre d'exemple de scénario, ceux qui sont marqués par une coche ont des paquets de données à envoyer à l'extérieur et ceux marqués par une croix n'en ont pas. À l'étape S2, le bloc d'échange 78 envoie un paquet de commande de mise en marche d'échange (XON) à un premier des pavés 4 avec des données à envoyer à l'extérieur. Cela amène le premier pavé à démarrer l'envoi de ses paquets vers la destination concernée via l'interconnexion externe 78 (étape S3). Si à un instant quelconque, le XE est incapable de continuer l'envoi de paquets vers l'interconnexion (par exemple en raison d'une perte de paquets précédente et d'une retransmission dans l'interconnexion, ou en raison d'une surréservation de l'interconnexion externe par de nombreux autres XE et pavés) le XE va envoyer un arrêt d'échange (XOFF) à ce pavé avant que la file d'attente du XE déborde. Une fois que l'encombrement est effacé et que le XE a de nouveau un espace suffisant dans sa file d'attente il va envoyer un XON au pavé lui permettant de continuer la transmission de son contenu. B17782 FR - 409133FR Une fois que ce pavé a envoyé son dernier paquet de données, alors au niveau de l'étape S4 le bloc d'échange 78 envoie un paquet de commande d'arrêt d'échange (XOFF) à ce pavé, puis à l'étape S5 envoie un autre XON au pavé 4 suivant avec des paquets de données à envoyer, et ainsi de suite. La signalisation des XON et XOFF est mise en oeuvre sous forme d'un mécanisme matériel dans de la logique matérielle dédiée sous la forme du bloc d'échange externe 78. [0199] On notera que cela n'est qu'un exemple de mécanisme de contrôle de flux pour communiquer en externe entre des puces. D'autres mécanismes appropriés seront familiers à l'homme de l'art. Aussi, la possibilité d'une interconnexion externe déterministe dans le temps et/ou sans files d'attente n'est pas exclue. [0200] La figure 15 illustre un exemple d'application de l'architecture de processeur décrite ici, à savoir une application d'intelligence artificielle. [0201] 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 91 B17782 FR - 409133FR dans son ensemble. Parfois un noeud donné peut même avoir tout cela : des entrées du graphe, des sorties du graphe et des connexions à d'autres noeuds. Chaque arrête 104 communique une valeur ou plus souvent un tenseur (matrice à n dimensions), cela formant les entrées et les sorties fournies aux noeuds et obtenues à partir des noeuds 102 sur leurs arêtes d'entrée et de sortie respectivement. [0202] 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. [0203] 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 92 B17782 FR - 409133FR paramètres pour le même noeud 102, et la condition peut être satisfaite si la valeur de la métrique combinée reste inférieure à un seuil spécifié, mais sinon la condition n'est pas satisfaite si la valeur de la métrique combinée est au-delà du seuil (ou vice et versa en fonction de la définition de la métrique). Quelle que soit la condition, cela donne une mesure indiquant si l'erreur dans le ou les paramètres du 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. [0204] 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 près 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. [0205] 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 93 B17782 FR - 409133FR point de données, l'algorithme peut ajuster les paramètres de telle sorte que la sortie concorde plus précisément avec la sortie connue pour l'entrée donnée. Dans l'étage de prédiction qui suit, le graphe peut alors être utilisé pour mapper une interrogation d'entrée vers une sortie prédite approximative (ou vice et versa si on réalise une inférence). D'autres approches sont aussi possibles. Par exemple, dans une approche 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'apprentissage par machine. [0206] 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 94 B17782 FR - 409133FR la convergence du ou des paramètres de ce noeud, c'est-à-dire si l'erreur dans le ou les paramètres reste dans le niveau ou la région acceptable dans l'espace d'erreur. Par exemple, il existe un exemple d'utilisation des modes de réalisation dans lequel chacun des états de sortie individuels est un bit individuel et l'état de sortie agrégé est un ET des états de sortie individuels (ou de façon équivalente un OU si 0 est 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. [0207] 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. [0208] 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. [0209] On notera que les modes de réalisation susmentionnés ont été décrits uniquement à titre d'exemple. B17782 FR - 409133FR [0210] Par exemple, le concept de séparation des phases BSP internes, déterministes dans le temps, et externes, non déterministes dans le temps, n'est pas limité à une mise en oeuvre utilisant l'instruction de synchronisation dédiée des modes de réalisation décrits précédemment. Bien que cela soit particulièrement efficace, il n'est pas exclu que le principe BSP interne-externe puisse à la place être mis en oeuvre dans du code constitué d'instructions de code machine d'usage général. [0211] Aussi, le domaine de la présente description n'est pas limité au fait que le domaine déterministe dans le temps soit sur la puce ni que les échanges non déterministes dans le temps soient spécifiquement hors puce. Il serait aussi possible de faire une séparation entre les sphères déterministes dans le temps et non déterministe dans le temps d'autres manières. Par exemple, il n'est pas exclu d'étendre le domaine déterministe dans le temps dans l'ensemble de multiples puces 2, avec différents domaines déterministes dans le temps multi-puces qui sont connectés par une interconnexion non déterministe dans le temps (par exemple, les différents domaines déterministes dans le temps multipuces étant mis en oeuvre sur des cartes différentes ou des châssis serveurs différent). Ou dans un autre exemple, des domaines déterministes dans le temps différents pourraient être mis en oeuvre sur une puce 2 donnée, une interconnexion sur la puce non déterministe dans le temps étant prévue ou assurée entre de tels domaines. [0212] En outre, la mise en oeuvre du domaine déterministe dans le temps n'est pas limitée à l'utilisation d'une table de correspondance de délais inter-pavés. A la place, par exemple on pourrait utiliser une formule analytique pour déterminer le délai inter-pavé. En outre, le délai inter-pavé et les caractéristiques temporelles d'envoi et de réception 96 B17782 FR - 409133FR ne sont pas limitées à être définis par le compilateur. Par exemple, en variante ils pourraient être définis manuellement par le programmeur. [0213] En outre, la portée de la présente description n'est limitée pour aucune raison particulière à faire la séparation entre les sphères déterministes dans le temps et non déterministes dans le temps. Comme cela a été décrit précédemment, il existe de nombreux pilotes potentiels pour réaliser cela : mise en file d'attente, transmission avec pertes ou transmission sans pertes, latence, et/ou séparation sur la puce/hors de la puce. Dans de tels cas ou dans d'autres cas, il peut être souhaitable, au moins dans certaines phases, d'éviter que des échanges non déterministes dans le temps polluent le déterminisme temporel d'une phase d'échange déterministe dans le temps. La portée de cette description n'est limitée par aucune motivation possible. [0214] En outre, l'applicabilité des techniques décrites ici n'est pas limitée à l'architecture décrite 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é. Ou le concept BSP interne-externe peut même être utilisé dans des scénarios où un seul, certains ou la totalité des pavés sur une seule, certaines ou la totalité des puces utilisent une exécution non multi-fil. [0215] Là où on utilise des pavés multi-fils, 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 97 B17782 FR - 409133FR à 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 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. [0216] 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. [0217] 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 de ressources de traitement comprenant une unité de traitement 10 et une mémoire 11 correspondante, dans une matrice de modules similaires, typiquement sur la même puce (la même puce élémentaire). [0218] 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, les instructions SYNC et EXIT pourraient être agencées pour réaliser la synchronisation et l'agrégation 98 B17782 FR - 409133FR 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. [0219] 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 pour communiquer des messages de synchronisation globaux sous forme de paquets sur une interconnexion plus large plutôt que sur des fils dédiés utilisés seulement dans un but de synchronisation). Par exemple, certains pavés peuvent 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 99 B17782 FR - 409133FR 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. [0220] Aussi, alors qu'on a décrit ici certains modes d'instruction 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, 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). [0221] Dans encore d'autres variantes, l'instruction SYNC pourrait prendre un plus grand nombre de modes possibles pour prendre en charge une plus grande granularité ou une plus grande plage de zones de synchronisation hiérarchiques 91, 92 ; ou simplement un ensemble différent de modes pour prendre en charge différentes divisions du système en zones B17782 FR - 409133FR hiérarchiques. Par exemple, en plus de permettre une sélection entre une synchronisation interne (sur la puce) et externe (hors-puce) (ou même en tant qu'alternative à cela), les modes de l'instruction SYNC peuvent être agencés pour reconnaître d'autres points de rupture physiques plus éloignés au-delà d'une puce donnée (par exemple un boîtier IC, une carte, une boîte de cartes, etc.). Ou même si aucune instruction SYNC dédiée n'est utilisée, de telles divisions peuvent être mises en oeuvre par le programmeur ou le compilateur en utilisant du code d'usage général. Ainsi, dans des modes de réalisation, l'une des zones de synchronisation hiérarchique (par exemple l'un des modes de l'instruction SYNC) peut être constituée de tous les pavés sur toutes les puces se trouvant sur le même boîtier IC (mais aucun des pavés ou aucune des puces au-delà). En plus ou à la place, l'une des zones de synchronisation hiérarchique (par exemple ici encore l'un des modes de l'instruction SYNC) peut être constituée de tous les pavés sur toutes les puces se trouvant sur la même carte (mais aucun des pavés, aucune des puces ni aucun des boîtiers au-delà). Dans une autre variante ou exemple supplémentaire, l'une des zones de synchronisation hiérarchique (par exemple ici encore un autre mode possible de l'instruction SYNC) pourrait être constituée de tous les pavés se trouvant sur toutes les puces sur toutes les cartes dans la même boîte physique, par exemple le même châssis de serveur (mais aucun des pavés, aucune des puces ou des boîtes au-delà). Cela pourrait être avantageux puisque la communication entre les différents châssis de serveur va avoir tendance à subir une pénalité plus grande que juste entre des puces (puces élémentaires) qui sont situées dans le même châssis. [0222] 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, 101 B17782 FR - 409133FR 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). [0223] 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. Procédé d'actionnement d'un système comprenant de multiples pavés processeurs divisés en une pluralité de domaines, dans lequel dans chaque domaine les pavés sont connectés entre eux par l'intermédiaire d'une instance respective d'une interconnexion déterministe dans le temps, et entre les domaines les pavés sont connectés entre eux par l'intermédiaire d'une interconnexion non déterministe dans le temps ; le procédé comprenant : sur chaque pavé respectif d'un groupe participant de certains ou de la totalité des pavés dans l'ensemble des domaines, réaliser un étage de calcul dans lequel le pavé respectif réalise un ou plusieurs calculs respectifs sur le pavé, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre des pavés du groupe ; dans chaque domaine respectif desdits un ou plusieurs domaines, réaliser une synchronisation à barrière interne respective pour imposer que tous les pavés participants dans le domaine respectif aient achevé la phase de calcul avant que l'un quelconque des pavés participants dans le domaine respectif ne soit autorisé à procéder à une phase d'échange interne, établissant ainsi une référence de temps commune entre tous les pavés participants de manière interne dans chaque domaine individuel desdits un ou plusieurs domaines ; à la suite de la synchronisation à barrière interne respective, réaliser la phase d'échange interne dans chacun desdits un ou plusieurs domaines, dans laquelle chaque pavé participant dans le domaine respectif communique un ou plusieurs résultats de ses calculs respectifs vers et/ou à partir d'un ou plusieurs autres pavés parmi les pavés participants dans le même domaine par l'intermédiaire de l'interconnexion déterministe dans le temps, mais ne 103 B17782 FR - 409133FR communique des résultats de calcul ni vers ni à partir d'aucun autre desdits domaines ; réaliser une synchronisation à barrière externe pour imposer que tous les pavés participants desdits domaines aient achevé leur phase d'échange interne avant que l'un quelconque des pavés participants ne soit autorisé a procéder à une phase d'échange externe, établissant ainsi une référence de temps commune entre tous les pavés participants dans l'ensemble des domaines ; et à la suite de la synchronisation à barrière externe, réaliser la phase d'échange externe dans laquelle un ou plusieurs des pavés participants communiquent un ou plusieurs des résultats de calcul avec un autre des domaines par l'intermédiaire de l'interconnexion non déterministe dans le temps. 2. Procédé selon la revendication 1, dans lequel les communications via l'interconnexion non déterministe dans le temps sont mises en file d'attente, mais les communications entre pavés via l'interconnexion déterministe dans le temps ne sont pas mises en file d'attente. 3. Procédé selon la revendication 1 ou 2, dans lequel sur l'interconnexion déterministe dans le temps, la communication entre chaque paire de pavés émetteur Pt récepteur est réalisée par : émission d'un message à partir du pavé récepteur, et contrôle du pavé récepteur pour écouter une adresse du pavé émetteur à un intervalle de temps prédéterminé après l'émission par le pavé émetteur, dans lequel l'intervalle de temps prédéterminé est égal à un délai prédéterminé total entre le pavé émetteur et le pavé récepteur, l'intervalle de temps étant défini par un compilateur ayant une information prédéterminée sur le délai. 104 B17782 FR - 409133FR 4. Procédé selon l'une quelconque des revendications précédentes, dans lequel l'interconnexion déterministe dans le temps est sans pertes, alors que l'interconnexion non déterministe dans le temps est avec pertes au niveau d'une couche physique, d'une couche transport ou d'une couche réseau. Procédé selon l'une quelconque des revendications précédentes, dans lequel chacun des domaines est une puce respective différente, l'interconnexion déterministe dans le temps étant une interconnexion interne sur la puce et l'interconnexion non déterministe dans le temps étant une interconnexion externe entre les puces. 6. Procédé selon l'une quelconque des revendications 1 à 4, dans lequel chacun des domaines comprend de multiples puces, l'interconnexion déterministe dans le temps étant une interconnexion externe inter-puce sans pertes et l'interconnexion non déterministe dans le temps étant une interconnexion externe avec pertes. 7. Procédé selon l'une quelconque des revendications précédentes, comprenant la réalisation d'une série d'itérations répétitives, chacune comprenant une instance respective de l'étage de calcul, suivie d'une instance respective de la synchronisation à barrière interne, suivie d'une instance respective de la phase d'échange interne, suivie d'une instance respective de la synchronisation à barrière externe, suivie d'une instance respective de la phase d'échange externe ; dans lequel chaque itération successive n'est pas autorisée à procéder avant que la synchronisation à barrière externe de l'itération immédiatement précédente ait été réalisée. 8. Procédé selon l'une quelconque des revendications précédentes, comprenant la réalisation d'une séquence 105 B17782 FR - 409133FR d'instances de la phase de calcul, chacune étant suivie d'une instance correspondante de la phase d'échange interne puis d'une instance correspondante de la synchronisation à barrière interne, dans lequel la synchronisation à barrière externe suit la dernière phase de calcul dans ladite séquence. 9. Procédé selon les revendications 7 et 8, dans lequel chacune d'une ou plusieurs des itérations comprend une séquence respective de multiples instances de la phase de calcul, chacune étant suivie d'une instance correspondante de la phase d'échange interne puis d'une instance correspondante de la synchronisation à barrière interne, dans lequel la synchronisation à barrière externe respective suit la dernière instance de la phase de calcul dans la séquence respective. 10. Procédé selon l'une quelconque des revendications précédentes, dans lequel chacune des synchronisations à barrière interne et externe est réalisée en exécutant une instruction de synchronisation comprenant un code opération et un opérande, dans lequel l'opérande spécifie un mode de l'instruction de synchronisation comme étant soit interne soit externe, et dans lequel le code opération, lorsqu'il est exécuté, amène de la logique matérielle se trouvant dans l'interconnexion déterministe dans _Le temps à coordonner le fonctionnement de la synchronisation a barrière interne lorsque l'opérande spécifie le mode interne, et amène la logique matérielle se trouvant dans l'interconnexion non déterministe dans le temps coordonner le fonctionnement de la synchronisation barrière externe lorsque l'opérande spécifie le mode externe. 106 B17782 FR - 409133FR 11. Procédé selon l'une quelconque des revendications précédentes, comprenant la sélection de l'une d'une pluralité de zones prédéfinies comme pavés participants, chaque zone comprenant un ensemble ou un sous-ensemble différent des multiples domaines. 12. Procédé selon la revendication 11, dans lequel les zones sont hiérarchiques, avec au moins deux zones de niveau inférieur qui sont imbriquées dans au moins une zone de niveau supérieur. 13. Procédé selon la revendication 10, et les revendications 11 ou 12, dans lequel l'opérande de l'instruction de synchronisation spécifie laquelle d'une pluralité de variantes différentes possibles du mode externe de la synchronisation à barrière externe s'applique, chacune correspondant à une zone différente dans lesdites zones. 14. Procédé selon les revendications 12 et 13, dans lequel les variantes du mode externe spécifient au moins à quel niveau hiérarchique de zone s'applique la synchronisation à barrière externe. 15. Procédé selon la revendication 12 ou selon l'une quelconque des revendications dépendantes, dans lequel la synchronisation et l'échange externes comprennent : premièrement réaliser une synchronisation externe d'un premier niveau puis un échange contraint dans une première zone d'un niveau inférieur des zones hiérarchiques ; et à la suite de la synchronisation et de l'échange du premier niveau, réaliser une synchronisation et un échange externe d'un deuxième niveau dans une deuxième zone d'un niveau supérieur desdites zones. 16. Procédé selon l'une quelconque des revendications 11 à 15, dans lequel l'une des zones hiérarchiques est 107 B17782 FR - 409133FR constituée de tous les pavés se trouvant sur un même boîtier de circuit intégré, IC, mais pas au-delà ; et/ou l'une des zones hiérarchiques est constituée de tous les pavés se trouvant dans une même carte, mais pas au-delà ; et/ou l'une des zones hiérarchiques est constituée de tous les pavés se trouvant dans un même châssis, mais pas au-delà. 17. Procédé selon l'une quelconque des revendications précédentes, comprenant l'exécution d'une instruction d'abstention sur l'un ou certains des pavés, le code opération de l'instruction d'abstention amenant le ou les pavés sur lesquels elle est exécutée à être exclu du groupe. 18. Procédé selon l'une quelconque des revendications précédentes, dans lequel dans la phase d'échange externe, un ou plusieurs des pavés participants communiquent aussi un ou plusieurs des résultats de calcul à un processeur hôte via l'interconnexion externe, le processeur hôte étant mis en oeuvre sur une puce de processeur hôte séparée. 19. Procédé selon l'une quelconque des revendications précédentes, dans lequel, dans la phase de calcul, certains ou la totalité des pavés participants exécutent un lot de fils de travail de manière entrelacée, et la synchronisation à barrière interne impose que tous les fils de travail dans tous les lots soient sortis. 20. Procédé selon l'une quelconque des revendications précédentes, comprenant l'utilisation du système pour réaliser un algorithme d'intelligence artificielle dans lequel chaque noeud se trouvant dans un graphe comporte un ou plusieurs sommets d'entrée respectifs et un ou plusieurs sommets de sortie respectifs, les sommets d'entrée d'au moins certains des noeuds étant les sommets de sortie d'au moins certains autres des noeuds, chaque noeud comprenant une fonction respective reliant ses sommets de sortie à ses 108 B17782 FR - 409133FR sommets 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 modélise un ou plusieurs noeuds respectifs des noeuds du graphe. 21. Procédé selon la revendication 5 ou 6, et selon les revendications 18 et 19, dans lequel les puces sont des puces accélératrices AI assistant le processeur hôte. 22. Produit programme informatique incorporé sur un élément de stockage lisible par un ordinateur et comprenant du code agencé pour, lorsqu'il est exécuté sur les pavés, réaliser des opérations selon l'une quelconque des revendications 1 à 21. 23. Système comprenant de multiples pavés processeurs divisés en une pluralité de domaines, dans lequel dans chaque domaine les pavés sont connectés entre eux via une instance respective d'une interconnexion déterministe dans le temps et entre les domaines les pavés sont connectés entre eux via une interconnexion non déterministe dans le temps ; le système étant programmé pour réaliser les opérations suivantes : sur chaque pavé respectif d'un groupe participant de certains ou de la totalité des pavés dans l'ensemble des domaines, réaliser un étage de calcul dans lequel le pavé respectif réalise un ou plusieurs calculs respectifs sur le pavé, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre des pavés du groupe ; dans chaque domaine respectif desdits un ou plusieurs domaines, réaliser une synchronisation à barrière interne 109 B17782 FR - 409133FR respective pour imposer que tous les pavés participants dans le domaine respectif aient achevé la phase de calcul avant que l'un quelconque des pavés participants dans le domaine respectif ne soit autorisé à procéder à une phase d'échange interne, établissant ainsi une référence de temps commune entre tous les pavés participants de manière interne dans chaque domaine individuel desdits un ou plusieurs domaines ; à la suite de la synchronisation à barrière interne respective, réaliser la phase d'échange interne dans chacun desdits un ou plusieurs domaines, dans laquelle chaque pavé participant dans le domaine respectif communique un ou plusieurs résultats de ses calculs respectifs vers et/ou à partir d'un ou plusieurs autres pavés parmi les pavés participants dans le même domaine par l'intermédiaire de l'interconnexion déterministe dans le temps, mais ne communique des résultats de calcul ni vers ni à partir d'aucun autre desdits domaines ; réaliser une synchronisation à barrière externe pour imposer que tous les pavés participants desdits domaines aient achevé leur phase d'échange interne avant que l'un quelconque des pavés participants ne soit autorisé à procéder à une phase d'échange externe, établissant ainsi une référence de temps commune entre tous les pavés participants dans l'ensemble des domaines ; et à la suite de la synchronisation à barrière externe, réaliser la phase d'échange externe dans laquelle un ou plusieurs des pavés participants communiquent un ou plusieurs des résultats de calcul avec un autre des domaines par l'intermédiaire de l'interconnexion non déterministe dans le temps.