Brevet FR2666670A1 — publié le 19920313

La présente invention concerne l'architecture d'un coprocesseur de calcul parallèle à associer à un microprocesseur pour accélérer l'exécution des programmes par le microprocesseur lorsqu'ils comportent de nombreuses opérations de calcul, et plus particulièrement lorsqu'ils font intervenir des matrices creuses (dont certains éléments sont nuls) multipliées par des vecteurs. Traditionnellement les calculateurs parallèles les plus efficaces pour l'exécution des produits matrice-vecteur font appel à une mémoire distribuée telle que les coefficients de la matrice sont répartis sur les opérateurs qui constituent le calculateur, chaque opérateur étant doté d'une mémoire propre sur laquelle il effectue ses calculs indépendemment. De plus, pour obtenir les performances optimales, les opérateurs fonctionnent en temps masqué: le traitement d'une instruction s'achève à chaque cycle bien que chaque instruction nécessite plusieurs étapes de traitement. Un exemple de calculateur suivant ces principes est proposé dans C.R.A.S.Y. - Un Calculateur de Réseaux Adaptatifs SYstolique - Application au calcul neuromimétique, par Anne GUERIN, Thèse de Docteur Ingénieur, Institut National Polytechnique de Grenoble, ler Juillet 1987.Mais à cause des difficultés de communication et de synchronisation entre les opérateurs, ces calculateurs ne supportent pas de programme de multiplication d'une matrice par un vecteur qui soit efficace lorsque la matrice est creuse. Si une matrice creuse est traitée comme une matrice dense, l'efficacité est réduite car des traitements inutiles sont réalisés avec les coefficients nuls de la matrice et ces coefficients nuls occupent inutilement de la place en mémoire. Par ailleurs, les programmes pour un traitement des matrices sans manipulation des coefficients nuls de la matrice font appel à des structures de données pour la gestion desquelles les processeurs de calcul parallèle ne sont pas optimisés, ce qui conduit à un ralentissement des traitements et une utilisation bien moins efficace que dans le cas des matrices denses.Une étude des performances qu'il est possible d'obtenir par ce type de technique sur un processeur vectoriel classique est fournie dans Sparse Matras Multiplication on Vector Computers, par Jocelyne ERHEL, Rapport de Recherche N 1101, INRIA (Roquencourt), Octobre 1989. Le coprocesseur selon l'invention permet de remédier au problème de synchronisation et de communication des architectures systoliques, en particulier pour les programmes de traitement des matrices creuses. n comporte en effet selon une première caractéristique, des registres partagés entre chaque paire d'opérateurs voisins et réalisés sous forme de file de données de sorte que les communications entre opérateurs s'établissent par simple lecture ou écriture séquentielle dans ces registres sans nécessiter ni rendez-vous pour l'échange, ni synchronisme des traitements. Tous les opérateurs exécutent ainsi la même instruction en cascade, mais indépendemment. Selon un mode particulier de réalisation, il est possible de diffuser des données par un second mode de communication qui copie une donnée, lue dans un des registres d'un opérateur, dans un autre registre. L'instruction écrit la donnée en parallèle dans tous les opérateurs du coprocesseur par l'intermédiaire d'un bus commun, prioritairement sur les instructions du premier mode de communication qui s'exécutent en cascade. De plus, le coprocesseur selon l'invention permet d'obtenir, pour les matrices creuses, des performances voisines de celles sur les matrices denses et en particulier dans le cas du produit d'une matrice par un vecteur. Il comporte en effet selon une autre caractéristique, des registres locaux sur chaque opérateur pour un accès séquentiel aux coefficients de matrice qui sont mémorisés dans chaque opérateur ou aux composantes de vecteurs correspondantes. Chaque registre selon cette caractéristique, nommé par la suite registre vectoriel, est associé à une structure de données programmable, directement supportée par le matériel sans diminution de performance notable. Chaque structure de donnée consiste en une liste commune à tous les opérateurs et des tables d'indirection propres à chaque opérateur.Chaque élément de la liste se compose d'un champ qui donne l'adresse de l'élément suivant de la liste et d'un champ qui indique l'état de la liste. De plus, chaque registre selon cette caractéristique est associé à un élément binaire qui indique si les accès aux éléments mémorisés par le registre doivent être directs ou utiliser une table d'indirection et à un déplacement spécifique au registre permettant de partager la même structure parmi plusieurs registres. Selon des modes particuliers de réalisation: - n est possible de tester la fin d'une liste par une instruction qui retourne au microprocesseur l'indicateur d'état associé à l'élément courant de la liste. - ll est possible de d'utiliser des instructions qui donnent directement accès sur chaque opérateur à l'index fourni par la table d'indirection associée à un registre vectoriel, les valeurs ainsi obtenues pouvant alors servir de données pour des calculs ultérieurs. - n est possible d'associer sur chaque opérateur une table binaire et un compteur à chaque registre vectoriel de manière à ne mémoriser que les composantes utiles lorsque toutes les composantes d'un registre pour accès séquentiel du coprocesseur sont diffusées séquentiellement aux opérateurs. - I1 est possible d'accéder en lecture ou en écriture plusieurs fois au même emplacement défini par un registre pour accès séquentiel, avant d'accéder à l'emplacement suivant. - n est possible de réduire la zone d'exécution de n'importe qu'elle instruction à un ensemble d'opérateurs contigus. - n est possible pour n'importe quelle instruction s'exécutant en cascade, de remplacer l'opération du premier élément de la cascade, par un déplacement de la première donnée spécifiée pour l'opération vers l'emplacement désigné pour mémoriser le résultat. - n est possible de bloquer temporairement l'écoulement des instructions qui s'exécutent en cascade de manière à modifier le nombre de cycles de traitement apparent de chaque opérateur. Les dessins annexés illustrent l'invention: La Lafigure 1 est un schéma général d'un exemple de coprocesseur selon l'invention montrant la connexion entre le contrôleur du coprocesseur et les opérateurs. - La figure 2 est un schéma du contrôleur montrant la gestion centrale de liste. - La figure 3 est le schéma d'ensemble d'un opérateur. - La figure 4 représente le bloc de cadencement d'un opérateur. - La figure 5 représente le bloc de contrôle d'exécution en cascade d'un file d'instructions. - La figure 6 représente le processeur de traitement et les chemins de données d'un opérateur. - La figure 7 représente le générateur d'adresse des registres file de données. - La figure 8 représente le générateur d'adresse pour accès parallèle aux registres locaux. - La figure 9 représente le générateur d'adresse pour accès en cascade aux registres locaux. Dans l'exemple de réalisation montré sur la figure 1, le coprocesseur se compose d'un contrôleur (CTR) connecté à un microprocesseur par l'intermédiaire des signaux ST, HD, CLK, INS/, OE/, WE/, CA et CD, connecté au premier opérateur (OPRO) par l'intermédiaire des signaux CAS et OP, et connecté à N opérateurs (OPRO, OPR1 ... OPR(N-1)) par l'intermédiaire d'un bus commun à tous (BC), les opérateurs étant numérotés continuement de 0 à (N-l) avec N un nombre entier, par exemple égal à 8. L'interface entre le microprocesseur et le coprocesseur sera réalisée selon des méthodes connues en fonction du microprocesseur choisi. ST indique au microprocesseur l'état de la dernière liste testée. Le signal INS/ indique au coprocesseur qu'une instruction est présente sur CD. CD sert également de bus de données lors de la programmation du coprocesseur, CA indiquant alors l'adresse mémoire accédée, OE/ validant une lecture en mémoire et WEI validant une écriture. Si le coprocesseur n'est pas pret à recevoir une instruction qui lui est présentée, il positionne le signal HD, l'instruction doit alors être maintenue sur CD jusqu'à ce que HD devienne inactif. CLK est un signal d'horloge utilisée par le coprocesseur pour son cadencement. Dans l'exemple de réalisation de l'invention, le coproceseur fonctionne en temps masqué et accepte une instruction tous les quatre cycles d'horloge, comme il est détaillé plus loin. Nous distinguerons donc par la suite deux échelles de temps, d'une part le "cycle" qui correspond à un cycle d'horloge et "l'étape" qui correspond à une opération de traitement ou quatre cycles d'horloge. L'efficacité maximale du coprocesseur sera ainsi obtenue en utilisant un microprocesseur fournissant une instruction coprocesseur avant chaque nouvelle étape. Il sera par exemple possible d'utiliser un microprocesseur fonctionnant à la cadence de CLK, laissant ainsi trois cycles sur quatre au microprocesseur pour le séquencement du programme. Le signal HD est alors important pour ralentir un microprocesseur si moins de trois cycles sont utilisés pour le séquencement. Le signal OP code l'instruction envoyée au premier opérateur et est validé par le signal CAS qui indique une instruction s'exécutant en cascade. Le bus commun (BC) se compose des signaux SYN, PHI, PAR, PA PD, POE/ et PWE/. Le signal SYN synchronise tous les opérateurs à chaque étape. Le signal PHI est une image de CLK qui synchronise tous les opérateurs à chaque cycle. Le signal PAR indique un transfert en parallèle d'une donnée placée sur PD avec PA stipulant l'adresse. POE/ et PWE/ servent respectivement à la lecture et à l'écriture directe par le microprocesseur dans les mémoires des opérateurs pour l'initialisation et la mise à jour des structures. Le numéro d'opérateur sert alors au décodage d'adresse et les mémoires de chaque opérateur sont accédées séparément selon des techniques connues. L'activation des signaux OE/ et WE/ bloquent ainsi toutes les autres fonctions du coprocesseur. Nous condsidèreront à présent ces signaux inactifs en en faisant abstraction pour clarifier la description. Par ailleurs, les sorties OPO, CO et Q de chaque opérateur (OPRy) sont connectées respectivement aux entrées OPI, CI et P de l'opérateur suivant (OPRysl) avec y variant de 0 à N-2. Sur le dernier opérateur (OPRN-1), les sorties OPO et CO restent non connectées et la sortie Q est connectée à l'entrée P du premier opérateur (OPRO) ce qui permet de simuler une cascade d'opérateurs de longueur arbitraire en répétant autant de fois que nécessaire la même instruction ou le même groupe d'instructions. Enfin, pour le premier opérateur (OPRO), l'entrée CI est connectée à la sortie CAS du contrôleur (CTR) et l'entrée OPI à la sortie OP. Les principales structures de bus qui seront employées par la suite, CD, OP, OPN, P ou Q, PA, PT et XB, sont décrites ci-après. CD qui reçoit les instructions comme indiqué plus haut, se compose de six champs indépendants: RS1, RS2, RD, TST, C/P et OPC. RSI, RS2 et RD ont la structure de RGC qui sera vue dans la description de OP, Rs1 et RS2 codant respectivement la première et la deuxième source et RD codant la destination du résultat d'une opération. TST, codé sur un bit, indique une instruction de test de liste pour TST=1. C/P, codé sur un bit, indique une opération s'exécutant en cascade (C/P=0) et C/P indique une instruction de transfert en parallèle (C/P=1). Enfin la struture d'OPC sera donnée dans la description de OP ci-après. OP se compose de trois champs principaux: X, RGC et OPC. X codé sur k bits, avec par exemple k=16, donne l'index associé au registre codé par RGC. RGC codé sur r+2 bits, avec r non nul et par exemple r=4, se compose de deux champs: INC et RNUM. INC codé sur 1 bit indique si le registre pour accès séquentiel doit être mis à jour pour l'accès à l'élément suivant (INC=1) ou non (INC=0). RNUM codé sur r+l bits, se compose à son tour des champs F/V et NUM. F/V codé sur 1 bit indique un accès à une file (F/V=0) ou à un registre vectoriel (F/V=1). NUM codé sur r bits, correspond, dans le cas d'un registre vectoriel, au numéro du registre (avec r=4 il est possible de coder 16 registres vectoriels), sinon il est composé de deux champs: P/Q et FNUM.P/Q est ignoré en lecture puisque la lecture se fait toujours dans la file de donnée de l'opérateur, en écriture il indique l'accès à la file de l'opérateur (P/Q=0) ou à la file de l'opérateur suivant (P/Q=1). Enfin FNUM codé sur r-l bits indique le numéro de la file de données (avec r=4 il est possible de coder 8 registres). Pour une opération de transfert, OPC se compose deux champs SRF et RNG. Pour une opération s'exécutant en cascade OPC se compose de six champs : LCK, ULCK, DIR, ANN, FOP et RNG. SRF codé sur n bits indique l'opérateur dont le registre file de données est source du transfert, le cas échéant. LCK et ULCK, chacun codé sur 1 bit, indiquent respectivement, lorsqu'ils sont activés (au niveau 1), un blocage et un déblocage des instructions s'exécutant en cascade. DIR codé sur 1 bit indique un accès direct aux index fournis par la table d'indirection pour des registres vectoriels source (DIR=1) ou un accès indirect aux données des registres (DIR=0). ANN codé sur 1 bit indique (ANN=1) le remplacement de l'opération par un simple transfert, pour le premier opérateur de la cascade (OPRO), ou une exécution normale (ANN=0). FOP sur p bits code l'opération réalisée par l'unité arithmétique de l'opérateur (71) visible sur la figure 6, avec par exemple p=2 il est possible de coder quatre opérations arithmétiques différentes.Enfin RNG codé sur 2n bits se compose de deux champs: MIN et MAX, chacun codé sur n bits, qui donnent les bornes de la zone d'exécution d'une instruction avec respectivement, MIN pour le numéro du premier opérateur et MAX pour le numéro du dernier opérateur (si MIN est strictement supérieur à MAX, l'instruction est ignorée), et n tel que 2n > N, par exemple n=3 pour N=8. Le champ OPC est ainsi codé sur 2n+p+4 bits, en supposant par ailleurs nsp+4 (une partie du champ est alors inutilisée lors des transferts parallèle). OPN codé sur 2n+p+5 bits est constitué d'un champ OP et d'un champ OPV codant sur 1 bit si l'opération OP correspondante est opérante (OPV=1) ou parasite (OPV=0). P (ou -Q > , codé sur q+r bits, est constitué d'un champ DP (ou DQ) codant sur q bits la donnée transmise entre opérateurs et un champ NUM indiquant la destination, le cas échéant. PA qui correspond à l'adresse de transfert parallèle comme indiqué plus haut, se compose de cinq champs: S, SRF, RNG, RGC et X. Le champ S sera décrit avec PT tandis que les champs SRF, RNG, RGC et X ont été décrits avec OP. PT qui correspond aux pointeurs renvoyés par la liste centrale (14) visible sur la figure 2, est codé sur k+m bits et se compose de deux champs: NEX et MRK. NEX codé sur k bits donne l'adresse de lTélément suivant de la liste. MRK code l'état de la liste sur m bits, avec m non nul et par exemple m=2, il se compose de deux champs: S et T. S sur 1 bit indique une fin de structure et est utilisé pour réinitialiser les transferts séquentiels correspondants et T codé sur m-l bits complète S pour marquer des structures composées, multidimentionnelles par exemple. XB qui code sur w+k+l bits l'index de base utilisée localement sur chaque opérateur pour accéder aux registres vectoriels, se compose de trois champs PAG, BAS et I/D. PAG sur w bits code le numéro de page mémoire où se trouve les données du registre, avec par exemple w=2 il est possible d'utiliser quatre pages mémoire. BAS code sur k bits l'adresse du premier élément du registre à l'intérieur de la page, avec k=16 un registre comporte au maximum 65536 (64K) éléments par opérateurs, soit un total de 512K pour huit opérateurs. Enfin, I/D indique si l'accès à la donnée est direct (I/D=1), par exemple pour l'accès aux coefficients d'une matrice, ou indirect (I'D=0), par exemple dans le cas de l'accès aux composantes d'un vecteur associées aux coefficients de la matrice. Le principe de fonctionnement du contrôleur (CTR) du coprocesseur donné en exemple sur la figure I est détaillé sur la figure 2. Un décodeur (1) identifie les instructions destinées au coprocesseur. Il est possible de programmer le décodeur en fonction du microprocesseur pour, si possible, associer au coprocesseur des codes instruction inutilisés du microprocesseur, CD pourra alors être directement relié au bus d'instruction du microprocesseur, sinon le microprocesseur devra générer les instructions en les écrivant dans le coprocesseur comme des données dans un périphérique classique. Quelque soit le mode d'utilisation adopté, l'instruction est validée par le front montant de INS/ qui mémorise la sortie du décodeur dans le registre (3) pendant que la bascule D (2) mémorise l'instruction. Cette bascule transmet la requête à la porte ET (4) qui la transmet à son tour au registre à décalage (8) et provoque la mémorisation de l'instruction dans le registre (7) lorsqu'une étape est achevée comme indiqué par la sortie de retenue anticipée du compteur diviseur par 4 (5). Tant que l'étape n'est pas achevée, la requête provoque le positionnement du signal HD en sortie de la porte ET (6). Lorsqu'une requête est transmise, au début d'une étape, le registre à décalage (8) engendre trois impulsions successives, sur Q1 au premier cycle, sur Q2 au deuxième et sur Q3 au troisième. L'impulsion de Q1 remet à zéro la bascule (2) annulant la requête pour éviter de bloquer le microprocesseur tant qu'une nouvelle instruction du coprocesseur n'est pas présentée. Ce faisant, l'entrée du registre à décalage n'est plus activée au début du cycle 1 et ainsi sont engendrées des impulsions larges d'un cycle. Par l'intermédiaire du réseau de portes ET (9), ces impulsions valident successivement les tampons à sortie 3-états (10) durant la deuxième moitiée de cycle évitant les parasites de commutation.Un réseau de résistances (11) polarise ce bus pour rendre les signaux inactifs lorsque les tampons ne sont pas activés et en particulier lors du dernier cycle de chaque étape. Ainsi les champs RSI, RS2 et RD sont multiplexés pour être placés séquentiellement dans le champ RGC du bus OP comme il est expliqué plus loin. Le champ NUM des codes de registre ainsi multiplexés est présentéscomme adresse AA au port A de la mémoire à double accès (12), qui retourne successivement en sortie DA les anciens index de liste des registres correspondants. Ces index sont mémorisés à chaque cycle par le registre (13) qui les transmet comme adresse A à la mémoire de liste (14) qui fournit les nouveaux pointeurs PT correspondants sur la sortie D. Ces pointeurs sont mémorisés à chaque cycle par le registre (15) qui présente ainsi chaque nouvel index en écriture sur l'entrée DB du port B de la mémoire à double accès précitée avec deux cycles de retard sur la lecture. Cependant, les codes de registre multiplexés correpondants sont retardés également de deux cycles par le registre à décalage à deux étages (16) de sorte que le champ RNUM est présenté au port B de la mémoire (12) avec le nouvel index correspondant.En fait le champ NUM est connecté aux lignes d'adresse AB tandis que le champ F/V est connecté à l'entrée de sélection de boîtier CSB de la mémoire (12) de sorte que la mise à jour est ineffective lorsqu'un registre file de données est adressé (F/V=0). De plus, le champ INC est connecté à la porte ET (17) qui transmet une impulsion à l'entrée de validation d'écriture WEB de la mémoire (12) durant la deuxième moitié de chaque cycle, de sorte que l'index n'est effectivement mis à jour que si l'accès à l'élément suivant est demandé pour la prochaine instruction.Avec les motaions précédentes, la mémoire (12) comporte 2r mots de k bits, par exemple k=16 et r=4 donne une capacité de 16 mots de 16 bits. De mêmre, la mémoire (14) comporte 2k mots de k bits, soit par exemple, avec k=16 et m=2, 64K mots de 18 bits. De plus, si le champ TST est actif, sur le front montant de Q3, c'est à dire à la fin du deuxième cycle, la porte ET (18) provoque la mémorisation du marqueur de liste MRK qui est encore présent en sortie de la mémoire de liste (14), c'est à dire le marqueur correspondant à la première source RS1, par le registre (19) dont la sortie est envoyée au microprocesseur par l'intermédiaire de ST. Par ailleurs, les tampons (20) et (21) qui sont connectés à la sortie des registres (15) et (16) envoient respectivement sur les bus OP et PA, les codes associés à la nouvelle instruction à partir du deuxième cycle et lors des trois suivants, les champs RS1, RS2 et RD étant transmis dans cet ordre par le champ RGC alors que le champ X transmet à chaque fois l'index associé au registre codé par RGC. Enfin, les signaux de synchronisation envoyés aux opérateurs sont synthétisés comme suit. La retenue du diviseur (5) est retardée de deux cycles par le registre à décalage à deux étages (23) qui provoque ainsi une impulsion au niveau 0 juste avant le deuxième cycle. Cette impulsion est mise en forme par la porte OU (24) dont la deuxième entrée est connectée à l'horloge CLK de sorte que l'impulsion se prolonge jusqu'à la fin de la première moitié du premier cycle. Le signal ainsi obtenue est envoyé sur la ligne SYN et est combiné avec le signal C/P par les portes ET (26) pour générer les signaux PAR et CAS qui valident pour trois cycles (trois fronts d'horloge consécutifs) un transfert parallèle (PAR) ou une instruction s'exécutant en cascade (CAS).Par la suite, le cycle où SYN est échantillonné au niveau zéro sera nommé cycle 0 et les cycles suivant seront respectivement aux cycles 1, 2 et 3. Les codes d'instruction sont ainsi transmis durant les cycles 0, 1 et 2 comme indiqué par PAR ou CAS. Néanmoins, le cycle 3 pourra également être utilisé, bien que le champ RGC soit alors inactif. Le signal d'échantillonnage sera basé sur PHI qui est la copie de CLK par le tampon (22). La figure 3 donne une vue d'ensemble d'un opérateur, tous les opérateurs ayant la même structure dans l'exemple de réalisation proposé. Un réseau de n commutateurs (29) identifie néanmoins chaque opérateur OPy par le code binaire sur n bits du numéro d'opérateur y. Un bloc de cadencement (CAl)), à partir de signaux PHI et PAR génère les signaux CK, G1, G2, G3, G3/0, HLF, H1, H2, PAR1, PAR2 et PAR3 qui sont utilisés pour le déroulement des instructions exécutées par l'opérateur. Sa structure est donné par la figure 4 comme il sera détaillé plus loin, nous donnons ici un aperçu des signaux engendrés. CK est une horloge utilisée pour l'exécution des instructions en cascade, elle est donc désactivée lorsqu'une instruction de transfert parallèle (qui est prioritaire) s'exécute. Les signaux G sont des signaux de validation utilisés pour l'exécution d'une instruction en cascade, il sont ainsi inactifs si une instruction de transfert parallèle s'exécute, dans le cas contraire G1 est actif au cycle 1, G2 est actif au cycle 2, G3 est actif au cycle 3 et G3/0 est actif durant les cycles 3 et 0.HLF est actif durant les cycles 0 et 1, il indique la première moitié d'une étape. H1 (et respectivement H2) est actif durant la deuxième moitié du cycle 1 (et respectivement du cycle 2). Enfin PAR1, PAR2 et PAR3 correspondent à PAR retardé respectivement de un, deux et trois cycles. Une pile d'instructions en attente d'exécution en cascade (PIC) reçoit les instructions OPI lorsqu'elles sont validées par CI. Si la pile n'est pas vérouillée et qu'une instruction de transfert parallèle ne s'exécute pas, l'activation de l'entrée SYN provoque l'exécution de la première instruction en attente (la première entrée), qu'elle transmet également à l'opérateur suivant, le cas échant, par OPO en validant l'opération avec CO. L'entrée PHA permet de vérifier si le numéro de l'opérateur est compris dans la zone d'exécution de l'instruction. Lorsque la pile est vide, elle reste en attente et la sortie CO inactive ne valide pas OPO. La pile est également connectée au signal PAR du bus commun. La structure de la pile détaillée par la figure 5 est exposée plus loin. Un processeur arithmétique (FPU) reçoit, le cas échéant, le code d'opération FOP de la pile (PIC) ainsi qu'un éventuel ordre d'annulation ANN. n reçoit également l'identifiant NUMQ d'un registre file de données destination dans l'opérateur suivant. Sur le bus REG, il transmet en retour l'identification du registre file de données destination issue de l'opérateur précédent et sur CASP, la validation de ce transfert. Les signaux, SRC1 et SRC2 issus de la pile (PIC) indiquent si la source est une file de données ou un registre vectoriel. n reçoit les données de l'opérateur précédent par P et il les transmet à l'opérateur suivant par Q. Par ailleurs, ce processeur est connecté directement aux signaux PA et PD du bus commun pour les transferts parallèles où il sert d'intermédiaire avec la mémoire de registres file de données (27) par FD et avec la mémoire de données des registres vectoriels (28) par VD. Le signaux PAR1, PAR2 et PAR3 sont utilisés pour contrôler les transferts.La structure du processeur est détaillée par la figure 6, comme exposé plus loin. La mémoire (27) comporte 2f+r-1 mots de q bits, 2f étant la taile de chaque file de données et 2r-1 étant le nombre de registres. Avec par exemple: f=12, r=4 et q=32, elle contient 32K mots de 32 bits. Similairement, avec les notations vues lors de la description des principaux bus, la mémoire (28) comporte 2k+W mots de q bits. Avec par exemple : k=16, w=2 et q=32, elle comporte 256K mots de 32 bits. Un générateur d'adresse (FGA) pour les registres file de données est connecté en sortie aux lignes d'adresse de la mémoire (27) par FA et en entrée aux signaux CK, HLF, GI, G2 G3, PAR1 et PAR3 issus du bloc de cadencement (CAl)), au signal PAR du bus commun (BC), ainsi qu'au bus REG de la pile (PIC). n sélectionne ainsi les pointeurs associés aux registres file de données et les met à jour, le cas échéant, pour l'étape suivante. Dans le cas d'un transfert parallèle, le tampon (97) extrait le champ RGC du bus PA pour le présenter sur le bus REG, sa sortie étant activée par PAR au niveau 1. Un réseau de résistances (32) polarise le bus REG à 0 lorsqu'il est inactif. La structure du générateur (FGA) est détaillée par la figure 7 comme exposé plus loin. Un générateur d'adresse (VPA) pour l'accès aux registres vectoriels par les instructions de transfert parallèle est connecté en sortie aux lignes d'adresse de la mémoire de données des registres vectoriels (28) par VA. I1 est connecté en entrée aux signaux PAR, PA et PHI du bus commun (BC), au signal PAR1 du bloc (C:AD) et au signal PHA issu des commutateurs (29). n incrémente ainsi les adresses lorsqu'une instruction de transfert parallèle concerne l'opérateur. Si une donnée ne doit pas être mémorisée par un registre vectoriel, l'adresse n'est pas incrémentée et la donnée qui est mémorisée dans tous les cas sera définitive lorsque l'incrémentation de l'adresse indiquera un transfert valide. Les sorties PARV et PARF indiquent respectivement Si l'écriture concerne un registre vectoriel ou un registre file de données.La structure du générateur (VPA) est détaillée par la figure 8, comme exposé plus loin. Un générateur d'adresse (VCA) pour l'accès aux registres vectoriels par les instructions s'exécutant en cascade est également connecté aux lignes d'adresses de la mémoire (28) par le bus VA. n reçoit les signaux de cadencement CK, G1 et G3/0 du bloc (CAD) et les commandes X et NUM de la pile (PIC). n génère ainsi les adresses des registres vecteurs utilisés par les opérations s'exécutant en cascade, lorsqu'il n'y a pas d'instruction de transfert parallèle en cours d'exécution. La structure du générateur (VCA) est détaillée par la figure 9, comme exposé plus loin. De plus, la sortie de la porte ET (95) au niveau 1 lorsque DIR=1 et G3/0=1 commande la transmission directe de la sortie VA du générateur (VCA) au bus VD par le tampon à sortie 3-états (57) qui met en forme l'adresse pour la rendre utilisable comme un entier codé sur q bits. Lorsque DIR=0 et G3/0=1, c'est la sortie de la mémoire (28) qui est activée par la porte ET (96) connectée à l'entrée OE de la mémoire (28). La figure 3 représente enfin deux réseaux logiques (30) et (31) qui génèrent les impulsions d'écriture des mémoires (27) et (28) respectivement. Le complément de PHI est présenté à toute les porte ET des réseaux (30) et (31), de sorte que les écritures se produisent en fin de cycle quand PHI=0. Le réseau (30) (respectivement (31)) provoque une écriture dans une file (respectivement dans un registre vectoriel) au cycle 3 d'un transfert parallèle indiqué par PARF=1 (respectivement PARV=1) lorsque PAR1=1 et PAR=0, ou au cycle 1 comme indiqué par H1- si CASF=1 (respectivement CASH=1) indique l'écriture du résultat d'une opération dans une file locale (respectivement un registre vectoriel), ou au cycle 2 -comme indiqué par H2=1- si CASP=I indique un résultat en provenance de l'opérateur précédent. Le bloc de cadencement (CAD) détaillé sur la figure 4 comprend un registre à décalage à trois étages qui fournit les impulsions PAR1, PAR2 et PAR3 respectivement, sur ses sorties Q1, Q2 et Q3 respectivement à partir de PAR qui, présenté en entrée, est échantilloné par PHI. n comprend un deuxième registre à décalage (34) qui sert à générer les autres impulsions comme indiqué ci-après. La bascule (36) échantillonne par l'horloge PHI la sortie de la porte non-ET (35) qui est au niveau 1 lorsque sa première entrée connectée à SYN est au niveau 0 ou sa deuxième entrée connectée à la première sortie du registre (34) est au niveau zéro, c'est à dire au début du cycle 0 et du cycle 1. Durant les cycles 2 et 3 la sortie de la porte (35) est à 0. Le signal HLT en sortie de la bascule (36) est ainsi au niveau 1 durant les cycles 0 et 1 et au niveau 0 durant les cycles 2 et 3. La sortie de la porte non-OU (37) (respectivement 38 et 39) génère le signal G1 (respectivement G2 et G3). Elle est au niveau 1 lorsque sa première entrée connectée à la sortie Q2 (respectivement Q3 et Q4) du registre (34) est au niveau 0 (cycle 1 et respectivement cycle 2 et cycle 3) et que sa deuxième entrée connectée à PAR au niveau 0 indique qu'aucun transfert parallèle n'est en cours, puis au niveau 0 le reste du temps. La sortie du réseau logique (40) génère le signal G3/0. Elle est au niveau 1 lorsque l'entrée connectée à la sortie Q4 du registre (34) est au niveau 0 (cycle 3) et que l'entrée connectée à PAR1 au niveau 0 indique qu'aucune instruction de transfert parallèle ne se termine, ou lorsque l'entrée connectée à la sortie Q1 du registre (34) est au niveau 0 (cycle 0) et que l'entrée connectée à PAR au niveau 0 indique qu'aucune instruction de transfert parallèle ne commence. La sortie de la porte non-OU (41) (respectivement (42)) génère le signal H1 (respectivement H2). Elle est au niveau I lorsque sa première entrée connectée à la sortie Q2 (respectivement Q3) du registre (34) est au niveau 0 (cycle I et respectivement cycle 2) et que sa deuxième entrée connecté à PHI est au niveau 0 également (deuxième moitié du cycle). Elle est au niveau 0 le reste du temps. Le bloc de contrôle de la pile d'instruction (PIC) détaillé sur la figure 5, comprend une mémoire FIFO -premier entré, premier sorti- (44) a son bus de données d'entrée connecté au bus OPI de manière à mémoriser les instructions qui se propagent en cascade comme indiqué par la porte ET (43). La porte (43) génère en effet quatre impulsions positives successives pendant qu une première entrée connectée au signal CI au niveau 1 indique la présence d'une instruction sur OPI, à chaque fois qu'une impulsion positive de CK est présente sur sa deuxième entrée. De manière similaire, la porte ET (46) génère quatre impulsions de lecture de la mémoire (44) si cette dernière n'est pas vide, comme indiqué par un niveau 1 sur la sortie de la bascule (47) et si la pile n'est pas vérouillée, comme indiqué par un niveau 1 sur la sortie du réseau séquentiel (45). En effet, sous réserve des deux conditions précédentes, le signal SYN au niveau 1 sur une des entrées de la porte (49) valide le signal CK présent sur une autre entrée durant les cycles 0, 1, 2 et la première moitié du cycle 3, d'où les quatre impulsions en sortie de la porte (46) durant les mêmes cycles. Par ailleurs, la bascule (47) échantillonne la sortie EMPTY de la mémoire (44) qui indique au niveau 1 que la mémoire n'est pas vide, et ce à la fin de chaque séquence de lecture comme indiqué par le front descendant de SYN qui est connecté à l'entrée d'horloge de la bascule (47). De plus, le champ ULCK (et LCK respectivement) du bus OPI qui est mémorisé dans l'étage de mémorisation du réseau séquentiel (45) sur le front descendant de CI, remet à 0 (positionne à 1 respectivement) la sortie Q de la bascule RS du même réseau; ainsi, la pile est déverrouillée (verrouillée respectivement) pour l'étape suivante. Selon le mécanisme décrit ci-dessus, les instructions qui se propagent en cascade apparaisent en sortie de la mémoire (44), retardées d'une étape plus le nombre d'étapes pendant lequel la pile a été verrouillée. Le retard diminue néanmoins à chaque fois qu'aucune instruction n'est présentée sur OPI au début d'une étape, jusqu'à atteindre la valeur minimale d'une étape de retard. Selon une caractéristique de l'invention, il est ainsi possible d'adapter le nombre d'étapes de traitement en fonction du programme exécuté.Un groupe d'instruction pourra être considéré comme une macro-instruction pour autant que la pile soit verrouillée le temps que tout le groupe d'instruction pénètre dans la pile, puisque l'exécution de la macro-instruction ne débutera dans l'opérateur suivant qu'une fois que la donnée éventuellement produite a été écrite en mémoire et est donc utilisable. n est ainsi possible d'étendre considérablement les capacités du coprocesseur à partir d'un jeu d'instructions réduit. Les champs NUM, et X du bus OPN en sortie de la mémoire (44) sont alors transmis au générateur d'adresse (VCA) par l'intermédiaire des bus NUM et X. Le champ NUM est transmis par ailleurs au générateur d'adresse (FGA) par l'intermédiaire du tampon (50) dont la sortie est connectée au bus REG. Ce dernier tampon est activé par la porte ET (49) durant les cycles 0, 1 et 2 comme indiqué par le signal SYN au niveau 1 en entrée de la porte, si aucune instruction de transfert parallèle ne s'exécute, comme indiqué par le signal PAR au niveau 0 en entrée de la porte, et si l'instruction présentée est valide, c'est à dire que la sortie de la bascule (47) transmet un niveau 1 en entrée de la porte pour indiquer que la plie la pile n'est pas vide. Par ailleurs, le comparateur d'intervalle (51) indique en sortie si la valeur de PHA en entrée est comprise dans l'intervalle de valeur des deux autres entrées qui sont reliées aux champs MIN et MAX extraits du bus OPN. La sortie de la porte ET (52) dont les entrées sont connectées à la sortie du comparateur (51), du réseau séquentiel (45) et de la bascule (47), indique au niveau 1 que le numéro de l'opérateur est compris dans l'intervalle d'exécution, que la pile n'est pas verrouillée et que la pile n'est pas vide l'instruction est exécutable. Cette information est transmise au champ OPV du bus OPN qui est connecté à la sortie de la porte (52). L'instruction du bus OPN subit alors un retard de trois cycles en traversant les trois étages du registre à décalage (48). Le champ F/V est alors extrait pour fournir le signal SRC1. Le registre (53) introduit un retard supplémentaire sur la propagation de l'instruction pour la resynchroniser avec un début d'étape. A la sortie du registre (48), le tampon (54) transmet le champ FNUM de l'istruction au champ FNUM du bus NUMP qui est connecté à sa sortie, pendant que la porte ET (55) transmet un niveau 1 au champ P/Q du bus NUMP, si ses entrées connectées au registre (58) indiquent simmultanément, un accès à un registre file de données par F/V à 0, un accès à l'opérateur suivant par P/Q à 1 et une opération valide par OPV à 1.De plus, la sortie du registre (56), qui mémorise sur le front montant de G1 l'instruction présente en sortie du registre (53), sont extraits et envoyés au processeur (FPU): le champ FOP sous le nom FOP, le champ ANN sous le nom ANN et le champ F/V sous le nom SRC2. Cependant, l'instruction présente en sortie du registre (53) subit un nouveau retard de trois cycles en traversant les trois étages du registre à'- décalage (58). La spécification du registre destination étant présente en entrée du registre (58) au cycle 2 (troisième cycle d'étape, comme vu dans la description du contrôleur (CTR)) est donc présente à sa sortie au cycle I (2+3=5=1 [ 4 ] ), ce qui permet de générer les signaux de validation d'écriture en mémoire lorsque le résultat est diponible en sortie du processeur (FPU). CASV, le signal de validation pour les registres vectoriels, est obtenu en sortie de la porte ET (59) qui indique au niveau 1 que le champ F/V présenté en entrée au niveau 1 correspond à un vecteur et que la champ OPV présenté en entrée au niveau 1 correspond à une opération valide.De manière similaire la porte ET (60) génère le signal CASF qui est au niveau 1 si le champ F/V en entrée au niveau 0 indique un registre file de données et si le champ OPV au niveau 1 indique une opération valide. L'instruction est alors encore retardée d'un cycle par le registre (61) connecté en sortie du registre (58) de manière à être transmise à l'opérateur suivant, le cas échéant, au début d'une étape. Auparavant, le champs ANN est remplacé par la combinaison par la porte ET 65 de l'intervalle d'exécution valide en sortie du comparateur (51) et du champs ANN extrait du bus OPN, qui s'est propagée à travers les huits étages du registre à décalage (90) pour arriver en phase avec la sortie du registre (61). Si l'annulation d'une opération est demandée, elle ne s'annule alors que sur le premier opérateur de la zone d'exécution indiquée. La transmission à l'opérateur suivant est alors réalisée par le tampon (63) (respectivement (62)) qui transmet le champ OP (respectivement OPV) au bus OPO (respectivement au signal CO) connecté à sa sortie. Le processeur (FPU) représenté par la figure 6 reçoit les données à traiter aux cycles 3 et 0 par les bus VD et FD issus respectivement des mémoires 28 et 27. La donnée du cycle 3 est mémorisée par le registre à sortie 3-états (66) (respectivement le registre (67)). Le signal SRC1 issu de la pile (PIC), qui au cycle 3 spécifie l'origine de la première source, est connecté aux entrées de validation OE des registres de sorte que le registre (66) est sélectionné dans le cas d'un registre vectoriel et le registre (67) est sélectionné dans le cas dun registre file de données. La valeur ainsi obtenue en sortie des registres (66) et (67) est alors mémorisée par le front montant de G1 appliqué sur l'entrée horloge du registre (70), au début du traitement.La sortie du registre (70), connectée à l'entrée X de l'unité de calcul arithmétique cablée (71), reste alors stable durant une étape. La sortie F(X,Y) de l'unité arithmétique est directement connectée au champ DQ du bus Q qui transmet, le cas échéant, le résultat pour écriture dans un registre file de données de l'opérateur suivant; le signal NUMQ reçu de la pile (PIC) complète le bus Q en spécifiant la destination. Cependant, le résultat du traitement précédent est mémorisé par les registres à sortie 3-états (72) et (73) dont les entrées sont connectées à la sortie F(X,Y) de l'unité de calcul (71), sur le front montant de G1 également. Simultannément, la deuxième donnée source, présentée durant le cycle 0, est mémorisée par les registres (68) et (69) dont les entrées sont connectées respectivement aux bus VD et FD. Le signal SRC2 est connecté à l'entrée OE de chacun des registre (68) et (69), de sorte qu'est sélectionné le registre (68) lorsque SRC2 à I indique un registre vecteur comme deuxième source, ou le registre (69) lorsque SRC2 à 0 indique un registre file de données comme deuxième source. Comme il a été exposé précédemment SRC2 est échantillonné au niveau de la pile (PIC) par GI, la donnée présente en sortie des registres (68) et (69) reste donc stable sur l'entrée Y de l'unité arithmétique (71) jusqu'à la fin de l'étape. Durant la deuxième moitié du cycle 1, la sortie de la porte ET (74) active la sortie 3-états des registres (72) et (73) afin que le dernier résultat puisse éventuellement être enregistré dans la mémoire (28) dont l'entrée D est connectée par VD à la sortie du registre (72), ou dans la mémoire (27) dont l'entrée D est connectée par FD à la sortie du registre (73), à la fin du cycle 1. Le processeur (FPU) comporte également un registre à sortie 3états (75) qui mémorise la donnée transmise par l'opérateur précédent sur le front montant de Gî: à la fin du cycle 0 qui correspond à la fin d'une étape de traitement. Sa sortie activée par H2 est présentée sur le bus FD pour écriture, le cas échéant, dans la mémoire (27), à la fin du cycle 2. La dernière partie du bloc processeur (FPU) concerne les transferts par le bus commun (BC). Si un tel transfert a été demandé, au début du cycle 2, les données présentées sur les bus VD et FD au cycle 1, comme il sera vu plus loin, sont échantillonées par le front montant en sortie de la porte ET (83) (ou respectivement (85)) dans le registre à sortie collecteur-ouvert (80) (ou respectivement (78)). La sortie de la porte (83) est en effet connectée à l'entrée horloge du registre (80) dont l'entrée est connectée au bus VD et la sortie au bus PD, elle est également connectée à l'entrée de validation de ce registre de sorte que la donnée mémorisée est présentée sur PD à partir du cycle 2 indiqué par PAR2 au niveau 1 en entrée de la porte (83), si d'une part la source RS1, dont le champs F/V transmis par le bus PA a été échantillonné par PHI dans le registre (82) au cycle précédent, spécifie un registre vectoriel comme l'indique un niveau 1 à la sortie du registre (82) qui est connectée à l'entrée de la porte (83) et si d'autre part le signal PVOE, issu du générateur d'adresse (VPA) et connecté à la troisième entrée de la porte (83), signale au niveau 1 que la donnée correspondante à l'index du registre est précisémment mémorisée dans l'opérateur.Lors de l'initialisation qui sera décrite plus loin et selon une caractéristique importante de l'invention, plusieurs opérateurs peuvent avoir été programmés pour mémoriser la donnée correspondant à un index unique. Chaque opérateur possède alors une copie de la donnée et l'utilisation pour le registre (81) d'un circuit à sortie collecteur-ouvert permet de transmettre la donnée sur le bus, sans conflit et sans corruption de la donnée, puisque tous les opérateurs dont le registre est activé présente la même donnée (on notera que les terminaisons de bus, polarisant le bus PD au niveau 1 au repos, n'ont pas été représentée). De manière similaire, la porte ET (85) est connectée au registre (78) dont l'entrée provient du bus FD et dont la sortie est connectée au bus (bu). Mais cette fois, la sortie de la porte (85) est active lorsque la sortie du registre (82) au niveau 0 spécifie un registre file de données comme source du transfert et que la sortie du comparateur d'égalité (84) au niveau 1 indique que le numéro d'opérateur spécifié par PHA, connecté à un bus d'entrée du comparateur (84), est égal au champ SRF du bus PA connecté à l'autre bus d'entrée du comparateur. Contrairement aux registres vectoriels, il n'est pas possible de déterminer automatiquement quel opérateur doit être source d'un transfert séquentiel mettant enjeu les files de données, cela est donc reporté au niveau du programme qui arrangera les flux de données selon les techniques classiques d'algorithmique systolique, en spécifiant à chaque intruction la file de données source.De même pour la réception, la seule souplesse offerte par les caractéristiques de l'invention est de choisir une zone de réception spécifiée par l'instruction. n est par exemple possible de propager les résultats interdédiaires le long de la cascade d'opérateurs, les résultats s'accumulant dans les registres du premier opérateur qui sera toujours la source. Mais il est possible de manière duale de faire fonctionner les opérateurs indépendemment et d'utiliser successivement chaque opérateur comme source. n est enfin possible de diffuser l'information à tous les opérateurs simmultanément. L'utilisation d'une file de données est particulièrement indiquée pour la diffusion séquentielle des composantes d'un vecteur à un registre vectoriel ou la centralisation séquentielle des composantes d'un vecteur réparies sur les opérateurs. Pour finir, l'unité de traitement (FPU) est dotée de la porte ET (64) qui combine les signaux PAR et PAR1 pour activer la sortie 3-états des registres (79) et (81), durant la deuxième moitié du cycle 3 du transfert parallèle où PAR=0 et PAR1=1. La donnée transmise par ces registres a préalablement été échantillonée au début du cycle 3, alors qu'elle était encore présente sur le bus (BC) par le front montant de PAR3 connecté sur les entrées horloge de ces registres. Le générateur d'adresse (FGA), détaillé sur la figure 7, comporte une mémoire à double accès (86) initialisée à zéro et qui contient par la suite, pour chaque registre, le pointeur du premier entré (le prochain à sortir) et le pointeur sur l'adresse suivant le dernier entré (où il faudra écrire). L'écriture des programmes assurera qu'aucun débordement ne se produit. Les files de données pourront par exemple être utilisée pour réaliser des lignes à retard de longueur fixe ou absorber des fluctuations dans le nombre d'étages de pipe-line (nombre d'étapes de traitement). L'utilisation d'un contrôleur d'adresse associé à une mémoire classique permet d'ailleurs de s'affranchir de la taille limitée des dispositifs existant. Pour chaque instruction, le bus REG identifie les registres accédés aux cycles 0, 1 et 2. Le champ FNUM en est extrait pour obtenir le numéro de file de donnée. Le signal HLF lui est associé sur le bus d'adresse AA du port A de la mémoire (86), de sorte que les pointeurs de lecture sont selectionnés avec HLF=1 durant les cycles 0 et 1 et que les pointeurs d'écriture sont sélectionnés au cycle 2 où HLF=0. La valeur de FNUM sélectionne alors exactement le pointeur voulu. Avec les notations précédentes, la capacité de la mémoire utilisée est ainsi de 2r mots de fbits, soit par exemple 16 mots de 12 bits avec r=4 et f=12. A chaque cycle, le pointeur obtenu en sortie DA de la mémoire est mémorisé dans le registre (89). Le registre (89) envoie le pointeur à l'entrée A de l'aditionneur f bits (100), dont l'entrée C, qui peut être une simple entrée de retenue, reçoit du registre (90) un bit à 0 ou 1 selon que le champ INC associé à la spécification de registre dont le pointeur est traité était lui-même à 0 ou 1 en entrée du registre (90). Le nouveau pointeur, résultant de l'opération A+C, est mémorisé au cycle suivant par le registre (101) qui le transmet à l'entrée DB du port B de la mémoire (86), pour écriture. La spécification de registre correspondante a alors été transmise au bus d'adresse AB du port B par le registre à décalage à deux étages (102).En fait, un champ supplémentaire est utilisé: F/V est connecté à l'entrée de selection de boîtier CSB de manière à ne valider l'écriture que si un niveau 0 indique un accès à un registre file de données. Les deux étages du registre à décalage (104), transmettent alors le signal de validation d'écriture, issu du réseau logique (103) deux cycles plus tôt, à l'entrée de la porte ET (98). Cette porte ET transmet alors des impulsions sur l'entrée d'écriture WEB de la mémoire (86) lorsque PHI=0. Quand un transfert parallèle est en cours, PAR=1 et PAR3=0 provoquent ainsi trois impulsions positives durant la deuxième moitié des cycles 0, 1 et 2 à partir des niveaux 0 de PHI.Sinon, de manière voisine, HLF=1 provoque deux impulsions durant les cycles 0 et 1 (accès aux files en lecture par une instruction s'exécutant en cascade), G2 provoque une impulsion durant le cycle 2 si P/Q=0 indique une écriture dans une file de l'opérateur et G3 provoque une impulsion durant le cycle 3 si P/Q=1 indique qu'une donnée provient de l'opérateur précédent. n faut noter que le pointeur de file destination est mis à jour immédiatement bien que, dans le cas d'une instruction s'exécutant en cascade, l'écriture effective en mémoire n'aura lieu qu'une étape plus tard, ceci préserve la cohérence avec les transferts parallèle mais est autrement sans influence. Afin de sélectionner la zone de mémoire réservée à chaque file de données, le champ FNUM est concaténé au pointeur relatif obtenu en sortie de la mémoire (86) avant que l'ensemble ne soit mémorisé par les registres (87) et (88). Dans le cas d'un transfert parallèle, le registre (87), échantilloné par PHI et dont la sortie est activée par PAR1, transmet l'adresse de source au bus FA durant le cycle 1 et l'adresse destination durant le cycle 3 en concordance avec les cycles de communication de la mémoire (27) avec le processeur (FPU). Sinon, les deux étages du registre à décalage (88) échantillonné par CK transmettent l'adresse avec deux cycles de retard à l'entrée du registre (105) et du registre (106). La sortie du registre (105) validée par G1=0 est ainsi transmise au bus FA, en particulier l'adresse de la première source au cycle 3 (0+3=3) et l'adresse de la seconde source au cycle 0 suivant (1+3=4=0 [ 4 ] ). Au cycle 1 la sortie du registre (106) correspond, de la même manière, à l'adresse de destination qui est mémorisée par le registre (107) à la fin du cycle par le front descendant de G1 connecté à l'entrée horloge. La sortie du registre (107) validée au cylce 1 de l'étape suivante correspond ainsi à l'adresse de destination. Dans ce cas également les cycles concordent avec les cycles de communication de la mémoire (27) avec le processeur (FPU). Le générateur d'adresse (VPA) détaillé à la figure 8 fonctionne de manière similaire au générateur (FGA), il est en effet destiné comme lui à contrôler des accès séquentiel à une mémoire. I1 comporte ainsi une mémoire double-accès (108), dont le bus d'adresse AA du port A est connecté au champ NUM du bus PA et dont la sortie produit l'index local courant du registre correspondant sur k bits. La mémoire (108) comporte donc 2r mots de k bits, soit par exemple 16 mots de 16 bits avec k=16 et r=4. L'index local obtenu est transmis un cycle plus tard à l'entrée A de l'aditionneur (115) par l'intermédiaire du registre (109) échantillonné par PHI (Pour clarifier la représentation les connections aux entrées horloge ne sont pas représentée sur la figure, toutes les entrées horloges de registre étant connectées au signal PHI). Cependant, l'index global du champ X, extrait du bus PA, présenté en adresse à l'entrée de la mémoire (110), produit à sa sortie D un drapeau qui est transmis à l'entrée B de l'adîtionneur en même temps que l'index local correspondant. Cette mémoire doit comporter 2k mots de 1 bit, soit, par exemple,64K bits si k=16. Elle est initialisée de sorte que 0 est mémorisé aux adresses correspondant aux index globaux pour lesquels la données n'est pas mémorisée dans l'opérateur et 1 est mémorisé dans le cas contraire. Le drapeau obtenu à sa sortie est également transmis par la bascule D (123) au processeur (FPU), sous le nom PVOE pour activer le transfert éventuel. Par ailleurs, le numéro du registre NUM extrait de PA, présenté en adresse à l'entrée A de la mémoire (112) produit à sa sortie D, l'adresse de base du registre correspondant. Le champ PAG est extrait de l'adresse de base ainsi obtenue, pour être concaténé avec l'index local généré en sortie DA de la mémoire (108), l'ensemble étant mémorisé par le registre (99). Le registre (99), dont la sortie est validée par PAR1, transmet ainsi au bus VA de la mémoire (28), l'adresse source durant le cycle 1 et l'adresse destination durant le cycle 3. BAS, l'autre champ de l'adresse de base, est mémorisé par le registre (113). De plus, la sortie de la bascule D qui mémorise le bit S extrait du PA est connectée à l'entrée de validation de sortie de l'aditionneur (115) et du registre (113) de manière à sélectionner l'index local incrémenté si S=0 indique que la liste n'est pas finie, ou à sélectionner la base du registre pour réinitialiser le transfert en fin de liste si S=1. L'espace occupé par les données transmises par accès séquentiel (avec un transfert en parallèle sur tout les opérateurs, ou avec un fonctionnement en cascade), correspond ainsi à une suite d'emplacements mémoire contigus dont le numéro de transfert dans l'opérateur (inférieur ou égal au numéro de transfert), correspond à l'index local de la donnée par rapport à l'adresse de base du registre. Le registre (116) transmet le nouvel index local, présent à la sortie de l'aditionneur, en entrée DBdu port B de la mémoire. Simultanément, les champs NUM et F/V extraits du bus PA sont transmis respectivement au bus d'adresse AB et au signal de sélection de boîtier CSB, par l'intermédiaire du registre à décalage à deux étages (117). Se faisant, la mise à jour de l'index local ne sera activé que si F/V=1 indique un accès à un registre vectoriel. De plus, la sortie du comparateur d'intervalle (118) indique au niveau 1, si le numéro de l'opérateur est compris dans l'intervalle formé par les champs MIN et MAX extraits du bus PA. La porte ET (119) reçoit ce signal en entrée pour former un signal d'autorisation d'écriture lorsque également PAR et le champ INC, extrait du bus PA, présentés en entrée de la porte (119) sont au niveau 1.Ce signal d'autorisation est retardé de deux cycles par les deux étages du registre à décalage (120) provoquant alors les signaux d'écriture sur le port B de la mémoire (108), par l'intermédiaire de la porte ET (128) activée lorsque PHI est au niveau zéro : à la fin des cycles. Enfin, la porte ET (93) (respectivement 94) génère le signal d'autorisation d'écriture PARV (respectivement PARF), à partir du signal F/V extrait du bus PA et de le sortie du comparateur (118). Lorsque la sortie du comparateur (118) au niveau 1 autorise l'exécution et lorsque F/V=1 (respectivement F/V=0), la sortie est activée. Le générateur d'adresse (VCA) détaillé par la figure 9, comporte la mémoire (112) utilisée dans le générateur (VPA). Pour clarifier la description, le multiplexage nécessaire n'a pas été représenté, il pourra d'ailleurs être avantageux d'utiliser deux mémoires séparées vu leur faible capacitée. la mémoire (112) comprend 2r mots de k+w+l bits, soit, par exemple, 16 mots de 19 bits avec k= 16, r=4 et w=2. En effet, un champ supplémentaire UD d'un bit, est nécessaire pour spécifier si les accès du registre doivent utiliser ou non la table d'indirection. A présent, la mémoire (112) reçoit en adresse le numéro de registre NUM fourni par la pile (PIC). A sa sortie, les champs BAS et PAG sont extraits pour être mémorisés par le registre (121), et le champ I/D est mémorisé par le registre (122). Cependant, l'index global fourni par le bus X issu de la pile (PIC) est mémorisé par le registre (124). I1 faut noter que, sauf mention contraire, tous les registres du générateur d'adresses (VCA) mémorisent sur les front montants de CK, ainsi le générateur est bloqué durant les étapes de transfert parallèle. L'index global est transmis par le registre (124) au tampon à sortie trois-états (126) et à la mémoire (125) qui mémorise les tables d'indirection. La sortie du registre (122), connectée aux entrées de validation du tampon (126) et de la mémoire (125), sélectionne un transfert direct de l'index global au niveau 1 (I/D=1) et la sortie de la table d'indirection donnant l'index local au niveau 0 (l7D=O). Le résultat est mémorisé par le registre (127). La mémoire (125) est initialisée à l'origine pour faire correspondre aux index globaux de la liste centrale des index locaux indépendants. La liste centrale pourra ainsi être utiliser pour accéder aux composantes non-nulles d'une matrice creuse. A chaque index global correspondra plusieurs coefficients de matrice, un par opérateur, il pourra ainsi être vu comme une généralisation de la notion de numéro de ligne de matrice. Localement, la table de correspondance donnera l'index du coefficient de vecteur associée qui pourra être vu comme une généralisation de la notion de numéro de colonne de matrice. Ceci est totalement indépendant du mécanisme de copie séquentielle des composantes de vecteur.Cependant, ayant défini la répartion des coefficients de matrice sur les opérateurs, il faudra déterminer les composantes de vecteur nécessaires sur chaque opérateur et ainsi calculer les index à placer dans la table. L'intérêt est que la structure sera alors, en général, réutilisée de nombreuses fois. De plus il est possible de la mettre à jour partiellement grâce au chaînage des coefficients de matrice par la liste centrale. A la sortie du registre à décalage à deux étages (121), le champ BAS est extrait pour être présenté sur l'entrée A de lraditionneur k bits (129), alors que simultannément l'index qui a traversé le même nombre d'étage pour sa conversion est présenté sur l'entrée B. Le résultat A+B, arondi sur k bits, est alors concaténé au champ PAG extrait en sortie du registre 121. L'adresse complète, ainsi formée sur k+w bits, est mémorisé par les registres (130) et (91). Le registre (130) transmet ainsi sur le bus VA, l'adresse de la première source au cycle 3, et l'adresse de la seconde source au cycle 0 suivant. Sa sortie 3-états est en effet activée par G3/0 durant lest cycles 3 et 0. A la fin du cycle 1, l'adresse de destination, transmise par le registre (91) au registre (92), est mémorisée sur le front descendant de G1. Elle est ainsi transmise au bus VA durant le cycle 1 de l'étape suivante, par le registre (92) dont la sortie 3-états est activée par G1. Le coprocesseur selon l'invention est particulièrement adapté à la solution numérique itérative par des méthodes d'éléments finis ou à la simulation de neurones formels, qui font généralement apparaître de nombreux produits matrice-vecteur avec des matrices souvent très creuses. n permet également l'implantation d'algorithme classique de traitement du signal: trasformée de Fourrier rapide, convolution... REVENDICATIONS 1/ Coprocesseur de calcul parallèle comportant un nombre N d'opérateurs (OPRO, OPR1... OPRN-1) connectés en cascade et reliés par l'intermédiaire d'un contrôleur (CTR) à un microprocesseur générant des instructions que les opérateurs exécutent l'un après l'autre caractérisé en ce qu'il comporte des registres partagés entre chaque paire d'opérateurs voisins et réalisés sous forme de file de données de sorte que les communications entre opérateurs s'établissent par simple lecture ou écriture séquentielle dans ces registres sans nécessiter ni rendez-vous pour l'échange ni synchronisme des traitements. 2/ Coprocesseur selon la revendication 1 caractérisé en ce qu'il est possible de diffuser des données par un second mode de communication qui copie une donnée, lue dans un des registres d'un opérateur, dans un autre registre, l'instruction écrit la donnée en parallèle dans tous les opérateurs (OPR0, OPR1... OPRN-1) du coprocesseur par l'intermédiaire d'un bus commun (BC), prioritairement sur les instructions du premier mode de communication qui s'exécutent en cascade. 3/ Coprocesseur selon la revendication 1 ou 2 caractérisé en ce qu'il comporte des registres locaux sur chaque opérateur pour un accès séquentiel aux coefficients de matrice qui sont mémorisés dans chaque opérateur ou aux composantes de vecteurs correspondantes, chaque registre est associé à une structure de données programmable directement supportée par le matériel, chaque structure de donnée consiste en une liste commune à tous les opérateurs et des tables d'indirection propres à chaque opérateur, chaque élément de la liste se compose d'un champ qui donne l'adresse de l'élément suivant de la liste et d'un champ qui indique l'état de la liste, chaque registre est également associé à un élément binaire qui indique si les accès aux éléments mémorisés par le registre doivent être directs ou utiliser une table d'indirection, chaque registre est associé à un déplacement permettant de partager une structure entre plusieurs registres. 4/ Coprocesseur selon la revendication 3 caractérisé en ce qu'il est possible d'associer sur chaque opérateur une table binaire et un compteur à chaque registre local de manière à ne mémoriser que les composantes utiles lorsque toutes les composantes d'un registre local du coprocesseur sont diffusées séquentiellement aux opérateurs. 5/ Coprocesseur selon la revendication 3 ou 4 caractérisé en ce qu'il est possible de d'utiliser des instructions qui donnent directement accès sur chaque opérateur à l'index fourni par la table d'indirection assqciée à un registre local, de sorte que les valeurs ainsi obtenues peuvent alors servir de données pour des calculs ultérieurs. 6/ Coprocesseur selon l'une quelconque des revendications 3, 4, et 5 caractérisé en ce qu'il est possible de tester la fin d'une liste par une instruction qui retourne l'indicateur d'état associé à l'élément courant de la liste. 7/ Coprocesseur selon l'une quelconque des revendications précédentes caractérisé en ce qu'il est possible d'accéder en lecture ou en écriture plusieurs fois au même emplacement défini par un regi#stre pour accès séquentiel avant d'accéder à l'emplacement suivant. 8/ Coprocesseur selon l'une quelconque des revendications précédentes caractérisé en ce qu'il est possible de réduire la zone d exécution de n'importe qu'elle instruction à un ensemble d'opérateurs contigus. 9/ Coprocesseur selon l'une quelconque des revendications précédentes caractérisé en ce qu il est possible pour n importe quelle instruction s'exécutant en cascade de remplacer l'opération du premier élément de la cascade par un déplacement, sans altération de la donnée spécifiée, vers l'emplacement désigné pour mémoriser le résultat de l'opération sur la donnée en question. 10/ Coprocesseur selon l'une quelconque des revendications précédentes caractérisé en ce qu'il est possible de bloquer temporairement l'écoulement des instructions qui s'exécutent en cascade de manière à modifier le nombre de cycles de traitement apparent de chaque opérateur.