Brevet FR3090924A1 — publié le 20200626

Description Titre de l'invention : ÉCHANGE DE DONNÉES DANS UN OR- DINATEUR Domaine technique [0001] La présente description concerne des échanges de données dans un ordinateur. En particulier, la description concerne un ordinateur comportant de multiples unités de traitement, dans lequel des données sont échangées entre les unités de traitement par l'intermédiaire de chemins d'échange entre des unités de traitement émettrices et destinataires. En particulier, mais de manière non exclusive, la description concerne un ordinateur qui utilise un protocole informatique parallèle synchrone massif (BSP) dans lequel chaque groupe d'unités de traitement doit achever une phase de calcul avant que toute autre unité de traitement du groupe puisse procéder à une phase d'échange, phase dans laquelle des données sont échangées sur les chemins d'échange. Technique antérieure [0002] Le parallélisme en informatique prend différentes formes. Des fragments de programme peuvent être organisés pour s'exécuter simultanément (cas dans lequel ils se chevauchent dans le temps mais peuvent partager des ressources d'exécution), ou en parallèle, cas dans lequel ils s'exécutent sur des ressources différentes éventuellement en même temps. [0003] Le parallélisme en informatique peut être obtenu d'un certain nombre de manières, comme au moyen d'une matrice de multiples pavés processeurs interconnectés, ou d'une unité de traitement à fils d'exécution multiples, ou même d'une matrice multipavé dans laquelle chaque pavé comprend une unité de traitement à fils d'exécution multiples. [0004] Lorsque le parallélisme est obtenu au moyen d'un processeur comprenant une matrice de multiples pavés sur la même puce (ou des puces dans le même boîtier de circuit intégré), chaque pavé comprend sa propre unité de traitement respective séparée munie d'une mémoire locale (comprenant une mémoire de programme et une mémoire de données). Ainsi des portions séparées de code de programme peuvent être exécutées simultanément 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 les différents pavés de communiquer entre les pavés. Dans certains cas l'unité de traitement sur chaque pavé peut prendre la forme d'une unité de traitement à fils en barillet (ou d'une autre unité de traitement multi-fil). Chaque pavé peut comporter un ensemble de contextes et un pipeline d'exécution de sorte que chaque pavé peut exécuter de multiple fils entrelacés simultanément. 2 [0005] En général, il peut y avoir des dépendances entre les portions d'un programme s'exécutant sur différents pavés dans la matrice. 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 mise à disposition par un autre morceau de code sur un autre pavé. 11 existe un certain nombre de schémas possibles pour obtenir cela, niais le schéma qui nous intéresse ici est connu sous le nom dc "parallèle synchrone massif" (BSP). Selon le schéma BSP, chaque pavé réalise une phase de calcul et une phase d'échange de manière alternée. Pendant la phase de calcul chaque pavé effectue une ou plusieurs tâches de calcul localement sur le pavé, mais ne communique aucun résultat de ses calculs à 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 dc calcul précédente vers et/ou à partir d'un ou plusieurs autres des pavés du groupe, niais ne commence pas de nouvelle phase dc calcul avant que le pavé ait terminé sa phase d'échange. En outre, selon cette forme de 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 les phases 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é à procéder à la phase d'échange suivante, soit (h) tous les pavés du groupe doivent achever leurs phases d'échanges respectives avant qu'un pavé du groupe soit autorisé à procéder à la phase de calcul suivante, soit (c) les deux. Lorsqu'on utilise ici la phrase "entre une phase de calcul et une phase d'échange" on englobe toutes ces options. [0006] Un exemple d'utilisation de traitement parallèle multi-fil et/ou multi-pavé peut être trouvé dans l'intelligence artificielle. Comme cela sera familier pour l'homme de l'art dans l'intelligence artificielle, les algorithmes d'intelligence artificielle sont capables de produire des modèles de connaissance et d'utiliser le modèle de connaissance pour exécuter des algorithmes d'apprentissage et d'inférence. Un modèle d'intelligence artificielle incorporant le modèle de connaissance et des algorithmes peut être représenté sous forme d'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. L'activation de la sortie de certains noeuds forme les entrées d'autres noeuds, et la sortie de certains noeuds fournit la sortie du graphe, et les entrées du graphe fournissent les entrées à certains noeuds. En outre, la fonction se trouvant au niveau de chaque noeud est paramétrée par un ou plusieurs paramètres respectifs, par exemple des poids. Pendant une phase 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 possible. 3 Divers algorithmes pour réaliser cela sont connus dans la technique, comme un algorithme à rétro-propagation basé sur une descente de gradient stochastique. Sur de multiples itérations les paramètres sont progressivement ajustés pour diminuer leurs erreurs, et ainsi le graphe converge vers une solution. Dans un étage suivant, le modèle appris peut alors être utilisé pour faire des prédictions de sorties étant donné un ensemble spécifié d'entrées ou pour faire des inférences en ce qui concerne des entrées (causes) étant donné un ensemble spécifié de sorties, ou d'autres formes introspectives d'analyse peuvent être réalisées sur celui-ci. [0007] La mise en oeuvre de chaque noeud va impliquer le traitement de données, et les inter- connexions du graphe correspondent à des données à échanger entre les noeuds. Typiquement, au moins une partie du traitement de chaque noeud peut être réalisée indépendamment de certains ou de tous les autres noeuds du graphe, et par conséquent de grands graphes présentent des opportunités pour un parallélisme massif. Résumé de l'invention [0008] Une machine parallèle fortement répartie est une structure de machine appropriée pour des calculs de tels modèles d'intelligence artificielle. [0009] Un facteur de modèles de connaissance qui est exploité dans la présente description est la nature généralement statique du graphe. C'est-à-dire que la structure des noeuds et du graphe comprenant les noeuds ne change pas habituellement pendant l'exécution d'algorithmes d'intelligence artificielle. Les inventeurs ont réalisé une machine qui donne certaines garanties de déterminisme temporel pour optimiser les calculs sur des modèles d'intelligence artificielle. Cela permet à un compilateur de partitionner et de planifier le travail dans l'ensemble des noeuds de manière déterministe dans le temps. C'est cc déterminisme temporel qui est utilisé dans les modes de réalisation décrits dans la suite pour des optimisations significatives dans l'utilisation du code dans un ordinateur optimisé pour traiter des charges de travail sur la base de modèles de connaissance. [0010] Un aspect de la présente description prévoit un ordinateur comprenant : une pluralité d'unités de traitement ayant chacune une interface d'entrée munie d'un ensemble de fils d'entrée, et une interface de sortie munie d'un ensemble de fils de sortie ; un tissu de commutation connecté à chacune des unité de traitement par l'ensemble respectif de fils de sortie et connectable à chacune des unités de traitement par l'ensemble respectif de fils de sortie et connectable à chacune des unité de traitement par les fils d'entrée respectifs par l'intermédiaire de circuits de commutation contrôlables par son unité de traitement associée ; les unités de traitement étant agencées en colonnes, chaque colonne ayant une unité de traitement de base à proximité du tissu de commutation et de multiples unité de traitement adjacentes les unes aux autres dans des positions res- pectives dans la direction de la colonne, dans lequel pour mettre en oeuvre un échange de données entre les unités de traitement au moins une unité de traitement est agencée pour émettre à un instant d'émission un paquet de données destiné à une unité de traitement destinataire sur son ensemble de fils de connexion de sortie, le paquet de données n'ayant aucun identifiant de destination de l'unité de traitement destinataire niais étant destiné à être reçu au niveau de l'unité de traitement destinataire avec un délai prédéterminé par rapport à l'instant d'émission, dans lequel le délai prédéterminé dépend d'un chemin d'échange entre les unités de traitement émettrice et destinataire, dans lequel le chemin d'échange entre une paire quelconque d'unités de traitement émettrice et destinataire se trouvant à des positions respectives dans une colonne donnée a le même délai que le chemin d'échange entre chaque paire d'unités de traitement émettrice et destinataire se trouvant à des positions respectives correspondantes dans les autres colonnes. [0011] Le chemin d'échange physique peut inclure une composante de chemin qui s'étend à partir d'une unité de traitement respective dans la colonne jusqu'à la hase de la colonne. [0012] Le tissu de commutation peut comprendre une pluralité de groupes de fils d'échange, chaque groupe ayant des fils connectés aux fils de sortie d'unités de traitement se trouvant dans chaque colonne respective. [0013] Dans un mode de réalisation, une première des colonnes est éloignée de son groupe de fils respectif d'une première distance physique, et une deuxième des colonnes est éloignée de son groupe de fils correspondant d'une deuxième distance physique, la deuxième distance physique étant supérieure à la première distance physique. Un délai de compensation peut être prévu dans une composante de chemin entre colonne et tissu de commutation, entre la première colonne et le premier groupe de fils correspondant, d'où il résulte que le délai de chemin entre colonne et tissu de commutation de la première colonne est le même que le délai de chemin entre colonne et tissu de commutation de la deuxième colonne. [0014] Le délai de compensation peut comprendre un circuit de retard de compensation de sortie agencé dans l'ensemble de fils de connexion de sortie de chaque unité de traitement se trouvant dans la première colonne. [0015] Le délai de compensation peut additionnellement ou en variante comprendre un circuit de retard de compensation d'entrée agencé dans l'ensemble de fils d'entrée pour chaque pavé se trouvant dans la première colonne. [0016] L'ordinateur peut en outre comprendre un délai de compensation de commutation dans un ensemble de fils de commande de commutation qui s'étend à partir de chaque unité de traitement jusqu'à son circuit de commutation correspondant, la compensation de délai de commutation étant déterminée de telle sorte que la somme du circuit de compensation de délai d'entrée et de la compensation de délai de commande de commutation soit la même pour chaque colonne. [0017] Dans certains modes de réalisation, le tissu de commutation s'étend dans une première direction, et chaque colonne s'étend dans une deuxième direction perpendiculaire à la première direction. [0018] L'ordinateur peut comprendre n colonnes situées sur un côté du tissu de commutation et n colonnes situées sur l'autre côté du tissu de commutation et s'étendant en s'écartant du tissu de commutation dans une direction inverse. Dans une architecture n est égal à 8. [0019] Chacune des n colonnes situées sur le premier côté du tissu de commutation peut être associée à des groupes respectifs de fils dans une première moitié du tissu de commutation, et chacune des n colonnes situées sur l'autre côté du tissu de commutation peut être associée à des groupes de fils respectifs dans l'autre moitié du tissu de commutation. [0020] Le chemin d'échange peut comprendre une composante de chemin entre hase de colonne et pavé, basée sur la distance le long de la colonne de l'unité de traitement respective à partir de l'unité de traitement de hase. [0021] Chaque unité de traitement peut être agencée pour comporter un stockage d'instructions contenant un programme local comprenant du code d'échange, une unité d'exécution agencée pour exécuter le programme local et un stockage de données pour contenir des données, le code d'échange d'une unité de traitement à une première position dans l'une des colonnes étant le même que le code d'échange d'une unité de traitement dans la même position respective d'une autre colonne. [0022] Dans certains modes de réalisation, le code d'échange comprend une instruction SEND qui provoque l'émission du paquet de données à l'instant d'émission vers une unité de traitement destinataire dans la même colonne. [0023] L'ordinateur peut comprendre un module de synchronisation actionnable pour générer un signal de synchronisation pour contrôler l'ordinateur pour commuter entre une phase de calcul et une phase d'échange, dans lequel les unités de traitement sont agencées pour exécuter leur programmes locaux en accord avec une horloge commune, les programmes locaux étant tels que ladite au moins une unité de traitement est agencée pour émettre le paquet de données dans la phase d'échange. [0024] Le signal de synchronisation peut être reçu au niveau de chaque colonne par l'intermédiaire d'un étage de retard de synchronisation respectif de telle sorte que le signal de synchronisation soit reçu au niveau de chaque unité de traitement clans l'ordinateur en même temps. Cela peut être utile lors de la relocalisation de code d'échange généré pour n groupes de colonnes vers un autre groupe similaire ayant le "pôle" opposé (nord ou sud). Une variante d'approche pour obtenir un retard dans le 6 signal de synchronisation consiste à ajouter des instructions de retard juste avant le code d'échange. [0025] En s'assurant que le chemin d'échange a la même latence pour des unités de traitement positionnées respectivement dans n'importe quelle colonne, le même code d'échange peut être utilisé pour des échanges intra-colonnes similaires dans une colonne quelconque. Dans cc contexte, le code d'échange comprend la séquence d'instructions qui provoque l'émission de données à partir d'une unité de traitement, et qui gère la réception de données au niveau d'une unité de traitement destinataire. Ces instructions comprennent une instruction SEND au niveau du pavé émetteur, et une instruction de commande pour le circuit de commutation au niveau du pavé destinataire. En plus, il peut y avoir une instruction de pointeur mémoire au niveau du pavé destinataire. Cette instruction de pointeur mémoire ne donne pas effectivement l'instruction d'un chargement en mémoire (qui survient sans instruction explicite), niais peut mettre en place l'adresse en mémoire à laquelle les données doivent être chargées à la réception. [0026] En outre, une compensation de délai supplémentaire peut être introduite pour permettre au même code d'échange d'être utilisé pour certains échanges de données inter-colonnes. Il est possible de sélectionner un ensemble de compensations de délai pour les différentes composantes de chemin de telle sorte que certaines combinaisons de pavé d'envoi et de réception dans l'ordinateur présentent la même latence sur leurs chemins d'échange. [0027] On notera la difficulté ici en ce que du code d'échange pour des pavés dans une colonne est compilé de manière à comprendre des latences entre le pavé émetteur et chaque pavé destinataire pour chaque message. Le même code peut seulement être utilisé dans d'autres échanges intra- ou inter-colonnes si les latences sont les mêmes pour des paires de pavés correspondantes. Dans ce contexte "correspondante" désigne des pavés disposés de manière correspondante dans d'autres colonnes. [0028] Dans un autre agencement, un tissu de commutation s'étend à travers une puce dans laquelle l'ordinateur est incorporé, et un ensemble de colonnes est agencé côte à côte en s'étendant perpendiculairement à partir d'un côté du tissu de commutation, et un autre ensemble de colonnes est agencé côte à côte en s'étendant perpendiculairement (mais dans une direction inverse) par rapport à l'autre côté de la colonne. De cette manière, une matrice de colonnes est formée. Pour faciliter la référence, on désigne les colonnes situées sur un côté donné du tissu de commutation comme étant dans la partie nord de la matrice (les colonnes au nord), et les colonnes se trouvant de l'autre côté du tissu sont désignées comme étant dans la partie sud de la matrice (les colonnes au sud). Il est possible d'introduire une compensation de délai telle que des unités de traitement se trouvant dans des positions respectives dans certaines paires de colonnes sur l'une 7 ou l'autre de la partie nord ou de la partie sud de la matrice peuvent utiliser le même code d'échange. [0029] Dans un autre exemple, lorsqu'une unité de traitement émettrice est dans une colonne dans la partie nord de la matrice, et l'unité de traitement destinataire est dans une colonne dans la partie sud de la matrice (ou vice versa) certaines paires de colonnes peuvent partager le même code d'échange, grâce à l'utilisation de la compensation de délai. Brève description des dessins [0030] Pour faciliter la compréhension de la présente description et pour montrer comment celle-ci peut être mise en oeuvre, on va faire maintenant référence à titre d'exemple aux dessins joints. [0031] [fig.1] La figure 1 illustre schématiquement l'architecture d'un processeur en une seule puce ; [0032] [fig.2] la figure 2 est un schéma blocs d'un pavé connecté au tissu de commutation ; [0033] [fig.3] la figure 3 est un schéma illustrant un protocole BSP ; [0034] [fig.4] la figure 4 est un schéma représentant deux pavés dans un échange dé- terministe dans le temps ; [0035] W8.51 la figure 5 est un chronogramme schématique illustrant un échange dé- terministe dans le temps ; [0036] [fig.6] la figure 6 est un exemple de graphe d'intelligence artificielle ; [0037] [fig.7] la figure 7 est une architecture schématique illustrant le fonctionnement d'un compilateur pour générer des programmes déterministes dans le temps ; [0038] [fig.8] les figures 8, [0039] [fig.9] [0040] [fig.10] 10, et [0041] [fig.11] 11 illustrent des formats d'instructions de différentes instructions utilisables dans une architecture déterministe dans le temps ; [0042] W8.12_1 la figure 12 illustre un exemple de champs de commande utilisables dans une instruction d'envoi ; [0043] [fig.13] la figure 13 illustre un exemple de communication entre deux pavés sur un tissu de commutation ; [0044] [fig.14] les figures 14 et [0045] [fig.15] 15 sont des représentations schématiques de l'architecture ; [0046] [fig.16] la figure 16 représente les bits dans un identifiant de pavé ; [0047] [fig.17] la figure 17 est une table représentant un exemple d'ensemble de délais de compensation ; [0048] [fig.18] la figure 18 est une table représentant un exemple de délai de pavé à pavé ; 8 100491 Ifig.191 les figures 19 et 19A représentent des exemples de réutilisation du code d'échange ; et [0050] [fig.20] les figures 20 et 20A représentent un autre exemple de réutilisation de code d'échange. Description des modes de réalisation [0051] La présente description expose un mécanisme de compensation de délai qui peut être utilisé pour permettre d'utiliser du code d'échange commun dans de multiples parties d'un processeur déterministe dans le temps. [0052] La figure 1 illustre schématiquement l'architecture d'un processeur en une seule puce 2. Le processeur est appelé ici IPU (de l'anglais Intelligence Processing Unit - Unité de Traitement pour Intelligence) pour indiquer sa capacité d'adaptation à des applications d'intelligence artificielle. Dans un ordinateur, les processeurs en une seule puce peuvent être connectés entre eux, comme cela va être décrit dans la suite, en utilisant des liaisons sur la puce, pour former un ordinateur. La présente description se concentre sur l'architecture d'un processeur en une seule puce 2. Le processeur 2 comprend de multiples unités de traitement appelées pavés. Dans un mode de réalisation, il y a 1216 pavés organisés en matrices 6a, 6h, 6c, 6d. Le processeur peut être considéré comme ayant des régions Est et Ouest, et des régions Nord et Sud. 6a peut être appelée "matrice Nord-Est", 6h peut être appelée "matrice Sud-Est", 6c peut être appelée "matrice Sud-Ouest", et 6d peut être appelée "matrice Nord-Ouest". Dans l'exemple décrit, chaque matrice comporte quatre colonnes de 76 pavés (en fait il y aura en général 80 pavés, dans un but de redondance). On remarquera que les concepts décrits ici s'étendent à un certain nombre d'architectures physiques différentes, un exemple étant donné ici pour faciliter la compréhension. La puce 2 comporte deux liaisons de puce à hôte 8a, 8h et 4 liaisons de puce à puce 30a, 30h agencées sur le bord "Ouest" de la puce 2. La puce 2 reçoit du travail d'un hôte (non représenté) qui est connecté à la puce par l'intermédiaire de l'une des baisons de carte à hôte sous la forme de données d'entrée à traiter par la puce 2. Les puces peuvent être connectées entre elles dans des cartes par 6 autres baisons de puce à puce 30a, 30h agencées le long du côté "Est" de la puce. Un hôte peut accéder à un ordinateur qui est architecturé sous forme d'un processeur en une seule puce 2 comme cela est décrit ici ou d'un groupe de multiples processeurs en une seule puce 2 interconnectés en fonction de la charge de travail fournie par l'application hôte. [0053] La puce 2 comporte une horloge 3 qui contrôle l'activité temporelle de la puce. L'horloge est connectée à la totalité des circuits et composants de la puce. La puce 2 comprend un tissu de commutation déterministe dans le temps 34 auquel tous les pavés et toutes les liaisons sont connectés par des ensembles de fils de connexion, le tissu de 9 commutation étant sans état, c'est-à-dire n'ayant aucun état de programme visible. Chaque ensemble de fils de connexion est fixe de bout en bout. Les fils sont en pipeline. Dans ce mode de réalisation, un ensemble comprend 32 fils de données plus des fils de contrôle, par exemple un bit de validité. Chaque ensemble peut transporter un paquet de données de 32 bits, mais on notera ici que le mot "paquet" désigne un ensemble de bits représentant une donnée (parfois appelée ici élément de données), peut-être avec un ou plusieurs bits de validité. Les "paquets" ne comportent pas d'en-têtes munis d'identifiants de destination qui permettent à un destinataire visé d'être identifié de manière unique, et ne comportent pas non plus d'informations de fin de paquet. À la place, chacun d'eux représente une valeur numérique ou logique qui est fournie en entrée ou obtenue en sortie d'un pavé. Toutefois, les paquets peuvent inclure des en-têtes indiquant au moins une direction de déplacement dans le tissu de commutation 34. Chaque pavé a sa propre mémoire locale (décrite dans la suite). Les pavés ne partagent pas de mémoire. Le tissu de commutation constitue un ensemble croisé de fils de connexion connectés seulement à des multiplexeurs et des pavés comme cela est décrit dans la suite et ne contient aucun état de programme visible. Le tissu de commutation est considéré comme étant sans état et n'utilise pas de mémoire. L'échange de données entre pavés est conduit de manière déterministe dans le temps comme cela est décrit ici. Un fil de connexion en pipeline comprend une série de stockages temporaires, par exemple des verrous ou des bascules qui maintiennent une donnée pendant un cycle d'horloge avant de la libérer vers le stockage suivant. Le temps de déplacement le long du fil est déterminé par ces stockages temporaires, chacun utilisant jusqu'à un temps de cycle d'horloge dans un chemin entre deux points quelconques. [0054] Chaque colonne est associée à un groupe respectif de fils (l'échange, comme cela sera décrit dans la suite. Des colonnes utilisant des groupes de fils physiquement plus proches d'elles ont des latences inférieures pour des échanges inter-colonnes qu'une colonne utilisant un groupe de fils qui est situé plus loin. [0055] La figure 2 illustre un exemple de pavé 4 selon des modes de réalisation de la présente description. Dans le pavé, de multiples fils d'exécution sont entrelacés dans un seul pipeline d'exécution. Le pavé 4 comprend : une pluralité de contextes 26 dont chacun est agencé pour représenter l'état d'un fil respectif différent parmi une pluralité de fils ; une mémoire d'instructions partagée 12 commune à la pluralité de fils ; une mémoire de données partagée 22 qui est aussi commune à la pluralité de fils ; un pipeline d'exécution partagé 14, 16, 18 qui est de nouveau commun à la pluralité de fils ; et un ordonnancera- de fils 24 pour planifier la pluralité de fils pour leur exécution dans le pipeline partagé de manière entrelacée. L'ordonnanceur de fils 24 est schématiquement représenté dans le schéma par une séquence de créneaux temporels SO...S5, niais en pratique c'est un mécanisme matériel gérant des compteurs de programme des fils en relation avec leurs créneaux temporels. Le pipeline d'exécution comprend un étage d'extraction 14, un étage de décodage 16 et un étage d'exécution 18 comprenant une unité d'exécution (EXU) et une unité de chargement/stockage (LSU). Chacun des contextes 26 comprend un ensemble respectif de registres Ro, RI... pour représenter l'état de programme du fil respectif. [0056] L'étage d'extraction 14 est connecté de manière à extraire des instructions à exécuter à partir de la mémoire d'instructions 12, sous le contrôle de l'ordonnanceur de fils 24. L'ordonnanccur de fils 24 est agencé pour contrôler l'étage d'extraction 14 pour extraire des instructions du programme local pour exécution dans chaque créneau temporel comme on va le décrire plus en détail ci-après. [0057] L'étage d'extraction 14 a accès à un compteur de programme (PC) de chacun des fils qui est actuellement alloué à un créneau temporel. Pour un fil donné, l'étage d'extraction 14 extrait l'instruction suivante de cc fil de l'adresse suivante dans la mémoire d'instructions 12, comme cela est indiqué par le compteur de programme du fil. On notera qu'en faisant référence à une instruction ici, on désigne une instruction de code machine, c'est-à-dire une instance de l'une des instructions fondamentales du jeu d'instructions de l'ordinateur, constituée d'un code opération et de zéro, ou plus, opérandes. On notera aussi que le programme chargé dans chaque pavé est déterminé par un processeur ou un compilateur pour allouer du travail sur la base du graphe du modèle d'intelligence artificielle qui est supporté. [0058] L'étage d'extraction 14 passe ensuite l'instruction extraite à l'étage de décodage 16 pour la décoder, et l'étage de décodage 16 passe ensuite une indication de l'instruction décodée à l'étage d'exécution 18 accompagnée des adresses décodées des éventuels registres d'opérandes du contexte courant spécifiés dans l'instruction, afin que l'instruction soit exécutée. [0059] Dans cet exemple, l'ordonnanceur de fils 24 entrelace des fils selon un schéma de tour de rôle dans lequel, dans chaque tom- du schéma, le tom- est divisé en une séquence de créneaux temporels So, SI, S2, S-3, chacun étant destiné à exécuter un fil respectif. Typiquement chaque créneau a une longueur d'un cycle de processeur et les différents créneaux ont des dimensions égales (bien que ce ne soit pas nécessairement le cas dans tous les modes de réalisation possibles). Ce motif se répète ensuite, chaque tour comprenant une instance respective de chacun des créneaux temporels (dans des modes de réalisation dans le même ordre à chaque fois, bien qu'ici encore cela ne soit pas nécessaire dans tous les modes de réalisation possibles). 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 temporel dans une répétition donnée de la séquence. Dans le mode de réalisation illustré, il y a huit créneaux, mais 11 d'autres nombres sont possibles. Chaque créneau temporel est associé à une ressource matérielle, par exemple un registre, pour gérer le contexte d'un fil d'exécution. [0060] L'un des contextes 26, noté SV, est réservé à une fonction spéciale, pour représenter l'état d'un "superviseur" (SV) dont le travail est de coordonner l'exécution de fils "de travail". Le superviseur peut être mis en oeuvre sous forme d'un programme organisé sous forme d'un ou plusieurs fils superviseurs qui peuvent s'exécuter simultanément. Le fil superviseur peut aussi être responsable de la réalisation de synchronisations à barrière décrites dans la suite ou peut être responsable d'un échange de données sur le pavé et hors du pavé, aussi bien que dans et hors de la mémoire locale afin qu'elles puissent être partagées entre les fils de travail entre des calculs. Le fil superviseur met en oeuvre du code d'échange, qui est constitué des instructions impliquées dans l'échange de données dans et hors du pavé. L'ordonnanceur de fils 24 est agencé de telle sorte que, lorsque le programme dans son ensemble démarre, il commence par allouer le fil superviseur à tous les créneaux temporels, c'est-à-dire qu'ainsi le superviseur SV démarre en s'exécutant dans tous les créneaux temporels So-..S;. Cependant, 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 supervision), abandonner temporairement chacun des créneaux dans lesquels il s'exécute à l'un respectif des fils de travail. Co, CI représentent des créneaux dans lesquels des fils de travail ont été alloués. Cela est obtenu par le fait que le fil superviseur exécute une instruction (l'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 : [0061] RUN task_adch-, data_addr [0062] Chaque fil de travail est un codelet destiné à représenter un sommet dans le graphe et à s'exécuter de façon atomique. C'est-à-dire que toutes les données qu'il consomme sont disponibles au lancement et toutes les données qu'il produit ne sont pas visibles par d'autres fils avant qu'il sorte. Il s'exécute jusqu'à son achèvement (excepté dans des conditions d'erreur). L'adresse de données peut spécifier certaines données sur lesquelles le codelet doit agir. En variante, l'instruction d'abandon peut prendre un seul opérande spécifiant l'adresse du codelet, et l'adresse de données pourrait être incluse dans le code du codelet ; ou l'unique opérande pourrait pointer vers une structure de données spécifiant l'adresse du codelet et des données. Les codelets peuvent être exécutés simultanément et indépendamment les uns des autres. [0063] Dans tous les cas, l'instruction d'abandon ("RUN") agit sur l'ordonnanceur de fils 24 de manière à abandonner le créneau temporel courant, c'est-à-dire le créneau temporel dans lequel cette instruction est exécutée, au fil de travail spécifié par l'opérande. On 12 notera qu'il est implicite dans l'instruction d'abandon que c'est le créneau temporel dans lequel cette instruction est exécutée qui est abandonné (implicite dans le contexte d'instructions de code machine signifie qu'il n'y a pas besoin d'un opérande pour spécifier cela - c'est implicite à partir du code opération lui-même). Ainsi le créneau qui est abandonné est le créneau dans lequel le superviseur exécute l'instruction d'abandon. Dit d'une autre manière, le superviseur s'exécute dans le même espace que celui qu'il abandonne. Le superviseur dit "exécuter ce codelet dans ce créneau temporel", puis à partir de ce point le créneau est la propriété (temporairement) du fil de travail concerné. On notera que lorsqu'un superviseur utilise un créneau, il n'utilise pas le contexte associé à ce créneau mais utilise son propre contexte SV. [0064] Le fil superviseur SV réalise une opération similaire dans chacun des créneaux temporels, pour abandonner tous ses créneaux Co, CI à différents fils respectifs parmi les fils de travail. Une fois qu'il a effectué cela pour le dernier créneau, le superviseur met son exécution en pause, puisqu'il n'a pas de créneaux dans lesquels s'exécuter. On notera que le superviseur peut ne pas abandonner tous ses créneaux, il peut retenir certains créneaux pour s'exécuter lui-même. [0065] Lorsque le fil superviseur détermine qu'il est temps d'exécuter un codelet, il utilise l'instruction d'abandon ("RUN") pour allouer cc codelet au créneau dans lequel il exécute l'instruction "RUN". [0066] Chacun des fils de travail dans les créneaux Co, CI procède à la réalisation de sa ou de ses tâches de calcul. À la fin de sa ou de ses taches, le fil de travail rend le créneau temporel dans lequel il s'exécute au fil superviseur. [0067] Cela est obtenu par le fil de travail en exécutant une instruction de sortie ("EXIT"). Dans un mode de réalisation, 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 lors de sa terminaison. [0068] EXIT exit_state [0069] Dans un mode de réalisation, l'instruction EXIT agit sur l'ordonnancera- 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 superviseur suivantes (par exemple une barrière de synchronisation et/un mouvement de données en mémoire pour faciliter l'échange de données entre des fils de travail), 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 encore 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 que l'unité de traitement à fils en barillet 10 peut entrelacer à un instant donné. C'est le rôle du fil superviseur SV de planifier lesquels des fils de travail WO...Wj provenant de la 13 mémoire d'instructions 12, à quelle étape dans le programme global, doivent être exécutés. [0070] Dans un autre mode de réalisation, l'instruction EXIT n'a pas besoin de définir un état de sortie. [0071] Cette instruction agit sur l'ordonnanccur de fils 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 suivantes de superviseur (par exemple unc synchronisation à barrière et/ou un échange de données), et/ou continuer à exécuter une autre instruction d'abandon, et ainsi de suite. [0072] Comme cela a été brièvement mentionné précédemment, des données sont échangées entre des pavés dans la puce. Chaque puce opère un protocole Parallèle Synchrone Massif, comprenant une phase de calcul et une phase d'échange. Le protocole est illustré par exemple en figure 3. Le schéma du côté gauche en figure 3 représente une phase de calcul dans laquelle chaque pavé 4 est dans une phase où les codelcts dynamiques s'exécutent sur la mémoire locale (12, 22). Bien qu'en figure 3 les pavés 4 soient représentés agencés en cercle, cela est fait seulement dans un but d'explication et ne reflète pas l'architecture effective. [0073] Après la phase de calcul, il y a une synchronisation indiquée par une flèche 30. Pour réaliser cela, une instruction SYNC (synchronisation) est prévue dans le jeu d'instructions du processeur. L'instruction SYNC a pour effet d'amener le fil superviseur SV à attendre que tous les fils de travail en cours d'exécution W soient sortis au moyen d'une instruction EXIT. Dans des modes de réalisation, l'instruction SYNC prend un mode comme 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 s'exécutant localement sur le même module processeur 4, par exemple le même pavé, ou si au lieu de cela elle doit s'appliquer dans de multiples pavés ou même dans de multiples puces. [0074] SYNC mode // mode e {file, chip, zone_1, zone_21. [0075] Le schéma BSP en lui-même est connu dans la technique. Selon le schéma BSP, chaque pavé 4 réalise une phase de calcul 52 et une phase d'échange 50 (parfois appelée communication ou passage de messages) dans un cycle alternatif. La phase de calcul et la phase d'échange sont réalisées par des exécutions d'instructions sur le pavé. Pendant la phase de calcul 52 chaque pavé 4 réalise une ou plusieurs tâches de calcul localement sur un pavé, mais ne communique pas de résultats de ces calculs avec d'autres pavés 4. Dans la phase d'échange 50, chaque pavé 4 est autorisé à échanger (communiquer) un ou plusieurs résultats des calculs provenant de la phase de calcul précédente vers et/ou à partir d'un ou plusieurs autres des pavés du groupe, mais ne réalise pas encore de nouveaux calculs qui potentiellement peuvent dépendre d'une 14 tâche réalisée sur un autre pavé 4, ou desquels une tâche sur un autre pavé 4 pourrait potentiellement dépendre (il n'est pas exclu que d'autres opérations comme des opérations associées au contrôle interne puissent être réalisées dans la phase d'échange). En outre, selon le principe BSP, une synchronisation à barrière est placée à la jointure faisant la transition des phases de calcul 52 à la phase d'échange 50, ou à la jointure faisant la transition des phases d'échange 50 à la phase de calcul 52, ou les 2. C'est-à-dire que : soit (a) tous les pavés 4 doivent achever leurs phases de calcul respectives 52 avant que l'un quelconque des pavés du groupe soit autorisé à procéder à la phase d'échange 50 suivante, soit (h) tous les pavés 4 du groupe doivent achever leurs phases d'échange respectives 50 avant que l'un quelconque des pavés du groupe soit autorisé à procéder à la phase de calcul 52 suivante, soit (c) ces deux conditions sont imposées. Cette séquence de phases d'échange et de phases de calcul peut ensuite sc répéter dans de multiples répétitions. Dans la terminologie BSP, chaque répétition de phase d'échange et de phase de calcul est appelée ici "super-étape", ce qui est cohérent avec l'utilisation de certaines descriptions précédentes du BSP. On notera ici que le terme "super-étape" est parfois utilisé dans la technique pour désigner chacune de la phase d'échange et de la phase de calcul. [0076] L'unité d'exécution (EXU) de l'étage d'exécution 18 est agencée de telle sorte que, en réponse au code opération de l'instruction de synchronisation SYNC, lorsqu'elle est qualifiée par un opérande sur la puce (inter-pavé), elle amène le fil superviseur dans lequel le "SYNC chip" a été exécuté à être mis en pause jusqu'à ce que tous les pavés 4 de la matrice 6 aient terminé d'exécuter les 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 entre pavés dans son ensemble peut progresser vers la phase d'échange 50 suivante. [0077] Chaque pavé indique son état de synchronisation à un module de synchronisation 36. Une fois qu'il a été établi que chaque pavé est prêt à envoyer des données, le processus de synchronisation 30 amène le système à rentrer dans une phase d'échange qui est représentée sur le côté droit de la figure 3. Dans cette phase d'échange, des valeurs de données se déplacent entre les pavés (en fait entre les mémoires des 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 qui puissent induire des risques de simultanéité entre des programmes de pavés. Dans la phase d'échange, chaque donnée se déplace le long de fils de connexion sur lesquels elle sort d'un pavé à partir d'un pavé émetteur vers un ou plusieurs pavés destinataires. À chaque cycle d'horloge, une donnée se déplace d'une certaine distance sur son chemin (de stockage à stockage), en pipeline. Lorsqu'une donnée est émise à partir d'un pavé, elle n'est pas émise avec un en-tête identifiant un pavé destinataire (bien que la donnée puisse inclure un en-tête indiquant au moins une direction de dé- placement à travers le tissu de commutation 34). Au lieu de cela, le pavé destinataire sait qu'il va attendre une donnée provenant d'un certain pavé émetteur à un certain instant. Ainsi, l'ordinateur décrit ici est déterministe dans le temps. Chaque pavé actionne un programme qui lui a été alloué par le programmeur ou par un exercice de compilateur, le programmeur ou la fonction de compilateur ayant 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é destinataire à un certain instant. Afin d'obtenir 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 à la position temporelle d'autres instructions qui sont exécutées sur d'autres pavés dans l'ordinateur. Cela sera décrit plus en détail dans la suite, mais premièrement on va décrire le mécanisme par lequel un pavé destinataire peut recevoir une donnée à un instant prédéterminé. Chaque pavé 4 est associé à son propre multiplexeur 210 et ainsi la puce comporte 1216 multiplexeurs. Chaque multiplexeur comporte 1216 entrées, chacune ayant une largeur de 32 bits (plus optionnellement certains bits de commande). Chaque entrée est connectée à un ensemble respectif de fils de connexion 140, dans le tissu de commutation 34. Les fils de connexion du tissu de commutation sont aussi connectés à un ensemble de fils de connexion 218 de sortie de données provenant de chaque pavé (un bus d'échange à diffusion, décrit dans la suite), et ainsi il y a 1216 ensembles de fils de connexion qui dans cc mode de réalisation s'étendent dans une direction à travers la puce. Pour faciliter l'illustration, un seul ensemble de fils 140' en trait gras est représenté connecté aux fils de sortie de données 218' provenant d'un pavé non représenté en figure 2, dans la matrice sud 6b. Cet ensemble de fils est noté 140, pour indiquer qu'il s'agit de l'un d'un certain nombre d'ensembles de fils croisés 1400-140,215. Comme on peut maintenant le voir dans la figure 2, on notera que lorsque le multiplexeur 210 est commuté sur l'entrée notée 220' alors cela va la connecter aux fils croisés 140, et ainsi aux fils de données de sortie 218, du pavé (non représenté en figure 2) à partir du pavé sud 6b. Si le multiplexeur est contrôlé de manière à commuter sur cette entrée (220) à un certain instant, alors la donnée reçue sur les fils de sortie de données qui sont connectés à l'ensemble de fils de connexion 140, va apparaître au niveau de la sortie 230 du multiplexeur 210 à un certain instant. Elle va arriver au niveau du pavé 4 avec un certain délai par rapport à cela, le délai dépendant de la distance entre le multiplexeur et le pavé. Puisque les multiplexeurs font partie du tissu de commutation, le délai entre le pavé et le multiplexeur peut varier en fonction de l'emplacement du pavé. Pour mettre en oeuvre la commutation, les programmes locaux exécutés sur les pavés comprennent des instructions de contrôle de commutation (PUTi) qui provoquent l'émission d'un signal de commande de multiplexeur 214 pour contrôler le multiplexeur associé à ce pavé pour commuter son 16 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 (données) sont échangés entre pavés en utilisant le tissu de commutation. Avec cette explication, il est clair que le tissu de commutation n'a pas d'état - le mouvement de chaque donnée est prédéterminé par l'ensemble particulier de fils sur lequel l'entrée de chaque multiplexeur est commutée. [0078] L'instruction SEND comprend une indication d'au moins une direction dans laquelle une donnée va se déplacer dans le tissu de commutation 34 à partir du pavé émetteur vers un ou plusieurs pavés récepteurs. Des données émises à partir d'un seul pavé T vers un seul pavé T peuvent se déplacer dans l'une de deux directions fixes dans le tissu d'échange 34, la direction dépendant des identifiants de ces deux instances de pavés en communication. L'architecture de pavés décrit la direction d'échange telle qu'observée par l'émetteur et chaque instruction d'envoi utilise une paire de drapeaux de configuration pour indiquer la direction de déplacement (Est et/ou Ouest). Elle est fonctionnellement valide pour positionner les drapeaux East-Val id et West-Val id pour chaque instruction SEND exécutée (et effectivement nécessaire lorsqu'il y a 2, ou plus, pavés destinataires et ces destinataires nécessitent une direction de transfert différente). Toutefois, dans les cas où tous les pavés destinataires sont strictement à l'est ou à l'ouest du pavé d'envoi, le fait de positionner seulement le drapeau de direction pertinent va permettre l'utilisation d'optimisations d'énergie. [0079] On va faire référence à la figure 13, qui illustre comment l'indication d'au moins une direction peut être utilisée pour contrôler la direction de déplacement d'une donnée dans le tissu de commutation 34. [0080] Lorsque le processeur du pavé d'envoi 1310 exécute une instruction d'envoi, une in- dication de ladite au moins une direction fournie par l'instruction d'envoi peut être insérée dans une donnée à émettre sur le tissu de commutation. L'indication peut être insérée dans un en-tête de la donnée. Dans cet exemple, le pavé récepteur 1320 est représenté situé dans une deuxième direction par rapport au pavé d'envoi 1310. Par conséquent, l'indication de ladite au moins une direction comprend une indication indiquant que la donnée doit être émise dans la deuxième direction dans le tissu de commutation 34. Puisque, dans cet exemple, il n'y a pas de pavé récepteur positionné dans la première direction dans le tissu de commutation 34 en partant du pavé d'envoi 1310, l'indication de ladite au moins une direction comprend une indication indiquant que la donnée ne doit pas être émise dans la première direction dans le tissu de commutation 34. Le processeur du pavé émetteur 1310 peut être agencé pour, en réponse à l'exécution de l'instruction d'envoi, émettre à un instant d'émission, la donnée sur un fil de connexion 1330 du tissu de commutation 34. Sur le fil de connexion 1330 se trouve une série de stockages temporaires 1340a, 1340b, 1340c, 1340d, 1340e, 1340f, 17 par exemple des verrous ou des bascules qui maintiennent la donnée pendant un cycle d'horloge avant de la libérer vers le stockage suivant. Chacun des stockages temporaires peut inclure ou être associé à un circuit de traitement approprié pour déterminer si la donnée doit ou non être émise sur le fil de connexion 1330 au-delà du stockage temporaire. [0081] Lorsque la donnée atteint l'un des stockages temporaires, l'indication de ladite au moins une direction est évaluée pour déterminer si la donnée est autorisée à être transmise à travers le stockage temporaire ou si elle doit être bloquée/empêchée d'être transmise plus loin dans tissu de commutation. Par exemple, lorsque la donnée sur le fil de connexion 1330 atteint le stockage temporaire 1340a, l'indication indiquant si la donnée doit être transmise ou non dans la première direction est vérifiée. Puisque, dans cet exemple, la donnée est destinée à être transmise dans la deuxième direction seulement pour fourniture au pavé récepteur 1320, on empêche la donnée de passer au-delà du stockage temporaire 1340a. [0082] Par contre, lorsque la donnée atteint le stockage temporaire 1340c, l'indication indiquant si la donnée doit ou non être transmise dans la deuxième direction est vérifiée. Dans ce cas, puisque cette indication est positive, la donnée est transmise à travers le stockage temporaire 1340c le long du fil de connexion 1330. La même vérification peut être réalisée et on peut atteindre la même conclusion au niveau des stockages temporaires 1340d, 1340e, et 1340f. Cela assure que la donnée va atteindre le pavé récepteur 1320 par l'intermédiaire du multiplexeur d'entrée 1350 de ce pavé 1320. [0083] Par conséquent, l'agencement du tissu de commutation est configuré pour laisser passer les données seulement suivant lesdites une ou plusieurs directions indiquées pour transmission dans la donnée et pour empêcher la transmission de la donnée dans le tissu de commutation dans des directions non indiquées pour transmission dans la donnée. Cela présente l'avantage de permettre une optimisation de l'énergie en réduisant les transmissions de données vers des parties du tissu de commutation où il n'y a pas de pavés destinés à recevoir ces données particulières. Des opposés directionnels ne s'appliquent pas aux directions d'échange entre pavés. Par exemple, si le pavé 1310 envoie toutes ses données à fournir au pavé 1320 avec des indicateurs indiquant que la transmission est autorisée dans la deuxième direction, mais pas autorisée dans la première direction, cela n'implique pas que, lorsque le pavé 1320 envoie des données à fournir au pavé 1310, ces données doivent inclure des indicateurs indiquant que la transmission est autorisée dans la première direction, mais pas autorisée dans la deuxième direction. Cela pourrait être par exemple un cas où le pavé 1320 émet vers le pavé 1310 des données comportant des indicateurs indiquant que la transmission doit avoir lieu à la fois dans la deuxième direction et dans la première 18 direction sur le tissu de commutation. [0084] Dans la phase d'échange, une communication de tous les pavés vers tous les pavés est activée. La phase d'échange peut avoir de multiples cycles. Chaque pavé 4 a le contrôle de son propre et unique multiplexeur d'entrée 210. Le trafic entrant provenant de n'importe quel autre pavé dans la puce, ou provenant de l'une des liaisons de connexion, peut être sélectionné. On notera qu'il est possible qu'un multiplexeur soit réglé pour recevoir une entrée 'nulle' - c'est-à-dire aucune entrée provenant d'aucun autre pavé dans cette phase d'échange particulière. La sélection peut changer cycle par cycle dans une phase d'échange ; elle ne doit pas être constante partout. Des données peuvent être échangées sur une puce, ou de puce à puce ou de puce à hôte en fonction de la liaison qui est sélectionnée. La présente application est concernée principalement par des communications entre pavés sur une puce. Pour réaliser une synchronisation sur la puce, un petit nombre de signaux en pipeline sont prévus à partir de tous les pavés vers un contrôleur de synchronisation 36 sur la puce et un signal sync-ack en pipeline est diffusé à partir du contrôleur de synchronisation pour revenir vers tous les pavés. Dans un mode de réalisation, les signaux en pipeline sont des signaux ET/OU reliés en guirlande d'une largeur d'un bit. Un mécanisme par lequel unc synchronisation entre pavés est obtenue est l'instruction SYNC mentionnée précédemment, ou décrite dans la suite. D'autres mécanismes peuvent être utilisés : cc qui est important c'est que tous les pavés puissent être synchronisés entre une phase de calcul de la puce et une phase d'échange de la puce (figure 3). L'instruction SYNC déclenche la fonctionnalité suivante dans de la logique de synchronisation dédiée sur le pavé 4, et dans le contrôleur de synchronisation 36. Le contrôleur de synchronisation 36 peut être mis en oeuvre dans l'interconnexion matérielle 34 ou, comme cela est représenté, dans un module séparé sur la puce. Cette fonctionnalité à la fois de la logique de synchronisation sur les pavés et du contrôleur de synchronisation 36 est mise en oeuvre dans des circuits matériels dédiés de telle sorte que, une fois que l'instruction SYNC est exécutée, le reste de la fonctionnalité procède sans que d'autres instructions soient exécutées pour le faire. [0085] Premièrement, la logique de synchronisation sur chaque pavé amène l'émission d'instructions du superviseur sur le pavé 4 en question à se mettre automatiquement en pause (elle amène l'étage d'extraction 14 et l'ordonnanceur 24 à suspendre l'émission d'instructions du superviseur). Une fois que tous les fils de travail en cours sur le pavé 4 local ont exécuté un EXIT, alors la logique de synchronisation envoie automatiquement une demande de synchronisation "sync_req" au contrôleur de synchronisation 36. Le pavé local 4 continue ensuite à attendre avec l'émission d'instructions du 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 19 de synchronisation). Ainsi à un certain point, une fois que tous les fils de travail finaux dans la phase de calcul courante 52 ont fait un EXIT sur tous les pavés 4 dans la matrice 6, le contrôleur de synchronisation 36 aura reçu une demande de synchronisation (sync req) respective à partir de tous les pavés 4 de la matrice 6. C'est seulement alors, en réponse à la réception du sync reg 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" à la logique de synchronisation sur chacun des pavés 4. Jusqu'à atteindre ce point, chacun des pavés 4 a eu son émission d'instructions de superviseur mise en pause en attente du signal d'accusé de réception de synchronisation (sync ack). À la réception du signal sync ack, la logique de synchronisation se trouvant dans le pavé 4 retire automatiquement la pause de l'émission d'instructions du 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'autre pavés 4 via l'interconnexion 34 dans une phase d'échange ultérieure 50. [0086] De préférence les signaux sync req 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. [0087] La structure de connexion du pavé va maintenant être décrite plus en détail. [0088] Chaque pavé comporte trois interfaces : - une interface exin 224 qui passe des données à partir 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 qui passe le signal de contrôle de multiplexeur 214 (mux-select) du pavé 4 à son multiplexeur 210. [0089] Afin de s'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 planificateur d'échanges qui a besoin d'être conscient des paramètres temporels d'échange (BNET) suivants Afin de comprendre les paramètres, une version simplifiée de la figure 2 est représentée en figure 4. La figure 4 représente aussi un pavé destinataire ainsi qu'un pavé émetteur. [0090] I. Le délai d'accusé de réception de SYNC relatif de chaque pavé, BNET_RSAK (TID). TID est l'identifiant de pavé contenu dans un registre TILE_ID décrit dans la suite. C'est un nombre de cycles toujours supérieur ou égal à 0 indiquant le moment où chaque pavé reçoit le signal d'accusé de réception à partir du contrôleur de synchronisation 36 par rapport au pavé récepteur le plus en avance. Il peut être calculé à partir de l'ID de pavé, en notant que l'ID de pavé indique l'emplacement particulier de la puce sur ce pavé, et par conséquent reflète les distances physiques. La figure 4 représente un pavé émetteur 4,, et un pavé destinataire 4'. Bien que cela soit représenté seulement schématiquement et pas à l'échelle, le pavé 4 est représenté plus près du contrôleur de synchronisation et le pavé 4' est représenté plus loin, avec comme conséquence que le délai d'accusé de réception de synchronisation va être plus court pour le pavé 4, que pour le pavé 41(. 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 peuvent être calculées au vol à chaque fois sur la hase de l'ID de pavé. [0091] H. Le délai de boucle de contrôle de multiplexeur d'échange, BNET MXP (TID de 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 du 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 en résultat de la nouvelle sélection de multiplexeur. En regardant la figure 4, ce délai comprend le délai pour que le signal de commande arrive à partir de l'interface exmux 228, du pavé destinataire 4R à son multiplexeur 210, et la longueur de la ligne entre la sortie du multiplexeur et l'interface exin d'entrée de données 224. [0092] HI. Le délai d'échange de pavé à pavé, BNET_TT (TID de pavé d'envoi, TID de pavé de réception). C'est le nombre de cycles entre l'émission d'une instruction SEND é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 vers la valeur envoyée dans sa propre mémoire. Cela a été déterminé à partir des ID des pavés émetteur et récepteur, soit en accédant à une table comme cela a déjà été décrit, soit par calcul. Si on regarde de nouveau la figure 4, on voit que ce délai comprend le temps pour que des données se déplacent du pavé émetteur 4T à partir de son interface ex_out 226T jusqu'au tissu de commutation 14 le long de son bus d'échange 218T puis via le multiplexeur d'entrée 210, au niveau du pavé récepteur 4, jusqu'à l'interface ex_in 224, du pavé récepteur. [0093] IV. Le délai de mise à jour de pointeur mémoire de trafic d'échange, BNET_MMPQ. C'est le nombre de cycles entre l'émission d'une instruction (PUTi-MEMptr) qui modifie un pointeur en mémoire de trafic d'entrée d'échange du pavé et le point le plus en avance où ce même pavé pourrait émettre une instruction de chargement (hypothétique) pour un échange de données stockées en mémoire comme résultat du nouveau pointeur. C'est un petit nombre fixe de cycles. Le pointeur mémoire n'a pas encore été décrit, mais il est représenté en figure 2 avec la référence 232. Il agit comme 21 pointeur dans la mémoire de données 202 et indique où des données entrantes provenant de l'interface ex in 224 doivent être mémorisées. Cela est décrit plus en détail dans la suite. [0094] Le délai vers l'est suivant le bus d'échangel3NEf FAS1-(T1I)s,TII)r).Cestle délai dans le tissu d'échange à partir du pavé d'envoi jusqu'au pavé destinataire. [0095] Dans la suite, on fait référence à des super-pavés. Chaque super-pavé comprend quatre pavés, chacun muni d'un identifiant comme cela est représenté en figure 16. Comme cela est expliqué ici, l'identifiant de pavé a la forme d'un -1-01 de super-pavé à 5 hits,d'un ID de colonne à 4 hits et d'un ID de pavé à 2 bits. [1\lath.1] TID. tile_sub id [ : oj TileID[ 1: 0]:; -calunin j.7.-id 3 ; 0] Ti1erD[5z2] TInsupertile_idi 4:1 01 TileiDr la t61 [0096] Les composantes de chemin et leurs définitions qui contribuent à ces délais sont données ci-dessous. [Math.2] BUET_RSAI,°(TID) = SeckDelayTo_ReachOtherOidepfExchange(nD) 4 Sack_Delay_Along_Exchange_To_Column_Base(TID) + Column_BaseToTile_DelarTID) + SackDelavNormallzationAdder; BNET_TT(T 0TID1) = Send_To Exchange_Output_Delay TileToleolumnBase_Delay(TIDO) + (Column_BaseCompensationDelay(TIDO))/2 + Column_Base_ToExchangeBusDelay(TIDC) + ABS(Easterly_DelayAlong_Exchanee(TID(,T/D1)) + Exchange_BusTo_ColumnBeeeDelay{TIDO,TIDL) + Column Base_CopensationDelay(TID1) + Columni m Base Minimum_Exohange_input_To_Dependent_LD_Delay; BNETEAST(TIDO, TID1) = Easterly_Deley_Along_Exchange(TIDO,TID1) > 0; ENETMXP(TID) = #From Puti_ToExchange_Controi_Output_Delay Tile_To Column_BaseDelay(TID) + (7 - Coiumn_Base_CompensationDelay(TID); + Column Base To_Opposite_SideOf Exchange_Delay + ENET_MMP = 7 iD Opposie_iTle_Cf_Exchange_To_CoIunn_Base_DelaY CoLumnBaseCompensation_Deley(TID) + CcluitinBase To_TileDelay(TIb) + Minimum Exci,enge_Input_To_Dependent LD Delayl _ 0 ->E0,E7,E2,E3,E4,XD,X2, (LD EO) [Math.3] Co2umaPostion_East,TIC) -(TID.colu -d[31==11:15-TID.col tend,FeExchange Outpu,2Deley = 87 #from £0 -> £0, £2,,,,,E4,15,E6,E7-' eut Pile C Column Ese_pelay(TID) = Tro.8upertils CoLuam_EneeConpeueat&on_delay( i7-(TID.cclunulïd 1301 8);; CCLUCC Esse TMEXC"Ialge-E'lepelaY(TIn) = iTIE.columa_JA MOS 8)/2 + Easteriy_F.e.iay_Air çi LExchane(TIDO,T2n1) 6-,(Coll,,PosstionEestliD1-ColumnPc,rtionEasti=0)) - 6,(TIDO.tile22,bid[G] Ti:M.0°1s id(30 + 2,1D3..tilesub_id e; Cack_ e Aleny .aisys 4o Çoluma_LatTID: Column P92itionEastiTID),-1 2; sack_D-51ay_uormalis,tion_Adder = -5; [0097] La figure 5 représente plus en détail le déroulement temporel des échanges. Sur le côté gauche de la figure 4 se trouvent les cycles d'horloge 1PU allant de 0 à 30. L'action sur le pavé d'envoi 4T survient entre les cycles d'horloge 1PU 0 et 9, en commençant par l'émission d'une instruction d'envoi (SEND F3). Dans les cycles d'horloge 1PU 10 à 24, la donnée suit son chemin en pipeline dans le tissu de commutation 34. 100981 En regardant le pavé de réception 4R clans le cycle d'horloge 1PU 11 on voit qu'une instruction PUTi est exécutée pour changer la sélection de multiplexeur d'entrée de pavé : PUTi-MXptr (F3). En figure 5, cette instructions PUTi est nommée "PUTi 1NCOMING MUX (F3)". 100991 Dans le cycle 18, l'instruction de pointeur mémoire est exécutée, PUTi-MEMptr (F3), permettant une instruction de chargement dans le cycle d'horloge ITU 25. En figure 5, cette instructions PUTi est notée "PUTi 1NCOMING ADR (F3)". 101001 Sur le pavé d'envoi 4' les cycles d'horloge 1PU 1, 3 et 5 sont notés "Transport ( )". Cela est un délai de pavé interne entre l'émission d'une instruction SEND et la manifestation des données de l'instruction SEND sur l'interface exout. F4, El, E3, etc. représentent des données provenant d'instructions SEND antérieures dans le transport vers l'interface exout. Le cycle d'horloge 1PU 2 est alloué à la formation d'une adresse EO pour une instruction SEND. On notera que c'est l'adresse d'où EO doit être extrait, pas son adresse de destination. Dans le cycle d'horloge 1PU 4, un macro de mémoire est exécuté pour extraire E2 de la mémoire. Dans le cycle d'horloge IPU 6 un contrôle de parité est réalisé sur E4. Dans le cycle d'horloge IPU 7 une instruction de sortie MUX est exécutée pour envoyer E5. Dans le cycle d'horloge IPU 8, E6 est codé et dans le cycle d'horloge IPU E7 est fourni en sortie. 23 [0101] Dans le tissu d'échange 34, les cycles d'horloge IPU 10 à 24 sont notés "étage de pipeline d'échange". Dans chaque cycle, une donnée se déplace d'un "pas" suivant le pipeline (entre des stockages temporaires). [0102] Les cycles 25 à 28 représentent le délai sur le pavé récepteur 4' entre la réception d'une donnée au niveau de l'interface exin (voir Mem Macro (E2) pour Exc), tandis que les cycles 25 à 29 représentent le délai entre la réception d'une donnée au niveau de l'interface exin et son chargement en mémoire (voir Mem Macro (E2)) pour LD. D'autres fonctions peuvent être réalisées dans ce délai - voir Earliest LD (F3), Reg file rd (F4), form adds (EO), Transport (El). [0103] En termes simples, si le processeur du pavé de réception 4R veut agir sur une donnée (par exemple F3) qui était la sortie d'un processus sur le pavé émetteur 4,, alors le pavé émetteur 4, doit exécuter une instruction SEND [SEND F3)] à un certain instant (par exemple le cycle d'horloge IPU 0 en figure 5), et le pavé récepteur doit exécuter une instruction de contrôle de commutateur PUTi EXCH MXptr (comme dans le cycle d'horloge IPU 11) un certain temps après l'exécution de l'instruction SEND [SEND (F3)] sur le pavé émetteur. Cela va assurer que les données arrivent au niveau du pavé récepteur à temps pour être chargées [carliest LD (F3)] dans le cycle IPU 25 pour utilisation dans un codelet qui est exécuté au niveau du pavé récepteur. [0104] On notera que le processus de réception au niveau d'un pavé récepteur n'a pas besoin d'impliquer le réglage du pointeur mémoire comme avec l'instruction PUTi MEMptr. Au lieu de cela, le pointeur mémoire 232 (figure 2) 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 l'emplacement mémoire disponible suivant. Cependant, la capacité à 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 amène les caractéristiques temporelles d'un échange interne (les échanges internes sur la puce) à être complètement déterministes dans le temps. Ce déterminisme temporel peut être utilisé par l' ordonnanceur d'échange pour optimiser fortement des séquences d'échange. [0105] On va faire référence aux figures 14 et 15, qui illustrent un exemple de la disposition de colonnes sur la puce de processeur 2, illustrant l'agencement de pavés 4 sur la puce plus en détail. Chaque pavé 4 fait partie d'un ensemble de 4 pavés, appelé super-pavé 61. Chaque super-pavé 61 comprend quatre pavés 4. Pour simplifier, seuls quelques-uns des super-pavés 61 représentés en figure 15 sont représentés divisés en leurs pavés constituants. [0106] Chaque super-pavé 61 fait partie d'un sous-système de pavés appelé colonne 62R. Par conséquent, chaque pavé 4 fait aussi partie d'une colonne 62R. Dans un mode de réa- 24 lisation, chaque colonne 62 comprend vingt super-pavés 61, numérotées ST0 à Sti, (80 pavés au total). [0107] Comme cela a été décrit précédemment, chaque pavé 4 comporte une connexion d'entrée 217 de 32 bits, et une connexion de sortie 218 dc 32 bits. Comme cela a été mentionné, le pavé 4 sait (puisque cela est défini dans la séquence d'instructions compilée pour le pavé) qu'il va attendre une donnée provenant d'un certain pavé émetteur à un certain instant, et il exécute une instruction PUTi-MUXptr, pour contrôler le multiplexeur pour commuter à un certain instant sur l'entrée connectée à l'ensemble de fils de connexion 140 qui est connecté à la sortie 218 du pavé d'envoi. Cela assure que la donnée va apparaître au niveau de la sortie 230 du multiplexeur de 210 à l'instant où le pavé récepteur s'attend à le recevoir. [0108] Le multiplexeur de 210 reçoit un signal de commande de multiplexeur sur la ligne dc commande 214 qui identifie un identifiant de pavé unique indiquant où ce multiplexeur doit 'pointer. C'est-à-dire, à quel ensemble dc fils croisés sur le bus d'échange 34 doit se connecter ce multiplexeur afin 'd'écouter le pavé à partir duquel une transmission est attendue à cet instant. [0109] Dans l'agencement décrit ici, le multiplexeur pour les pavés se trouvant dans chaque colonne est connecté à un groupement de 40 ensembles des fils croisés d'échange. Chaque ensemble permet de transporter une donnée de 32 bits sur le bus d'échange. Comme cela est également représenté en figure 14, les ensembles sont divisés en deux, qui sont appelés Est et Ouest (en fonction du côté de la colonne auquel les multiplexeurs seraient connectés). La figure 14 représente deux multiplexeurs connectés à un super-pavé ST2 de sur le côté est de la colonne, et deux multiplexeurs connecté à un super-pavé ST3 sur le côté est de la colonne. Sur le côté ouest de la colonne, deux multiplexeurs sont représentés connectés à deux pavés clans le super-pavé ST2. Dans un but de clarté, aucun autre multiplexeur ni aucune autre ligne de connexion ne sont représentés en figure 14, mais on remarquera qu'il y a cieux multiplexeurs pour chaque super-pavé sur chaque côté de la colonne, ce qui donne un total de vingt multiplexeurs sur le côté est et vingt multiplexeurs sur le côté ouest. Chaque multiplexeur devrait être capable de connecter l'un quelconque des 1280 ensembles de fils croisés d'échange se trouvant dans le tissu d'échange 34. Dans certaines puces, seuls 1216 fils croisés d'échange sont nécessaires, mais dans d'autres tous les 1280 ensembles peuvent être actifs. Afin de mettre en oeuvre un multiplexeur à 1216 voies, de telle sorte qu'une réparation puisse être effectuée efficacement, chaque multiplexeur 210 comprend 32 tranches de multiplexeur à 40 voies qui sont illustrées en figure 12. Les tranches de multiplexeur sont référencées 1210-0, 1210-1... 1210-31. Le nombre de 32 a été choisi pour concorder avec le nombre de demi-colonnes clans la matrice qui sont connectées à chaque bus d'échange. On notera que ce nombre peut varier puisque le nombre de colonnes varie en fonction de chaque architecture de processeur particulière. Toutefois, dans des modes de réalisation préférés, il y a une tranche de multiplexeur à n voies par demi-colonne. Le multiplexeur 210 comprend un bloc de décodage 1220 qui reçoit le signal de commande MUX sur une ligne 214. Comme cela a été mentionné, le bloc de décodage reçoit l'identifiant de pavé unique du pavé émetteur sur la ligne de commande de MUX 214. Le bloc de code 1220 sélectionne l'une des 32 tranches de multiplexeur sur la base des bits d'identifiant de colonne dans l'identifiant de pavé. Ensuite, le bit le moins significatif de l'identifiant de pavé indique si un ensemble d'entrées côté est ou un ensemble d'entrés côté ouest de cette tranche de multiplexeur doit être sélectionné (en fonction du fait que le pavé émetteur est sur le côté est ou ouest de la colonne émettrice). Ensuite, les bits d'identifiant de super-pavé de l'identifiant de pavé sont utilisés pour sélectionner l'une de 20 entrées dans la tranche est ou ouest du multiplexeur 1210. De cette manière, une entrée particulière est sélectionnée à l'instant où un message provenant du pavé émetteur est attendu en réception au niveau du pavé récepteur d'une manière déterministe dans le temps comme cela a été décrit précédemment. [0110] Comme cela est également illustré en figure 15, un délai de compensation en fonction de la colonne peut être introduit pour permettre d'utiliser un code d'échange identique pour des échanges intra-colonnes similaires et pour certains motifs d'échanges inter-colonnes similaires. Dans ce contexte, le code d'échange comprend la séquence d'instructions impliquée dans la phase d'échange et qui gère l'échange de données entre pavés. Le code d'échange comprend au moins l'instruction SEND et l'instruction de commande de commutateur. En outre, le code d'échange peut comprendre l'instruction de pointeur mémoire qui peut déterminer l'adresse à laquelle des données entrantes sont chargées. Un délai de compensation en fonction de la colonne peut être introduit en sélectionnant un certain nombre d'étages de retard pour former un circuit de retard introduit dans chacune des composantes de chemin concernées d'un chemin d'échange entre pavés. Comme cela apparaîtra évident d'après la discussion précédente, un chemin d'échange comprend les composantes suivantes. [0111] 11 y a un délai entre pavé et base de colonne qui est le temps pris par une donnée pour se propager d'une unité de traitement dans la colonne jusqu'à la base de la colonne. Ce délai dépend de la position du pavé dans la colonne (et est plus long pour les pavés qui sont plus loin de la base de la colonne). Le délai entre pavé et base de colonne est fixé par la position du pavé dans la colonne et est par conséquent le même pour tous les pavés disposés respectivement dans chaque colonne. [0112] Le délai de compensation de colonne permet d'introduire une compensation dans le chemin de sortie 218 qui transporte la sortie du pavé jusqu'au bus d'échange. Cela est 26 indiqué par un bloc 318 dans chacune des lignes de sortie illustrées. On remarquera qu'en théorie, le circuit de retard pourrait être situé n'importe où dans le chemin de sortie 218, mais qu'en pratique le délai de compensation en fonction de la colonne pour la ligne de sortie peut facilement être mis en oeuvre sous forme d'un ensemble d'étages de retard dans l'espace entre la base de la colonne et le tissu de commutation sur la puce. La figure 15 est très schématisée pour illustrer les concepts sous-jacents. [0113] Le délai entre base de colonne et bus d'échange est le temps pris pour que la donnée parcoure la distance entre la base de la colonne (à partir de l'étage de délai de compensation de base de colonne) jusqu'au groupe de fils de bus d'échange associé à cette colonne. On notera que d'après la figure 15 cette distance est plus grande pour les colonnes du côté est, puisqu'elles utilisent des fils de bus d'échange qui sont plus au "sud" que les colonnes du côté ouest. En fait, chaque colonne du côté nord comporte des fils de sortie connectés à un groupe adjacent respectif (se déplaçant vers le sud) de fils de bus d'échange allant vers le point milieu du bus d'échange. Inversement, chaque colonne du côté sud comporte des fils de sortie connectés à un groupe adjacent respectif se déplaçant vers le nord. [0114] Tl y a un délai dans le tissu d'échange pendant que la donnée se propage pour être prélevée à l'instant correct par le pavé destinataire (qui peut être dans la même colonne ou dans une autre colonne). On notera qu'il peut y avoir des délais de tissu d'échange horizontalement même lorsqu'un pavé s'envoie un message à lui-même. [0115] Un autre délai de compensation de base de colonne peut ensuite être introduit sur le côté de l'entrée pour le pavé destinataire. Cela est illustré en figure 15 sous forme d'un circuit de retard 317 dans la sortie du multiplexeur 210. Une fois encore, on remarquera que le délai de chemin inhérent à partir du groupe de fils d'échange jusqu'à leurs colonnes du côté le plus à l'est est supérieur à celui sur le côté le plus à l'ouest. On notera toutefois que tout délai de compensation introduit dans le chemin d'entrée affecte aussi le délai de boucle de commande de MUX d'échange, BNT_MXP. Pour garantir que celui-ci n'est pas affecté, ce délai doit être compensé par une compensation de délai correspondante dans la ligne de commande de MUX 214, comme cela est représenté par le circuit de retard 314. [0116] Il y a ensuite une composante de chemin pendant que la donnée se propage de la base de colonne (à partir de la sortie du délai de compensation en fonction de la colonne) jusqu'au pavé respectif dans la colonne. Celui-ci est basé sur la position du pavé dans la colonne. [0117] Il n'y a pas d'autres délais dans le chemin d'échange, qui soient internes aux pavés eux-mêmes. Au début d'un processus de transmission, il y a un délai entre l'exécution de l'instruction SEND et l'instant où la donnée arrive au niveau de l'interface EX_OUT du pavé. Celui-ci est identique pour tous les pavés. 27 [0118] En plus, il y a un délai entre la réception d'une donnée au niveau d'un pavé et le premier instant où elle peut hypothétiquement être chargée. Celui-ci est identique pour tous les pavés. [0119] Chaque délai de compensation comprend une pluralité d'étages de retard qui peuvent être sélectionnés lorsque le processeur est initialement mis en place. Selon un mode de réalisation, les retards pourraient être définis au moment de la fabrication de l'ordinateur. Dans un autre mode de réalisation, les étages de retard peuvent être sélectionnés de manière programmable (par exemple en utilisant des dérivations entre des étages de retard) avant que du code soit chargé dans les pavés respectifs de l'ordinateur. [0120] Sans compensation, les échanges intra-colonnes de pavé à pavé dans une colonne n seraient plus longs que ceux dans les colonnes situées à l'ouest de celle-ci, en raison du temps mis pour traverser le bus d'échange dans la direction nord/sud. Selon une mise en oeuvre, le but est de garantir que le délai BNET TT d'échange intra-colonne de pavé à pavé ne dépend pas de l'identifiant de colonne. Cela signifie que des colonnes différentes peuvent toutes exécuter le même code d'échange d'une manière déterministe dans le temps. [0121] Pour obtenir cela, lorsque le pavé émetteur et le pavé destinataire sont dans la même colonne, la somme du délai de compensation de hase de colonne sur le chemin de sortie et du délai entre hase de colonne et bus d'échange est réglée pour être constante. Comme cela a été expliqué précédemment, le délai entre base de colonne et bus d'échange varie en fonction de l'identifiant de colonne, mais on peut arranger cela par le délai de compensation de base de colonne. [0122] En outre, la somme du délai entre bus d'échange et base de colonne et du délai de compensation en fonction de la colonne sur le côté d'entrée peut aussi être réglée à une valeur constante. C'est-à-dire que comme cela a été expliqué précédemment, le délai entre bus d'échange et base de colonne varie en fonction de l'identifiant de colonne, mais cela peut être compensé par le délai de compensation sur le côté d'entrée. [0123] En utilisant les mêmes valeurs constantes pour ces deux sommes pour chaque colonne, les délais infra-colonnes inter-pavés ne dépendent pas de l'identifiant de colonne. [0124] Dans une autre mise en oeuvre (qui peut être mise en oeuvre dans la même ar- chitecture que la première), des délais inter-colonnes inter-pavés ont aussi une certaine régularité et les délais de compensation peuvent être conçus de telle sorte que du code d'échange puisse être réutilisé pour certains motifs d'échange. [0125] Dans un premier cas, lorsque les pavés émetteur et destinataire sont tous les deux situés dans des colonnes du côté nord ou tous les deux situés dans des colonnes du côté sud, le délai inter-pavé est fonction de (TIDr.columnidMOD 8) TIDs.column_id 28 MOD8). Par exemple, du code d'échange pour du trafic entre les colonnes 1 et 4 pourrait être réutilisé pour un motif d'échange similaire entre les colonnes 2 et 5, préservant à la fois la direction et la distance physique des transactions d'échange. [0126] Dans un deuxième cas, lorsque le pavé d'envoi est dans une colonne du côté nord et le pavé récepteur est dans une colonne du côté sud ou vice versa, alors les délais inter-pavés sont fonction de (T1Dr.column idMOD 8)--(TIDs.column idMOD8). Par exemple, du code d'échange pour du trafic entre les colonnes 0 et 13 pourrait être réutilisé pour un motif d'échange similaire entre les colonnes 1 et 12, préservant à la fois la direction et la distance physique de chaque transaction d'échange. [0127] Ccla peut être obtenu en comprenant qu'il y a une composante du délai inter-pavé qui dépend des identifiants relatifs des colonnes d'envoi et de réception : la somme de ABS (délai vers l'est dans le bus d'échange TTDs, T1Dr) + délai entre bus d'échange et hase de colonne (TTDs, TIDr) + délai de compensation de base de colonne (TIDr). [0128] Le premier terme ABS est fonction de l'espace séparant les colonnes physiques : ABS (position de colonne vers l'est) TTDs - position de colonne vers l'est (TIDr)). [0129] Ccla se simplifie en : [Math.4] (TIDe.columnid131== TIDE-colulanidi3])? ABSUTIDs.column_id MOD 6) - (TIDr.column_id MOD 8)): ABSC(TiDs-column_id MOD 8) - -rTIDr.columnid MOD 8)1; La somme de la deuxième paire de termes se simplifie en : (TIDs.column id[31== TIDr.column id[3])? 8 NTIDs.columnid MOD 8) - (TIDr.coluffm_id MOD 1G - "TIDs.columnid MOD 8) - -(TIDr.columpjd MD 101301 Formule simplifiée des délais : 1Math.51 BYET_MXP(TID) = Puti ToExchangeContfol Outpu + 'Pile To_Column 5aaeDelav(TID) 7 + Column Base To Osposite Side_Of Exchenge Delay , OpPofiteSide Of Exchange To Colunn_Base Delay Column_Base To_Tile_Delav(TID) MinimumEucange Input ToDependentLDDelay; ENET_I TIDO, TID1) = SendToExchange_Output_Delay + Tile To Coi.uca} Base Delav(TIDO) ABS(Easteflv Delay Along Exchan.pe(TIDO,TIDIO (TiDe.colomn id(31== TIOr.column id[3])? 8 + T(TIDO.columnid MOÏ-, 8) - (TID1.00lum d OD 8;): - ((TIDwO,00lama id MOD 8) - d MOD g)/: Coluum Base To + Minimum ExcilanceznputToDepandent.LDDelay; [0131] Le tableau représenté en figure 17, tableau I, indique un exemple de nombre d'étages de délai de compensation. Ceux-ci sont représentés schématiquement en figure 15 par les nombres à l'intérieur des circuits de compensation de délai pour la première 29 colonne (colonne 0), et la énième colonne dans la matrice nord (colonne n). C'est-à-dire que, selon cet exemple, pour la colonne 0 un circuit de retard 318 entre pavé et bus d'échange comprend 3 étages de retard. La compensation de délai entre bus d'échange et pavé 317 comprend 7 étages. On notera que cela reflète la différence de temps pour qu'une donnée d'entrée traverse le bus d'échange (dans ce cas dans une direction vers le nord) dans le cas de la colonne 0 et le cas de la colonne n. Il n'y a pas de délai de compensation sur la ligne 214 de commande de commutateur pour la colonne O. Toutefois, pour les raisons expliquées précédemment afin de maintenir le délai de boucle de commande de MUX d'échange non affecté, il y a un délai de sept étages pour la ligne de commande de commutateur provenant de la colonne n. [0132] Dans le tableau représenté en figure 18, un exemple arbitraire spécifique est donné à titre d'illustration. Dans cet exemple, le pavé d'envoi 1186 est en colonne 0, super-pavé numéro 18, et le pavé récepteur 1153 est en colonne 8, super-pavé numéro 18. Dans ce cas n=7 (8 colonnes de chaque côté du tissu d'échange). Cela donne un exemple d'un délai de pavé à pavé particulièrement long. Comme on peut le voir dans l'exemple spécifique, le délai de compensation de hase de colonne dans le chemin sortant comprend la compensation de délai de 3 étages qui est cohérente avec le délai de compensation entre pavé et hase de colonne d'échange dans le tableau I. En outre, le délai de compensation de hase de colonne au niveau du côté récepteur est égal à 7, ce qui est cohérent avec les étages de délai de compensation entre bus d'échange et pavé dans le tableau I. On remarquera facilement que le tableau I peut être utilisé pour déterminer les délais inter-pavés pour n'importe quelle paire de pavés émetteur et récepteur, en prenant en compte les délais de compensation accompagnés des autres paramètres de délai déjà décrits ici. Ce tableau peut ensuite être utilisé pour déterminer les caractéristiques temporelles des échanges déterministes dans le temps lorsque du code est compilé pour les pavés des colonnes respectives. On notera en figure 18 que les délais dans le bus d'échange sont définis vers l'est, et qu'ainsi un délai vers l'ouest est représenté négatif (par exemple - 43). [0133] 11 y a un autre facteur qui doit être pris en compte dans certains modes de réalisation pour permettre que du code compilé spécifiquement pour une colonne (ou un groupe de colonnes) soit exécuté sans modification sur les pavés respectifs se trouvant dans une colonne différente (ou un groupe de colonnes différent). Dans de tels modes de réalisation, lorsque du code d'échange est généré, les instructions utilisées pour programmer le multiplexeur entrant expriment les pointeurs (tileID) explicitement. Ainsi (par exemple) si une séquence de code d'échange infra-colonne est exécutée sur une colonne différente, alors les paramètres du multiplexeur entrant vont pointer vers des bus d'échange provenant de la colonne d'origine au lieu des bus appartenant aux pavés respectifs dans la nouvelle colonne. Ce problème peut être résolu en pro- grammant un registre COLUMN_OFFSET (qui est dans les registres de statut de contexte du pavé représentés en figure 2) à une valeur non nulle. Cela provoque une modification de tous ces pointeurs incoming mux (implicitement) juste avant qu'ils soient envoyés au multiplexeur du pavé concerné. Par exemple, pour prendre une séquence de code d'échange intra-colonne compilée pour les pavés en colonne 0 et pour l'exécuter à la place sur les pavés en colonne 1, alors chaque pavé en colonne 1 doit programmer son registre COLUMN_OFFSET à '1' avant d'exécuter sa partie du code d'échange. Pour exécuter du code compilé pour une colonne du côté nord sur une colonne du côté sud (ou vice versa) la notion de 'est' et 'ouest' est permutée en mettant en place un bit spécial dans le registre COLUMN OFFSET. Cela s'applique à toutes les instructions d'envoi non multidiffusécs et pour une réception d'une largeur de 64 bits. Le mécanisme dc commande dc multiplexeur destiné à faciliter la réutilisation du code d'échange entre des groupes de colonnes similaires d'un point de vue topologique est décrit ci-après. [0134] Par exemple : quatre groupes de 3 colonnes sont représentés avec des hachures dif- férentes en figure 19. Les quatre groupes dc colonnes illustrés sont { 1, 2, 11}, {4, 5, 8}, {9, 10, 3}, { 12, 13, 0}. Ces groupes particuliers ont été choisis seulement pour illustrer cette flexibilité du mécanisme - d'autres options sont possibles. En supposant que du code d'échange est généré pour les pavés dans l'un des groupes - alors le même code peut être utilisé dans les autres groupes. Pour rendre cela possible - le champ column_id se trouvant dans le registre de statut de contexte SINCOMING_MUX est ajusté implicitement par un mécanisme matériel dans chaque pavé. Du matériel dans chaque processeur de pavé modifie le champ column_id dans SINCOMING_MUX (bits [5:2]) selon l'équation 1 : modified_column_id [3:0] - MOD($INCOMING_MUX[5:2] + (($INCOMING_MUX[5:2]