Brevet FR3072801A1 — publié le 20190426

B17816 FR - 408525FR DESCRIPTION TITRE : SYNCHRONISATION DANS UNE MATRICE DE TRAITEMENT A PAVES MULTIPLES Domaine technique [0001] La présente description concerne la synchronisation des charges de travail de multiples pavés différents dans un processeur comprenant de multiples pavés, chaque pavé comprenant une unité de traitement munie d'une mémoire locale. En particulier, la description concerne un protocole informatique parallèle synchrone massif (BSP) dans lequel 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] 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 multi-fil, ou en effet d'une matrice multi-pavé dans laquelle chaque pavé comprend une unité de traitement multi-fil. [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 2 B17816 FR - 408525FR portions séparées de code de programme peuvent être exécutés 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. [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é. Il existe un certain nombre de schémas possibles pour obtenir cela, mais le schéma qui nous intéresse ici est connu sous le nom de "parallèle synchrone massif" (BSP). Selon le schéma BSP, chaque pavé réalise une phase de calcul et une phase d'échange 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 de calcul précédente vers et/ou à partir d'un ou plusieurs autres des pavés du groupe, mais ne commence pas de nouvelle phase de 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 3 B17816 FR - 408525FR phase de calcul, ou les deux. C'est-à-dire que soit : (a) tous I p.q 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'é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 pondérations. 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 4 B17816 FR - 408525FR souhaitée pour une plage d'entrées possible. 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 interconnexions du graphe correspondent à des données à échanger entre les noeuds. Typiquement, au moins une partie du traitement de chaque noeud peut être réalisée indépendamment de certains ou de tous les autres noeuds du graphe, et par conséquent de grands graphes présentent des opportunités pour un parallélisme massif. Résumé de l'invention [0008] Comme cela a été mentionné précédemment, un modèle d'intelligence artificielle représentant le modèle de connaissance et les informations algorithmiques concernant la manière dont le modèle de connaissance est utilisé pour apprendre et pour faire des inférences peut en général être représenté par un graphe de multiples noeuds interconnectés, chaque noeud ayant une exigence de traitement sur des données. Des interconnexions du graphe indiquent des données à échanger entre les noeuds et par conséquent provoquent des dépendances entre les fragments de programme exécutés au niveau des noeuds. En général, le traitement au niveau d'un noeud peut être exécuté indépendamment d'un autre noeud, et par conséquent de B17816 FR - 408525FR grands graphes présentent un parallélisme énorme. Une machine parallèle fortement répartie est une structure de machine appropriée pour les calculs de tels modèles d'intelligence artificielle. Cette fonctionnalité permet de concevoir une machine pour apporter certaines garanties de déterminisme temporel. [0009] Un élément 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 de noeuds et de graphe constituant le graphe ne change pas usuellement pendant l'exécution des 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 ce déterminisme temporel qui est utilisé dans les modes de réalisation décrits dans la suite pour des optimisations significatives dans la conception d'un ordinateur optimisé pour traiter des charges de travail sur la base de modèles de connaissance. [0010] Selon un aspect de l'invention, on prévoit un ordinateur comprenant une pluralité d'unités de traitement, chacune comportant un stockage d'instructions contenant un programme local, une unité d'exécution exécutant le programme local, un stockage de données pour maintenir des données ; 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és de traitement par l'ensemble de fils de sortie respectif et connectable à chacune des unités de traitement par les fils d'entrée respectifs par l'intermédiaire de circuits de commutation contrôlables par chaque unité de traitement ; un 6 B17816 FR - 408525FR 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, les unités de traitement étant agencées pour exécuter leurs programmes locaux selon une horloge commune, les programmes locaux étant tels que dans la phase d'échange au moins une unité de traitement exécute une instruction d'envoi à partir de son programme local pour émettre à un instant d'émission un paquet de données sur son ensemble de fils de connexion de sortie, le paquet de données étant destiné à au moins une unité de traitement destinataire mais ne comportant pas d'identifiant de destination, et à un instant de commutation prédéterminé l'unité de traitement destinataire exécutant une instruction de contrôle de commutateurs à partir de son programme local pour contrôler ses circuits de commutation pour connecter son ensemble de fils d'entrée au tissu de commutation pour recevoir le paquet de données à un instant de réception, l'instant d'émission, l'instant de commutation et l'instant de réception étant gouvernés par l'horloge commune par rapport au signal de synchronisation. [0011] Un autre aspect de l'invention prévoit un procédé de calcul d'une fonction dans un ordinateur comprenant : une pluralité d'unités de traitement, chacune comportant un stockage d'instructions contenant un programme local, une unité d'exécution pour exécuter le programme local, un stockage de données pour maintenir des données, 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és de traitement par les ensembles de fils de sortie respectifs et connectable à chacune des unités de traitement par ses fils d'entrée respectifs par l'intermédiaire de circuits de commutation contrôlables par chaque unité de traitement ; et 7 B17816 FR - 408525FR 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, le procédé comprenant : les unités de traitement exécutent leurs programmes locaux dans une phase de calcul selon une horloge commune, à un instant prédéterminé dans la phase d'échange au moins une unité de traitement exécutant une instruction d'envoi à partir de son programme local pour émettre à un instant d'émission un paquet de données sur son ensemble de fils de connexion de sortie, le paquet de données étant destiné à au moins une unité de traitement destinataire mais ne comportant pas d'identifiant de destination, et à un instant de commutation prédéterminé l'unité de traitement destinataire exécutant une instruction de contrôle de commutateurs à partir de son programme local pour contrôler les circuits de commutation pour connecter son ensemble de fils d'entrée au tissu de commutation pour recevoir le paquet de données à un instant de réception, l'instant d'émission, l'instant de commutation et l'instant de réception étant gouvernés par l'horloge commune par rapport au signal de synchronisation. [0012] En principe, le signal de synchronisation pourrait être généré pour contrôler la commutation d'une phase de calcul vers la phase d'échange, ou de la phase d'échange vers la phase de calcul. Pour l'architecture déterministe dans le temps définie ici, il est toutefois préférable que le signal de synchronisation soit généré de manière à commencer la phase d'échange. Dans un mode de réalisation, chaque unité traitement indique au module de synchronisation que sa propre phase de calcul est terminée, et le signal de synchronisation est généré par le module de synchronisation lorsque toutes les unités de traitement ont indiqué que leur propre phase de calcul est terminée, pour commencer la phase d'échange. 8 B17816 FR - 408525FR [0013] L'instant d'émission devrait être prédéterminé pour permettre que l'échange déterministe dans le temps s'achève correctement. Il peut être déterminé en étant à un nombre connu de cycles d'horloge après l'instant où l'instruction d'envoi est exécutée, en supposant que l'instant où l'instruction d'envoi est exécutée est prédéterminé. En variante, l'instant d'émission pourrait être à un délai connu, déterminé d'une autre manière, à partir d'un temps connu à partir de l'exécution de l'instruction d'envoi. Ce qui est important est que l'instant d'émission soit connu par rapport à l'instant de réception sur une unité de traitement destinataire visée. [0014] Les caractéristiques de l'instruction d'envoi peuvent inclure que l'instruction d'envoi définisse explicitement l'adresse d'envoi identifiant un emplacement dans le stockage de données à partir duquel le paquet de données doit être envoyé. En variante, aucune adresse d'envoi n'est explicitement définie dans l'instruction d'envoi, et les paquets de données sont transmis à partir d'une adresse d'envoi définie dans un registre défini implicitement par l'instruction d'envoi. Le programme local peut inclure une instruction de mise à jour d'adresse d'envoi pour mettre à jour l'adresse d'envoi dans le registre implicite. [0015] Dans les modes de réalisation décrits ici, le circuit de commutation comprend un multiplexeur comportant un ensemble de fils de sortie connecté à son unité de traitement, et plusieurs ensembles de fils d'entrée connectés au tissu de commutation, d'où il résulte que l'un des multiples ensembles de fils d'entrée est sélectionné par un contrôle fait par l'unité de traitement. Chaque ensemble peut comprendre 32 bits. Lorsqu'on utilise des données de 64 bits, une paire de multiplexeurs peut être connectée à une unité de traitement et contrôlée conjointement. 9 B17816 FR - 408525FR [0016] Dans le mode de réalisation décrit, l'unité de traitement destinataire est agencée pour recevoir le paquet de données et le charger dans le stockage de données à un emplacement mémoire identifié par un pointeur mémoire. Le pointeur mémoire peut être automatiquement incrémenté après que chaque paquet de données a été chargé dans le stockage de données. En variante, le programme local au niveau de l'unité de traitement destinataire peut inclure une instruction de mise à jour de pointeur mémoire qui met à jour le pointeur mémoire. [0017] L'instruction d'envoi peut être agencée pour identifier un nombre de paquets de données à envoyer, chaque paquet de données étant associé à un instant d'émission différent, puisqu'ils sont envoyés en série à partir de l'unité de traitement. [0018] L'un des ensembles de fils d'entrée du multiplexeur peut être contrôlé de manière à être connecté à une entrée nulle. Cela pourrait être utilisé pour ignorer des données qui autrement arrivent à l'unité de traitement. [0019] L'unité de traitement destinataire qui est destinée à recevoir un paquet de données particulier pourrait être la même unité de traitement que celle qui a exécuté une instruction d'envoi à un instant antérieur, d'où il résulte que la même unité de traitement est agencée pour envoyer un paquet de données et recevoir ce paquet de données à un instant ultérieur. Le but qu'une unité de traitement "s'envoie à elle-même" peut être de faire adhérer un agencement dans sa mémoire de données entrantes entrelacées avec des données reçues d'autre unité de traitement. Dans certains modes de réalisation au moins deux des unités de traitement peuvent coopérer dans une paire émettrice où un premier paquet de données est émis à partir d'une première unité de traitement B17816 FR - 408525FR de la paire par l'intermédiaire de son ensemble de fils de connexion de sortie, et un deuxième paquet de données est émis à partir de la première unité de traitement de la paire par l'intermédiaire de l'ensemble de fils de connexion de sortie de la deuxième unité de traitement de la paire pour effectuer une émission à double largeur. Dans certains modes de réalisation, au moins deux des unités de traitement peuvent fonctionner en tant que paire réceptrice où chaque unité de traitement de la paire contrôle ses circuits de commutation pour connecter son ensemble de fils d'entrée respectif au tissu de commutation pour recevoir des paquets de données respectifs provenant de pavés respectifs d'une paire émettrice. [0020] Les multiples unités de traitement peuvent être agencées pour exécuter des instructions d'envoi respectives pour émettre des paquets de données respectifs, au moins certains des paquets de données n'étant destinés à aucune unité de traitement destinataire. [0021] La fonction en cours de calcul peut être fournie sous la forme d'un graphe statique comprenant une pluralité de noeuds interconnectés, chaque noeud étant mis en oeuvre par un codelet des programmes locaux. Un codelet définit un sommet (noeud) dans le graphe, et peut être considéré comme un fil d'exécution atomique, décrit ci-après dans la description. Dans la phase de calcul, chaque codelet peut traiter des données pour produire un résultat, certains des résultats n'étant pas nécessaires pour une phase de calcul ultérieure et n'étant reçus par aucune unité de traitement destinataire. Ils sont effectivement supprimés, mais sans avoir besoin de réaliser d'action de suppression positive. Dans la phase d'échange, les paquets de données sont transmis entre unités de traitement par l'intermédiaire du tissu de commutation et des circuits de commutation. On notera que dans la phase 11 B17816 FR - 408525FR d'échange certaines instructions sont exécutées à partir du programme local pour mettre en oeuvre la phase d'échange. Ces instructions comprennent l'instruction d'envoi. Bien que la phase de calcul soit responsable des calculs, on notera qu'il peut être possible d'inclure certaines fonctions arithmétiques ou logiques pendant la phase d'échange, pourvu que ces fonctions ne comportent pas de dépendance de données par rapport au déroulement temporel du programme local afin qu'il reste synchrone. [0022] L'architecture déterministe dans le temps décrite ici est particulièrement utile dans des contextes où le graphe représente une fonction d'intelligence artificielle. [0023] Un tissu de commutation peut être agencé de telle sorte que dans la phase d'échange des paquets de données soient transmis dans celui-ci en pipeline par l'intermédiaire d'une succession de stockages temporaires, chaque stockage maintenant un paquet de données pendant un cycle de l'horloge commune. [0024] Selon un autre aspect, on prévoit un procédé mis en oeuvre par ordinateur de génération de multiples programmes pour délivrer une fonction informatique, chaque programme étant destiné à être exécuté dans une unité de traitement d'un ordinateur comprenant une pluralité d'unités de traitement comportant chacune un stockage d'instructions pour maintenir un programme local, une unité d'exécution pour exécuter le programme local et un stockage de données pour maintenir des données, un tissu de commutation connecté à une interface de sortie de chaque unité de traitement et connectable à une interface d'entrée de chaque unité de traitement par des circuits de commutation contrôlables par chaque unité de traitement, et un module de synchronisation actionnable pour générer un signal de synchronisation, le 12 B17816 FR - 408525FR procédé comprenant : générer un programme local pour chaque unité de traitement comprenant une séquence d'instructions exécutables ; déterminer pour chaque unité de traitement un temps d'exécution relatif d'instructions de chaque programme local d'où il résulte qu'un programme local alloué à une unité de traitement est planifié pour exécuter, avec un retard prédéterminé par rapport à un signal de synchronisation, une instruction d'envoi pour émettre au moins un paquet de données à un instant d'émission prédéterminé, par rapport au signal de synchronisation, destiné destinataire mais n'ayant pas à une unité de traitement d'identifiant de destination, et un programme local alloué à l'unité de traitement destinataire est planifié pour exécuter à un instant de commutation prédéterminé une instruction de contrôle de commutateurs pour contrôler les circuits de commutation pour connecter son fil d'unité de traitement au tissu de commutation pour recevoir le paquet de données à un instant de réception. [0025] Dans certains modes de réalisation, les unités de traitement ont une relation de position fixe entre elles, et l'étape de détermination comprend la détermination d'un délai fixe sur la base de la relation de position entre chaque paire d'unités de traitement dans l'ordinateur. [0026] Dans certains modes de réalisation, la relation de position fixe comprend une matrice de rangées et de colonnes, chaque unité de traitement comportant un identifiant qui identifie sa position dans la matrice. [0027] Dans certains modes de réalisation, les circuits de commutation comprennent un multiplexeur comportant un ensemble de fils de sortie connecté à son unité de traitement, et de multiples ensembles de fils d'entrée connectables au tissu de commutation, le multiplexeur étant situé sur 13 B17816 FR - 408525FR l'ordinateur à un emplacement physique prédéterminé par rapport à son unité de traitement, et l'étape de détermination comprend la détermination d'un délai fixe pour que l'instruction de contrôle de commutateur atteigne le multiplexeur et pour qu'un paquet de données de sortie provenant du multiplexeur atteigne l'interface d'entrée de son unité de traitement. [0028] Dans certains modes de réalisation, le procédé comprend l'étape consistant à prévoir dans chaque programme une instruction de synchronisation qui indique au module de synchronisation Qu'une phase de calcul au niveau de l'unité de traitement s'est achevée. [0029] Dans certains modes de réalisation, l'étape de détermination comprend de déterminer pour chaque unité de traitement un délai fixe entre un événement de synchronisation sur la puce et la réception en retour au niveau de l'unité de traitement d'un accusé de réception indiquant qu'un événement de synchronisation est survenu. [0030] Dans certains modes de réalisation, l'étape de détermination comprend l'accès à une table de correspondance contenant des informations concernant des délais permettant de déterminer l'instant d'envoi prédéterminé et l'instant de commutation prédéterminé. [0031] Dans certains modes de réalisation, la fonction informatique est une fonction d'apprentissage par machine. [0032] Dans certains modes de réalisation, le circuit de commutation comprend un multiplexeur ayant un ensemble de fils de sortie connecté à son unité de traitement, et de multiples ensemble de fils d'entrée connectables au tissu de commutation, le multiplexeur étant situé sur l'ordinateur à un emplacement physique prédéterminé par rapport à son unité de traitement, et l'étape de détermination comprend la détermination du délai 14 B17816 FR - 408525FR fixe pour que l'instruction de contrôle de commutateurs atteigne le multiplexeur et qu'un paquet de données de sortie provenant du multiplexeur atteigne l'interface d'entrée de son unité de traitement. [0033] Dans certains modes de réalisation, dans chaque programme est prévue une instruction de synchronisation qui indique au module de synchronisation qu'une phase de calcul au niveau de l'unité de traitement s'est achevée. [0034] Dans certains modes réalisation, l'étape de détermination comprend la détermination pour chaque unité de traitement d'un délai fixe entre un événement de synchronisation sur la puce et la réception en retour au niveau de l'unité de traitement d'un accusé de réception indiquant qu'un événement de synchronisation est survenu. [0035] Dans certains modes de réalisation, l'étape de détermination comprend un accès à une table de correspondance contenant des informations concernant des retards permettant de déterminer l'instant d'envoi prédéterminé et l'instant de commutation prédéterminé. [0036] Dans certains modes de réalisation, la fonction informatisée est une fonction d'apprentissage par machine. [0037] Selon un autre aspect, on prévoit un compilateur comportant un processeur programmé pour réaliser un procédé de génération de multiples programmes pour délivrer une fonction informatique, chaque programme étant destiné à être exécuté dans une unité de traitement d'un ordinateur comprenant une pluralité d'unités de traitement comportant chacune un stockage d'instructions pour maintenir un programme local, une unité d'exécution pour exécuter le programme local et un stockage de données pour maintenir des données, un tissu de commutation connecté à une interface de sortie de chaque unité de traitement et connectable à une B17816 FR - 408525FR interface d'entrée de chaque unité de traitement par des circuits de commutation contrôlables par chaque unité de traitement, et un module de synchronisation actionnable pour générer un signal de synchronisation, le procédé comprenant : générer un programme local pour chaque unité de traitement comprenant une séquence d'instructions exécutables déterminer pour chaque unité de traitement un instant d'exécution relatif d'instructions de chaque programme local d'où il résulte qu'un programme local alloué à une unité de traitement donnée est planifié pour exécuter avec un délai prédéterminé par rapport à un signal de synchronisation une instruction d'envoi pour émettre au moins un paquet de données à un instant d'émission prédéterminé, par rapport au signal de synchronisation, destiné a une unité de traitement destinataire mais ne comportant pas d'identifiant de destination, et qu'un programme local alloué à l'unité de traitement destinataire est planifié pour exécuter à un instant de commutation prédéterminé une instruction de contrôle de commutateurs pour contrôler les circuits de commutation pour connecter son fil d'unité de traitement au tissu de commutation pour recevoir le paquet de données à un instant de réception ; le compilateur étant connecté de manière à recevoir une structure de graphe fixe représentant la fonction informatique et une table contenant des délais permettant de déterminer l'instant d'envoi prédéterminé et l'instant de commutation prédéterminé pour chaque unité de traitement. [0038] Dans certains modes de réalisation, la fonction informatique est une fonction d'apprentissage par machine. [0039] Dans certains modes de réalisation, la structure de graphe fixe comprend une pluralité de noeuds, chaque noeud étant représenté par un codelet dans un programme local. 16 B17816 FR - 408525FR [0040] Dans certains modes de réalisation, la structure de graphe fixe comprend une pluralité de noeuds, chacun étant représenté par un codelet dans un programme local. [0041] Selon un autre aspect, on prévoit un programme informatique enregistré sur un support non transmissible et comprenant des instructions lisibles par un ordinateur qui lorsqu'elles sont exécutées par un processeur d'un compilateur mettent en oeuvre un procédé de génération de multiples programmes pour délivrer une fonction informatique, chaque programme étant destiné à être exécuté dans une unité de traitement d'un ordinateur comprenant une pluralité d'unités de traitement comportant chacune un stockage d'instructions pour maintenir un programme local, une unité d'exécution pour exécuter le programme local et un stockage de données pour maintenir des données, un tissu de commutation connecté à une interface de sortie de chaque unité de traitement et connectable à une interface d'entrée de chaque unité de traitement par des circuits de commutation contrôlables par chaque unité de traitement, et un module de synchronisation actionnable pour générer un signal de synchronisation, le procédé comprenant : générer un programme local pour chaque unité de traitement comprenant une séquence d'instructions exécutables ; déterminer pour chaque unité de traitement un instant relatif de l'exécution d'instructions de chaque programme local d'où il résulte qu'un programme local alloué à une unité de traitement donnée est planifié pour exécuter avec un délai prédéterminé par rapport à un signal de synchronisation une instruction d'envoi pour émettre au moins un paquet de données à un instant d'émission prédéterminé, par rapport au signal de synchronisation, destiné à une unité de traitement destinataire mais ne comportant aucun identifiant de destination, et un programme local alloué à l'unité de traitement destinataire est planifié 17 B17816 FR - 408525FR pour exécuter à un instant de commutation prédéterminé une instruction de contrôle de commutateurs pour contrôler les circuits de commutation pour connecter son fil d'unité de traitement au tissu de commutation pour recevoir le paquet de données à un instant de réception. [0042] Selon un autre aspect on prévoit un programme informatique comprenant une séquence d'instructions destinée à être exécutée sur une unité de traitement comportant un stockage d'instructions pour contenir le programme informatique, une unité d'exécution pour exécuter le programme informatique et un stockage de données pour maintenir des données, le programme informatique comprenant une ou plusieurs instructions exécutables par un ordinateur qui, lorsqu'elles sont exécutées, mettent en oeuvre : une fonction d'envoi qui amène un paquet de données destiné à une unité de traitement destinataire à être émis sur un ensemble de fils de connexion connecté à l'unité de traitement, le paquet de données ne comportant pas d'identifiant de destination mais étant émis à un instant d'émission prédéterminé ; et une fonction de contrôle de commutateurs qui amène l'unité de traitement à contrôler des circuits de commutation pour connecter un ensemble de fils de connexion de l'unité de traitement à un tissu de commutation pour recevoir un paquet de données à un instant de réception prédéterminé. [0043] Dans certains modes de réalisation, lesdites une ou plusieurs instructions comprennent une instruction de contrôle de commutateurs et une instruction d'envoi qui définit une adresse d'envoi définissant un emplacement dans le stockage d'instructions à partir duquel le paquet de données doit être envoyé. 18 B17816 FR - 408525FR [0044] Dans certains modes de réalisation, l'instruction d'envoi définit un nombre de paquets de données à envoyer, chaque paquet étant associé à un instant d'émission prédéterminé différent. [0045] Dans certains modes de réalisation, l'instruction d'envoi ne définit pas explicitement une adresse d'envoi mais définit implicitement un registre dans lequel une adresse d'envoi est contenue. [0046] Dans certains modes de réalisation, le programme informatique comprend une autre fonction pour mettre à jour l'adresse d'envoi dans le registre défini implicitement. [0047] Dans certains modes de réalisation, le programme informatique comprend au moins une autre instruction définissant une fonction de mise à jour de pointeur mémoire aui met à jour un pointeur mémoire identifiant un emplacement mémoire dans le stockage de données pour mémoriser le paquet de données qui est reçu au niveau de l'unité de traitement destinataire. [0048] Dans certains modes de réalisation, lesdites une ou plusieurs instructions sont une instruction fusionnée qui fusionne la fonction d'envoi et la fonction de contrôle de commutateurs dans un seul cycle d'exécution, d'où il résulte que l'unité de traitement est agencée pour agir de façon à transmettre un paquet de données et pour contrôler ses circuits de commutation pour recevoir un paquet de données différent provenant d'une autre unité de traitement. [0049] Dans certains modes de réalisation, ladite au moins une autre instruction est une instruction fusionnée qui fusionne la fonction d'envoi et la fonction de mise à jour de pointeur mémoire. 19 B17816 FR - 408525FR [0050] Dans certains modes de réalisation, l'instruction fusionnée est configurée dans un format commun avec une portion de code opération qui indique si elle fusionne la fonction d'envoi avec la fonction de mise à jour de pointeur mémoire ou la fonction de contrôle de commutateurs. [0051] Dans certains modes de réalisation, lesdites une ou plusieurs instructions sont une seule instruction qui fusionne la fonction d'envoi, la fonction de contrôle de commutateurs et la fonction de mise à jour de pointeur mémoire dans un seul cycle d'exécution. [0052] Dans certains modes de réalisation, chacune desdites une ou plusieurs instructions a une première largeur en bits qui concorde avec une largeur en bits d'un étage d'extraction de l'unité d'exécution. [0053] Dans certains modes de réalisation, chacune desdites une ou plusieurs instructions a une première largeur en bits qui concorde avec une largeur en bits d'un étage d'extraction de l'unité d'exécution, et l'instruction qui fusionne la fonction d'envoi, la fonction de contrôle de commutateurs et la fonction de mise à jour de pointeur mémoire a une deuxième largeur en bits qui est le double de la largeur en bits de l'étage d'extraction de l'unité d'exécution. [0054] Dans certains modes de réalisation, chacune desdites une ou plusieurs instructions a une première largeur en bits qui concorde avec une largeur en bits d'un étage d'extraction de l'unité d'exécution, et l'instruction d'une première largeur en bits identifie un opérande de la première largeur en bits, l'opérande mettant en oeuvre la fonction de contrôle de commutateurs et la fonction de mise à jour d'écriture en mémoire. [0055] Dans certains modes de réalisation, le programme informatique comprend une instruction de synchronisation qui B17816 FR - 408525FR génère une indication lorsque la phase de calcul de l'unité de traitement a été achevée. [0056] Dans certains modes de réalisation, le programme informatique est enregistré sur un support non transmissible lisible par un ordinateur. [0057] Dans certains modes de réalisation, le programme informatique a la forme d'un signal transmissible. [0058] Selon un autre aspect, on prévoit une unité de traitement comprenant un stockage d'instructions, une unité d'exécution agencée pour exécuter un programme informatique et un stockage de données pour maintenir des données, et le stockage d'instructions contient un programme informatique comprenant une ou plusieurs instructions exécutables par un ordinateur Qui, lorsqu'elles sont exécutées par l'unité d'exécution, mettent en oeuvre une fonction d'envoi qui amène un paquet de données destiné à une unité de traitement destinataire à être émis sur un ensemble de fils de connexion connecté à l'unité de traitement, le paquet de données ne comportant pas d'identifiant de destination mais étant transmis à un instant d'émission prédéterminé et une fonction de contrôle de commutateurs qui amène l'unité de traitement à contrôler des circuits de commutation pour connecter un ensemble de fils de connexion de l'unité de traitement à un tissu de commutation pour recevoir un paquet de données à un instant de réception prédéterminé. [0059] Selon un autre aspect, on prévoit un ordinateur comprenant une ou plusieurs puces dans un boîtier intégré, l'ordinateur comprenant une pluralité d'unités de traitement, chaque unité de traitement comportant un stockage d'instructions pour contenir un programme informatique, une unité d'exécution agencée pour exécuter le programme informatique et un stockage de données pour maintenir des données, dans 21 B17816 FR - 408525FR lequel le stockage d'instructions pour chaque unité de traitement maintient un programme informatique comprenant une ou plusieurs instructions exécutables par un ordinateur qui, lorsqu'elles sont exécutées, mettent en oeuvre une fonction d'envoi qui amène un paquet de données destiné à une unité de traitement destinataire à être émis sur un ensemble de fils de connexion connecté à l'unité de traitement, le paquet de données ne comportant aucun identifiant de destination mais étant transmis à un instant d'émission prédéterminé ; et une fonction de contrôle de commutateurs qui amène l'unité de traitement à contrôler des circuits de commutation pour connecter un ensemble de fils de connexion de l'unité de traitement à un tissu de commutation pour recevoir un paquet données à un instant de réception prédéterminé. Brève description des dessins [0060] 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. [0061] [Fig. 1] La figure 1 illustre schématiquement l'architecture d'un processeur en une seule puce ; [0062] [Fig. 2] la figure 2 est un schéma blocs d'un pavé connecté au tissu de commutation ; [0063] [Fig. 3] la figure 3 est un schéma illustrant un protocole BSP ; [0064] [Fig. 4] la figure 4 est un schéma représentant deux pavés dans un échange déterministe dans le temps ; [0065] [Fig. 5] la figure 5 est un chronogramme schématique illustrant un échange déterministe dans le temps ; [0066] [Fig. 6] la figure 6 est un exemple d'un graphe d'intelligence artificielle ; 22 B17816 FR - 408525FR [0067] [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 ; [0068] [Fig. 8] les figures 8 à 11 illustrent des formats d'instructions de différentes instructions utilisables dans une architecture déterministe dans le temps ; [0069] [Fig. 12] la figure 12 est un schéma de deux pavés fonctionnant comme paire d'émission ; et [0070] [Fig. 13] la figure 13 est un schéma de deux pavés fonctionnant comme paire de réception. Description détaillée de modes de réalisation préférés [0071] 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 à Intelligence) pour indiquer son 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, 6b Qui sont appelées ici "Nord" et "Sud". Dans l'exemple décrit, chaque matrice comporte huit colonnes de 76 pavés (en fait en général il y aura 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, 8b et 4 liaisons de puce à puce 30a, 30b agencées sur le bord "Ouest" de la puce 2. La puce 2 reçoit du travail d'un hôte (non 23 B17816 FR - 408525FR représenté) qui est connecté à la puce par l'intermédiaire de l'une des liaisons 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 liaisons de puce à puce 30a, 30b 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 provenant de l'application hôte. [0072] 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 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 ou autres formes 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é. 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 24 B17816 FR - 408525FR 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. [0073] 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 ordonnanceur 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 S0_S5, mais 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é B17816 FR - 408525FR d'exécution (EXU) et une unité de chargement/stockage (LSU). Chacun des contextes 26 comprend un ensemble respectif de registres Re, R1... pour représenter l'état de programme du fil respectif. [0074] 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'ordonnanceur 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. [0075] 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 ce 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é. [0076] L'étage d'extraction 14 passe ensuite l'instruction extraite à l'étage de décodage 16 à 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 registres d'opérandes du contexte courant spécifié dans l'instruction, afin que l'instruction soit exécutée. 26 B17816 FR - 408525FR [0077] Dans cet exemple, l'ordonnanceur de fils 24 entrelace des fils selon un schéma de tour de rôle dans lequel, dans chaque tour du schéma le tour est divisé en une séquence de créneaux temporels So, Sl, S2, S3, 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 agales (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 d'autres nombres sont possibles. Chaque créneau temporel est associé à une ressource matérielle, par exemple un registre, pour gérer contexte d'un fil d'exécution. [0078] 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'elle puissent être partagée entre les fils de travail entre des calculs. L'ordonnanceur de fils 24 est agencé de 27 B17816 FR - 408525FR 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 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ésente 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 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 [0079] 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. 28 B17816 FR - 408525FR [0080] 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 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érationlui-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. [0081] Le fil superviseur SV réalise une opération similaire dans chacun des créneaux temporels, pour abandonner tous ses créneaux n à 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. [0082] Lorsque le fil superviseur détermine qu'il est temps d'exécuter un codelet, il utilise l'instruction d'abandon ("RUN") pour allouer ce codelet au créneau dans lequel il exécute l'instruction "RUN". 29 B17816 FR - 408525FR [0083] 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. A la fin de sa ou ses taches, le fil de travail rend le créneau temporel dans lequel il s'exécute au fil superviseur. [0084] 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. EXIT exit state [0085] Dans un mode de réalisation, 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 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_Wi provenant de la mémoire d'instructions 12, à quel étage dans le programme global, doivent être exécutés. [0086] Dans un autre mode de réalisation, l'instruction EXIT n'a pas besoin de définir un état de sortie. [0087] Cette instruction agit sur l'ordonnanceur 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 B17816 FR - 408525FR réaliser une ou plusieurs tâches suivantes de superviseur (par exemple une synchronisation à barrière et/ou un échange de données), et/ou continuer à exécuter une autre instruction d'abandon, et ainsi de suite. [0088] 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 codelets 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. [0089] 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. SYNC mode // mode E {tile, chip, zone 1, zone 2} 31 B17816 FR - 408525FR [0090] 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 des pavés 4. Dans la phase d'échange 50, chaque pavé 4 est autorisé a é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 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 passant des phases de calcul 52 à la phase d'échange 50, ou à la jointure passant 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 (b) 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 se répéter dans de multiples répétitions. Dans la terminologie BSP, chaque répétition de phase d'échange et de 32 B17816 FR - 408525FR phase de calcul est appelée ici "super-étape", ce qui est cohérent avec l'utilisation 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. [0091] 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. [0092] 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 du 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 33 B17816 FR - 408525FR d'un pavé, elle n'est pas émise avec un en-tête identifiant un pavé destinataire. 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 gui sont exécutées sur d'autre pavés dans l'ordinateur. Cela est 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 140x dans le tissu de commutation 34. Les fils de connexion du tissu de commutation sont aussi connectés à un ensemble de fils de connexion de sortie de données 218 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 ce 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 34 B17816 FR - 408525FR noté 140x pour indiquer qu'il s'agit de l'un d'un certain nombre d'ensembles de fils croisés 140e_ 1401215. 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 220x, alors cela va la connecter aux fils croisés 140x et ainsi aux fils de données de sortie 218s 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 140x 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 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. [0093] 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 B17816 FR - 408525FR 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 tout le temps. Des données peuvent être échangées sur une puce, ou de puce à puce ou de puce à hôte en fonction de la liaison gui est sélectionnée. La présente application est concernée principalement par une communication 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 de un bit. Un mécanisme par lequel une 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 : ce 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 le 36 B17816 FR - 408525FR SYNC chip est exécuté, le reste de la fonctionnalité procède sans que d'autres instructions soient exécutées pour le faire. [0094] 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 rqp. la logique de synchronisation). Ainsi à un certain point, une fois que tous les fils de travail finaux dans la phase de calcul courante 52 sont sortis sur tous les pavés 4 dans la matrice 6, le contrôleur de synchronisation 36 aura reçu une demande de synchronisation (sync reg) respective à 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" à 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 de superviseur respectif sur ce pavé 4. Le superviseur est alors libre de procéder à un 37 B17816 FR - 408525FR échange de données avec d'autre pavés 4 via l'interconnexion 34 dans une phase d'échange ultérieure 50. [0095] De préférence les signaux sync rea 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. [0096] La structure de connexion sur le pavé va maintenant être décrite plus en détail. [0097] 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 a 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. [0098] Afin de s'assurer que chaque pavé individuel exécute des instructions SEND et des instructions de contrôle de commutateurs à des instants appropriés pour émettre et recevoir les données correctes, des exigences de planification d'échanges doivent être satisfaites par 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 doit ê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. 38 B17816 FR - 408525FR [0099] I. Le délai d'accusé de réception 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 4T, et un pavé récepteur 4R. Bien que cela soit représenté seulement schématiquement et pas à l'échelle, le pavé 4T est représenté plus près du contrôleur de synchronisation et le pavé 4R 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é 4T que pour le pavé 4. 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 base de l'ID de pavé. [0100] II. 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 comme 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 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. 39 B17816 FR - 408525FR [0101] III. 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 le 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 210R au niveau du pavé récepteur 4R jusqu'à l'interface ex in 224R du pavé récepteur. [0102] IV. Le délai de mise à jour de pointeur mémoire de trafic d'échange, BNET MMP(). 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é Pt 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 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. [0103] 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 IPU allant de 0 à 30. L'action sur le pavé d'envoi 4T survient entre les cycles d'horloge IPU 0 et 9, en commençant par l'émission d'une instruction B17816 FR - 408525FR d'envoi (SEND F3). Dans des cycles d'horloge IPU 10 à 24, les données suivent leur chemin en pipeline dans le tissu de commutation 34. [0104] En regardant le pavé de réception 4R dans le cycle d'horloge IPU 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 INCOMING MUX (F3)". [0105] 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 INCOMING ADR (F3)". [0106] Sur le pavé d'envoi 4t, les cycles d'horloge IPU 1, 3 et 5 sont notées "Transport ( )". Cela est un retard 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 IPU 2 est alloué pour former une adresse EO pour une instruction SEND (F. adr (E0) pour envoi). On notera que c'est l'adresse d'où EO doit être extrait, pas son adresse de destination. Dans le cycle d'horloge IPU 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 sorti. [0107] 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). 41 B17816 FR - 408525FR [0108] Les cycles 25 à 28 représentent le délai sur le pavé récepteur 4R 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 à 39 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). [0109] 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 4T, alors le pavé émetteur 4T 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é de réception doit exécuter une instruction de contrôle de commutateurs 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 [earliest LD (F3)] dans le cycle IPU 25 pour utilisation dans un codelet qui est exécuté au niveau du pavé récepteur. [0110] 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 de sorte qu'ils communiquent 42 B17816 FR - 408525FR 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. [0111] La figure 6 illustre un exemple d'application de l'architecture de processeur décrite ici, à savoir une application d'intelligence artificielle. [0112] Comme cela a été mentionné précédemment et est connu de l'homme de l'art dans le domaine de l'intelligence artificielle, l'intelligence artificielle commence par une phase d'apprentissage dans laquelle l'algorithme d'intelligence artificielle apprend un modèle de connaissance. Le modèle peut être représenté sous forme d'un graphe 60 de noeuds 102 interconnectés et de liaisons 104. Les noeuds et les liaisons peuvent être appelés sommets et arrêtes. Chaque noeud 102 du graphe a une ou plusieurs arrêtes d'entrée et une ou plusieurs arrêtes de sortie, certaines des arrêtes d'entrée de certains des noeuds 102 étant les arrêtes de sortie de certains autres des noeuds, connectant ainsi entre eux les noeuds pour former le graphe. En outre, une ou plusieurs des arrêtes d'entrée d'un ou plusieurs des noeuds 102 forment les entrées du graphe dans son ensemble, et une ou plusieurs arrêtes de sortie d'un ou plusieurs des noeuds 102 forment les sorties du graphe dans son ensemble. Chaque arrête 104 communique une valeur communément sous la forme d'un tenseur (matrice à n dimensions), cela formant les entrées et les sorties fournies aux noeuds 102 et à partir des noeuds sur leurs arrêtes d'entrée et de sortie respectivement. [0113] Chaque noeud 102 représentent une fonction de ses une ou plusieurs entrées reçues sur son ou ses arrêtes d'entrée, le résultat de cette fonction étant la ou les sorties fournies 43 B17816 FR - 408525FR sur l'arête ou les arêtes de sortie. Ces résultats sont parfois appelés activations. Chaque fonction est paramétrée par un ou plusieurs paramètres respectifs (parfois appelés pondérations, bien qu'ils n'aient pas besoin obligatoirement d'être des poids multiplicateurs). En général, les fonctions représentées par les différents noeuds 102 peuvent avoir des formes de fonction différentes et/ou peuvent être paramétrées par des paramètres différents. [0114] 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 d'erreur 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 d'erreur, la condition d'erreur peut être un simple seuil, c'est-à-dire que la condition d'erreur 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 d'erreur pour ce noeud 102 peut être plus complexe. Par exemple, la condition d'erreur peut être satisfaite seulement si chacun des paramètres de ce noeud 102 se trouve dans les limites du seuil respectif. Dans un autre exemple, une métrique combinée peut être définie comme combinant les erreurs dans les différents paramètres pour le même noeud 102, et la condition d'erreur peut être satisfaite à condition que la valeur de la métrique combinée se trouve dans les limites d'un seuil spécifié, mais autrement la condition d'erreur 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 d'erreur, cela donne une mesure indiquant si l'erreur dans le 44 B17816 FR - 408525FR ou les paramètres du noeud tombe en dessous d'un certain niveau ou d'un certain degré d'acceptabilité. [0115] Dans l'étage 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 façon à essayer 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 la plus proche possible d'un résultat souhaité. Lorsque _Le graphe dans son ensemble tend vers un tel état, on dit que le calcul converge. [0116] 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 de données qui correspondent à des sorties connues. Avec chaque point de données, l'algorithme peut ajuster les paramètres de telle sorte que la sortie concorde lé plus près possible 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 fait 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 au lieu de cela 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 cette sortie est positive ou négative (et potentiellement un degré avec lequel B17816 FR - 408525FR elle est positive ou négative), par exemple gagné ou perdu, récompense ou punition, ou similaire. Sur de nombreux essais l'algorithme peut graduellement 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 algorithmes pour faire l'apprentissage d'un graphe sont connus de l'homme de l'art dans le domaine de l'intelligence artificielle. [0117] 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 des noeuds 102 dans un graphe d'intelligence artificielle. Dans ce cas, les arrêtes 104 entre les noeuds 102 correspondent aux échanges de données entre les fils, dont au moins certains peuvent impliquer des échanges entre pavés. [0118] La figure 7 est un schéma illustrant la fonction d'un compilateur 70. Le compilateur reçoit un graphe comme le graphe 60 et compile les fonctions se trouvant dans les graphes en une multitude de codelets, qui sont contenus dans des programmes locaux référencés 72 en figure 7. Chaque programme local est conçu pour être chargé dans un pavé particulier de l'ordinateur. Chaque programme comprend un ou plusieurs codelets 72a, 72b... plus un sous-programme superviseur 73, chacun étant constitué d'une séquence d'instructions. Le compilateur génère les programmes de telle sorte qu'ils soient liés entre eux dans le temps c'est-à-dire qu'ils soient déterministes dans le temps. Afin de réaliser cela, le compilateur accède à des données de pavés 74 qui incluent des identifiants de pavés qui sont indicatifs de l'emplacement des pavés et par conséquent les délais que le compilateur doit comprendre afin de générer les programmes locaux. Les délais ont déjà été mentionnés précédemment, et peuvent être calculés sur la base des données de pavés. En 46 B17816 FR - 408525FR variante, les données de pavés peuvent incorporer une structure de données dans laquelle ces délais sont disponibles par l'intermédiaire d'une table de correspondance. [0119] Va suivre maintenant une description de nouvelles instructions qui ont été développées comme faisant partie du jeu d'instructions de l'architecture informatique définie ici. La figure 8 représente une instruction SEND de 32 bits. Une instruction SEND indique une transmission de données à partir de la mémoire de pavé. Elle amène une ou plusieurs données mémorisées au niveau d'une adresse particulière dans la mémoire locale 22 d'un pavé à être émises au niveau de l'interface exout d'un pavé. Chaque donnée (appelée "élément" dans l'instruction) peut avoir une longueur d'un ou plusieurs mots. Une instruction SEND agit sur un ou plusieurs mots pour mettre en oeuvre une fonction d'envoi. L'instruction SEND comporte un code opération 80, un champ 82 indiquant un compte de messages, le nombre d'éléments à envoyer sous la forme d'un ou plusieurs paquets à partir de l'adresse SEND indiquée dans un champ d'adresse 84. Le champ 84 définit l'adresse dans la mémoire locale à partir de laquelle les éléments doivent être envoyés sous la forme d'une valeur immédiate qui est ajoutée à une valeur de base stockée dans un registre d'adresse de base. L'instruction SEND comporte aussi un champ de commande 86 (SCTL) qui indique la taille de mot, sélectionnée à 4 ou 8 multiplets. Le paquet ne comporte pas d'identifiant de destination en lui. En d'autres termes, le pavé récepteur qui doit recevoir les éléments n'est pas identifié de façon unique dans l'instruction. La fonction d'envoi fait en sorte que le nombre spécifié d'éléments de données provenant de l'adresse d'envoi soit accédé à partir de la mémoire locale et placés au niveau de l'interface ex out du pavé pour être transmis au cycle d'horloge suivant. Dans une autre variante de l'instruction SEND, l'adresse à partir 47 B17816 FR - 408525FR de laquelle des éléments doivent être envoyés pourrait être implicite, prise a partir d'une valeur de base dans le registre d'adresse de base et d'une valeur de delta dans un registre de delta sortant. La valeur de delta peut être réglée sur la base d'informations se trouvant dans une instruction SEND précédente. A la place d'un identifiant unique du pavé destinataire visé, _e compilateur s'est arrangé pour que le pavé destinataire correct commute son ou ses multiplexeurs locaux à l'instant correct pour recevoir la donnée (des éléments de données) comme cela a déà été décrit ici. On notera qu'un pavé destinataire visé pourrait être le pavé émetteur lui-même dans certains cas. [0120] Dans ce but, une fonction de contrôle de commutateurs est prévue, comme cela a été décrit précédemment. La figure 9 illustre une instruction PUT-i-MUX qui réalise cette fonction. Un champ de code opération 90 définit l'instruction comme étant une instruction PUT-i-MUX. Une période de délai peut être spécifiée par une valeur immédiate de délai 92. Cette valeur de délai peut est utilisée pour remplacer les instructions 'no op', et est une façon d'optimiser la compression de code. Cette instruction, lorsqu'elle est exécutée, définit dans le champ incomina mux 98 quelle entrée du multiplexeur 210 doit être sélectionnée pour 'écouter' des éléments qui ont été envoyés à partir d'un autre pavé. Dans un but de compacité, cette fonction de contrôle de multiplexeur pourrait être combinée dans une seule instruction avec une fonction d'envoi définie précédemment, comme cela est présenté en figure 10. On notera qu'il n'y a pas de connexion entre la fonction d'envoi, qui amène le pavé à se comporter comme un pavé émetteur, et la fonction de contrôle de commutateurs, qui est une fonction servant lorsque le pavé se comporte comme un pavé destinataire, autre que 48 B17816 FR - 408525FR celles qui peuvent être réalisées dans un seul cycle d'exécution sur le même pavé. [0121] La figure 10 est un exemple d'instruction à "fusion". Dans ce contexte, une instruction à "fusion" désigne une instruction qui définit deux ou plusieurs fonctions qui peuvent être réalisées en même temps (dans un seul cycle d'exécution) sur un pavé. [0122] Figure 10 illustre une forme d'instructions d'envoi à 'fusion', dans laquelle une fonction d'envoi est combinée avec une deuxième fonction qui peut modifier l'état maintenu dans des registres au niveau du pavé. Une fonction consiste à changer le pointeur mémoire pour des données reçues au niveau de ce pavé. Une autre fonction consiste à régler le MUX entrant. La fonction PUTi MEMptr permet d'identifier un emplacement mémoire se trouvant dans la mémoire locale où doit être chargée la donnée suivante reçue par le pavé. Cette fonction pourrait être réalisée par une instruction de 'réception' dédiée, bien que sa fonction ne soit pas de permettre la réception d'une donnée mais de modifier le pointeur mémoire. En fait, aucune instruction spécifique ne doit être exécutée pour recevoir des données au niveau d'un pavé. Les données arrivant au niveau de l'interface exin vont être chargée dans l'emplacement mémoire suivant identifié par le pointeur mémoire, sous le contrôle de l'interface exin. L'instruction de la figure 10 comporte un champ de code opération 100 et un champ 102 indiquant un nombre d'éléments à envoyer. La valeur immédiate se trouvant dans le champ de modification d'état entrant 106 est écrite dans un registre d'état de configuration d'échange spécifié par le champ 104. Dans une première forme, le champ de modification d'état 106 peut écrire un delta entrant pour calculer l'adresse de réception à laquelle le pointeur mémoire doit être réglé. Dans une autre forme, l'état de configuration d'échange est 49 B17816 FR - 408525FR écrit avec la valeur de multiplexeur MUX d'entrée qui règle l'entrée de multiplexeur. [0123] Pour cette forme d'instructions à "fusion", la fonction d'envoi utilise une adresse d'envoi déterminée à partir de valeurs stockées dans un ou plusieurs registres qui est implicite dans l'instruction. Par exemple, l'adresse d'envoi peut être déterminée à partir du registre de base et du registre de delta. [0124] La figure 11 représente une instruction à "double largeur", appelée instruction d'échange (EXCH). Cette instruction lance une transmission de données à partir d'une adresse indiquée dans la mémoire du pavé et règle l'état de configuration d'échange entrant (le multiplexeur et/ou le pointeur mémoire pour recevoir des données). L'instruction EXCH est unique en ce qu'elle est immédiatement suivie d'une charge utile de 32 bits en ligne, située au niveau de l'emplacement mémoire situé immédiatement après les instructions. L'instruction EXCH comporte un champ de code opération 110 qui indique une instruction d'échange EXCH. La charge utile comporte un drapeau de 'co-émission' 119. [0125] L'instruction EXCH comprend un champ de format 112 qui comporte un seul bit Qui spécifie la largeur de donnée du format entrant (32 bits ou 64 bits). La largeur de donnée peut avoir des implications sur la mise en place des lianes de multiplexeur, comme cela sera expliqué dans la suite. Un champ d'éléments 114 définit le nombre d'éléments dont l'instruction d'échange va provoquer l'envoi. Ces éléments sont envoyés a partir d'une adresse d'envoi calculée en utilisant le champ immédiat 116, comme dans l'instruction d'envoi de la figure 9. La valeur de ce champ est ajoutée à la valeur se trouvant dans le registre de base. B17816 FR - 408525FR [0126] La référence numérique 118 désigne un champ de contrôle qui définit la taille de mot pour la donnée envoyée. La charge utile comprend un champ de contrôle de commutateurs 120 qui agit comme contrôle de commutateur pour le multiplexeur entrant, comme cela a été décrit précédemment en relation avec la figure 9. La référence 122 indique un champ de la charge utile définissant un delta entrant pour calculer l'adresse à laquelle les données entrantes doivent être mémorisées, comme décrit précédemment en relation avec l'instruction de la figure 10. L'instruction d'échange de 64 bits de large EXCH de la figure 11 peut être exécutée à chaque cycle d'horloge et ainsi permet simultanément : - l'envoi à partir d'une adresse particulière - la mise à jour de multiplexeur d'entrée - la mise à jour d'adresse d'entrée [0127] Ainsi, tout schéma d'échange peut être codé dans une seule instruction. Les instructions des figures 8, 9 et 10 réalisent des fonctions similaires mais puisqu'elles ont seulement une longueur de 32 bits, elles peuvent être utilisées pour minimiser la taille du code d'échange dans la mémoire locale de chaque pavé. La décision pour savoir quelle instruction utiliser dans un contexte particulier est prise au niveau du compilateur 70 lors de la construction des codelets pour le programme local 72. [0128] Va suivre une liste de registres clés et leur signification pour prendre en charge les instructions susmentionnées. Ces registres font partie du banc de registres présent sur chaque pavé. [0129] [Tableau 1] TILE ID Contient un identifiant unique pour ce pavé 51 B17816 FR - 408525FR INCOMING MUX Contient l'ID de pavé du pavé source [INCOMING MUXPAIR] pour des messages entrants, qui agit pour sélectionner l'entrée d"écoute' pour le multiplexeur associé au pavé récepteur. INCOMING DELTA Contient une valeur d'auto-incré- mentation pour calculer l'adresse à laquelle des données entrantes doivent être mémorisées : elle peut être écrasée par un champ explicite [voir par exemple figure 10]. Elle est ajoutée à INCOMING BASE. INCOMING BASE Contient une adresse de base commune pour mettre à jour un pointeur mémoire (ajoutée à INCOMING DELTA). OUTGOING BASE Contient une adresse de base commune pour des instructions d'envoi OUTGOING DELTA Contient un delta pour calculer des instructions d'adresse d'envoi. Une adresse d"envoi' est égale à base sortante + delta sortant INCOMING FORMAT Identifie des données entrantes de 32 bits ou 64 bits [0130] On notera que les registres INCOMING DELTA et INCOMING MUX font partie de l'état d'échange du pavé. [0131] On va faire référence maintenant aux figures 12 et 13 pour expliquer l'appairage de pavés qui est une fonctionnalité par laquelle une paire physique de pavés peut collaborer afin de faire un usage plus efficace de leurs ressources d'échange combinées. L'appairage de pavés peut être utilisé pour doubler 52 B17816 FR - 408525FR la bande passante en émission d'un seul pavé en empruntant un bus de transmission d'un voisin, ou pour doubler la bande passante en réception pour les deux pavés d'une paire de pavés en partageant un bus de réception d'un voisin et un multiplexeur entrant associé. [0132] La figure 12 illustre la logique associée à des pavés d'une paire de pavés pour réaliser une transmission à double largeur. Une transmission à double largeur est obtenue en empruntant des ressources d'échange sortantes d'un voisin pendant la durée d'un SEND. Le pavé voisin ne peut pas réaliser sa propre transmission de données pendant ce temps. Une instruction SEND peut réaliser un transfert de données en simple ou en double largeur, la largeur du transfert étant spécifiée par une valeur contenue dans un registre, ou un champ immédiat. La largeur peut être indiquée comme étant 32 bits (un mot) auquel cas le champ a une valeur de 0, ou 64 bits (deux mots) auquel cas le champ à une valeur de 1. D'autres définitions logiques sont possibles. La largeur spécifiée est passée d'un registre sur la puce 4 à un stockage de contrôle 1200 de l'interface Ex Out 226 du pavé. La figure 12 représente deux pavés appairés de la sorte, TIDOO et TID01. L'interface Ex Out 226 comporte des tampons pour prendre en charge le mot le moins significatif (LSW) et le mot le plus significatif (MSW). Dans ce contexte, chaque mot comporte 32 bits. Le mot le moins significatif est connecté directement à une entrée d'un multiplexeur de contrôle de largeur 1202. La sortie du multiplexeur est connectée aux fils croisés correspondants du bus d'échange 34, les fils croisés correspondant au fil de sortie pour ce pavé particulier. Si la largeur d'émission est réglée à 32 bits, les multiplexeurs de contrôle de largeur 1202 sont réglés pour recevoir des entrées à partir des LSW respectifs des pavés appairés, pour 53 B17816 FR - 408525FR permettre ainsi aux pavés de la paire de transmettre un mot de 32 bits respectif simultanément. [0133] Si un élément de _La paire souhaite envoyer un mot de 64 bits, le multiplexeur de contrôle de largeur 1202 du pavé voisin est réglé de manière à recevoir le mot le plus significatif fourni par le pavé d'envoi et pour le passer à la sortie du multiplexeur. Cela va amener le mot le plus significatif de la sortie de 64 bits provenant du pavé d'envoi à être placé sur les fils croisés du bus d'échange associé aux pavés voisins (qui à ce stade est inhibé et ne peut rien envoyer). Dans un but de clarté, la ligne de commande de MUX provenant du drapeau de contrôle de largeur dans le stockage 1200 du pavé d'envoi TIDOO est représentée connectée à l'entrée de commande du multiplexeur 1202 du pavé voisin (non émetteur) TIDO'. De façon similaire, le pavé voisin TIDO1 a aussi une ligne de commande de MUX connectée de sa mémorisation de contrôle 1200 à l'entrée du multiplexeur de contrôle de largeur 1202 de son pavé appairé, bien que cela ne soit pas représenté en figure 12 dans un but de clarté. [0134] On va faire référence maintenant à la figure 13 pour expliquer une réception à double largeur utilisant des pavés appairés. Les pavés appairés en figure 13 sont référencés TIDO3 et TID04, bien Qu'il soit facile de comprendre que cette fonctionnalité peut être utilisée en combinaison avec la fonctionnalité d'émission à double largeur de sorte qu'un pavé comme TIDOO pourrait aussi avoir la fonctionnalité représentée sur TIDO3 par exemple. Une réception à double largeur est obtenue en partageant des ressources d'échange entrantes de voisins pendant la durée d'un transfert. Lorsqu'il est configure pour une réception à double largeur, chaque pavé se trouvant dans une paire de pavés peut choisir d'échantillonner ou d'ignorer les données entrantes. Si tous les deux choisissent d'échantillonner, ils vont voir les mêmes données 54 B17816 FR - 408525FR entrantes. La réception à double largeur est activée en collaboration avec le pavé voisin par l'intermédiaire de la valeur INCOMING FORMAT décrite précédemment Qui identifie si les données entrantes sont de 32 bits ou 64 bits. La valeur du multiplexeur entrant 210 du pavé primaire de la paire de pavés doit être réglé à l'ID de pavé du pavé d'envoi. L"entrée d'écoute' du multiplexeur entrant 210 du pavé secondaire de la paire de pavés doit être réglée à l'ID de pavé de l'autre pavé de la paire d'envoi. On notera que dans ce cas, d'un point de vu strict, le pavé d'"envoin de la paire de pavés d'envoi (par exemple TIDO') n'est pas actuellement en émission, mais a fourni son mot le plus significatif pour utiliser les ressources d'échange du pavé TIDO°. Ainsi, les multiplexeurs entrants 210 des pavés de la paire de pavés réceptrice doivent être connectés respectivement aux fils croisés sur lesquels les mots individuels de la sortie d'émission à double largeur de la paire émettrice sont placés. [0135] On notera que dans certains modes de réalisation, même si les multiplexeurs entrants 210 sont commutés pour écouter simultanément leurs fils croisés respectifs de l'échange, cela ne signifie pas nécessairement que _Les valeurs entrantes vont être reçues au niveau des pavés de la paire de pavés réceptrice simultanément, en raison des latences de parcours différentes entre les pavés d'échange et individuels. Il y a donc trois possibilités à considérer dans une paire de pavé réceptrice. [0136] Dans une première possibilité, les deux bus entrants de l'interface Exin doivent être traités indépendamment (aucun pavé de la paire de pavés ne participe à une réception en double largeur). [0137] Selon la deuxième possibilité, le bus d'échange entrant local est en cours d'utilisation pour transférer la B17816 FR - 408525FR composante antérieure d'un élément à double largeur (et cette composante devrait maintenant être retardée). Cela implique que le bus du voisin va être utilisé pour transférer la composante non antérieure du même élément à double largeur. [0138] Selon la troisième possibilité, le bus d'échange entrant local est en cours d'utilisation pour transférer la composante non antérieure d'un élément à double largeur. Cela implique que le bus du voisin était utilisé pour transférer la composante antérieure du même élément à double largeur (et par conséquent la composante de données antérieure du bus du voisin devrait avoir été retardée). [0139] La figure 13 représente des circuits 1300 qui s'occupent de ces scénarios en utilisant des multiplexeurs 1302 et 1304. On notera que les circuits 1300 sont dupliqués sur l'entrée de chaque pavé de la paire de pavés de réception, mais sont seulement représentés sur l'entrée de TIDO3 dans un but de clarté. [0140] Le contrôle du multiplexeur provient du contrôle de format d'entrée qui est fourni par un registre dans une interface Exin 224. Si le pavé TIDO3 doit fonctionner dans un mode à 32 bits, il contrôle le multiplexeur 1302 pour laisser passer un mot de 32 bits au niveau de l'entrée supérieure du multiplexeur en figure 13 par l'intermédiaire d'un étage de pipeline 1306 et d'un tampon de commande 1308. [0141] Si les pavés récepteurs fonctionnent en paire, le multiplexeur 1302 est contrôlé de manière à bloquer son entrée supérieure et permettre que le mot le moins significatif provenant de l'entrée inférieure passe dans l'étage de pipeline 1306. Dans le cycle suivant, le mot le plus significatif est sélectionné pour passer à travers le multiplexeur 1304 dans le tampon de commande 1308, accompagné du mot le moins significatif qui a été avancé par horloge 56 B17816 FR - 408525FR dans l'étage de pipeline 1306. Le tampon de commande 1308 peut décider s'il faut recevoir ou pas le mot de 64 bits. On notera que d'après la logique, le mot de 64 bits va être reçu simultanément au niveau du pavé voisin (TID04). Dans certaines circonstances les deux pavés pourraient vouloir lire la même valeur de 64 bits, mais dans d'autres circonstances l'un des pavés pourrait souhaiter l'ignorer. [0142] On notera qu'il peut y avoir des modes de réalisation dans lesquels le LSW et le MSW d'un transfert de 64 bits peuvent être reçus simultanément au niveau de leur pavés récepteurs appairés, auquel cas le délai relatif de l'étage de pipeline 1306 ne serait pas nécessaire. [0143] On a décrit ici un nouveau paradigme d'ordinateur qui est particulièrement efficace dans le contexte des modèles de connaissance pour l'apprentissage par machine. On prévoit une architecture qui utilise le déterminisme temporel comme dans une phase d'échange d'un paradigme BSP pour traiter efficacement de très grandes quantités de données. Bien qu'on ait décrit des modes de réalisation particuliers, d'autres applications et variantes des techniques décrites pourront apparaître à l'homme de l'art une fois la description faite. Le domaine de la présente description n'est REVENDICATIONS1.0rdinateur comprenant : une pluralité d'unités de traitement, chacune comportant un stockage d'instructions contenant un programme local, une unité d'exécution exécutant le programme local, un stockage de données pour maintenir des données ; 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és de traitement par l'ensemble respectif de fils de sortie et connectable à chacune des unités de traitement par les fils d'entrée respectifs par l'intermédiaire de circuits de commutation contrôlables par chaque unité de traitement ; 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, les unités de traitement étant agencées pour exécuter leurs programmes locaux selon une horloge commune, les programmes locaux étant tels que dans la phase d'échange au moins une unité de traitement exécute une instruction d'envoi à partir de son programme local pour émettre à un instant d'émission un paquet de données sur son ensemble de fils de connexion de sortie, le paquet de données étant destiné à au moins une unité de traitement destinataire mais ne comportant pas d'identifiant de destination, et à un instant de commutation prédéterminé l'unité de traitement destinataire exécutant une instruction de contrôle de commutateurs a partir de son programme local pour contrôler ses circuits de commutation pour connecter son ensemble de fils d'entrée au tissu de commutation pour recevoir le paquet de données à un instant de réception, l'instant d'émission, l'instant de commutation et l'instant de 58 B17816 FR - 408525FR réception étant gouvernés par l'horloge commune par rapport au signal de synchronisation. 2. Ordinateur selon la revendication 1, dans lequel l'instruction d'envoi définit explicitement une adresse d'envoi identifiant un emplacement dans le stockage de données à partir duquel le paquet de données doit être envoyé. 3. Ordinateur selon la revendication 1, dans lequel aucune adresse d'envoi n'est définie explicitement dans l'instruction d'envoi, et le paquet de données est émis à partir de l'adresse d'envoi définie dans un registre défini implicitement par l'instruction d'envoi. 4. Ordinateur selon la revendication 3, dans lequel le programme local comprend une instruction de mise à jour d'adresse d'envoi pour mettre à jour l'adresse d'envoi dans le registre implicite. 5. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel l'instant d'émission est un nombre connu de cycles d'horloge après l'instant d'envoi auquel l'instruction est exécutée. 6. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel les circuits de commutation comprennent un multiplexeur comportant un ensemble de fils de sortie connecté a son unité de traitement, et de multiples ensembles de fils d'entrée connectés au tissu de commutation, d'où il résulte que l'un des multiples ensembles de fils d'entrée est sélectionné tel que contrôlé par l'unité de traitement. 7. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel l'unité de traitement destinataire est agencée pour recevoir le paquet de données et le charger 59 B17816 FR - 408525FR dans le stockage de données à un emplacement mémoire identifié par un pointeur mémoire. 8. Ordinateur selon la revendication 7, dans lequel le pointeur mémoire est automatiquement incrémenté après que chaque paquet de données a été chargé dans le stockage de données. 9. Ordinateur selon la revendication 7, dans lequel le programme local au niveau de l'unité de traitement destinataire comprend une instruction de mise à jour de pointeur mémoire qui met à jour le pointeur mémoire. 10. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel l'instruction d'envoi identifie un nombre de paquets de données à envoyer, chaque paquet de données étant associé à un instant d'émission différent. 11. Ordinateur selon la revendication 6, dans lequel l'un des ensembles de fils d'entrée est connecté à une entrée nulle. 12. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel l'unité de traitement destinataire est la même unité de traitement que l'unité de traitement qui a exécuté une instruction d'envoi à un instant antérieur, d'où il résulte que la même unité de traitement est agencée pour envoyer un paquet de données et recevoir ce paquet de données à un instant ultérieur. 13. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel de multiples d'unités de traitement sont agencées pour exécuter des instructions d'envoi respectives pour émettre des paquets de données respectifs, et dans lequel au moins certains des paquets de données ne sont destinés à aucune unité de traitement destinataire. 60 B17816 FR - 408525FR 14. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel au moins deux des unités de traitement coopèrent dans une paire émettrice, dans lequel un premier paquet de données est émis à partir d'une première unité de traitement de la paire par l'intermédiaire de son ensemble de fils de connexion de sortie, et un deuxième paquet de données est émis à partir de la première unité de traitement de la paire par l'intermédiaire de l'ensemble de fils de connexion de sortie de la deuxième unité de traitement de la paire pour effectuer une transmission à double largeur. 15. Ordinateur selon l'une quelconque des revendications précédentes, dans lequel au moins deux des unités de traitement fonctionnent comme paire réceptrice dans laquelle chaque unité de traitement de la paire contrôle ses circuits de commutation pour connecter son ensemble de fils d'entrée respectif au tissu de commutation pour recevoir des paquets de données respectifs à partir de pavés respectifs d'une paire d'envoi. 16. Procédé de calcul d'une fonction dans un ordinateur comprenant une pluralité d'unités de traitement comportant chacune un stockage d'instructions contenant un programme local, une unité d'exécution pour exécuter le programme local, un stockage de données pour contenir des données, et 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és de traitement par les ensembles respectifs de fils de sortie et connectable à chacune des unités de traitement par leur fils d'entrée respectifs par l'intermédiaire de circuits de commutation contrôlables par chaque unité de traitement ; et un module de synchronisation actionnable pour générer un signal 61 B17816 FR - 408525FR synchronisation pour contrôler l'ordinateur pour commuter entre une phase de calcul et une phase d'échange, le procédé comprenant : les unités de traitement exécutent leurs programmes locaux dans la phase de calcul selon une horloge commune, et dans la phase d'échange au moins une unité de traitement exécute une instruction d'envoi à partir de son programme local pour émettre à un instant d'émission un paquet de données sur son ensemble de fils de connexion de sortie, le paquet de données étant destiné à au moins une unité de traitement destinataire mais ne comportant pas d'identifiant de destination, et à un instant de commutation prédéterminé l'unité de traitement destinataire exécute une instruction de contrôle de commutateurs à partir de son programme local pour contrôler les circuits de commutation pour connecter son ensemble de fils d'entrée au tissu de commutation pour recevoir le paquet de données à un instant de réception, l'instant d'émission, l'instant de commutation et l'instant de réception étant gouvernés par l'horloge commune par rapport au signal de synchronisation. 17. Procédé selon la revendication 16, dans lequel la fonction est prévue sous la forme du graphe statique comprenant une pluralité de noeuds interconnectés, chaque noeud étant mis en oeuvre par un codelet des programmes locaux. 18. Procédé selon la revendication 17, dans lequel dans la phase de calcul chaque codelet traite des données pour produire un résultat, dans lequel certains des résultats ne sont pas nécessaires pour une phase de calcul suivante et ne sont reçus par aucune unité de traitement destinataire. 62 B17816 FR - 408525FR 19. Procédé selon l'une quelconque des revendications 16 à 18, dans lequel dans la phase d'échange les paquets de données sont transmis entre des unités de traitement par l'intermédiaire du tissu de commutation et de circuits de commutation. 20. Procédé selon l'une quelconque des revendications 16 à 19, dans lequel chaque unité de traitement indique au module de synchronisation que sa propre phase de calcul est achevée, et dans lequel le signal de synchronisation est généré par le module de synchronisation lorsque toutes les unités de traitement ont indiqué Que leur propre phase de calcul est achevée, pour commencer la phase d'échange. 21. Procédé selon la revendication 17, dans lequel le graphe représente une fonction d'apprentissage par machine. 22. Procédé selon l'une quelconque des revendications 16 à 21, dans lequel dans la phase d'échange des paquets de données sont transmis par l'intermédiaire du tissu de commutation dans un mode en pipeline par l'intermédiaire d'une succession de stockages temporaires, chaque stockage maintenant un paquet de données pendant un cycle de l'horloge commune.