FR 2626692 A1 19890804 FR 8801467 A 19880201 ARCHITECTURE PARALLÈLE MULTIPROCESSEUR La présente invention concerne une architecture d'ordinateur comprenant plusieurs processeurs en parallèle. Une architecture typique multiprocesseur de l'art antérieur est illustrée en figure I. A chaque processeur P sont assoclés localement (sur une même carte) une mémoire cache MC et un commutateur S permettant d'établir une communication entre le processeur et la mémoire cache, le processeur et un bus principal BP, ou la mémoire cache et ce bus principal BP. Le bus principal est connecté à plusieurs cartes comprenant de tels ensembles processeurs-mémoire cache et à une mémoire principale MP ainsi qu'à divers systemes de gestion non représentés. L'un des objets d'une mémoire cache est de fournir des informations au processeur plus vite que ne peut le faire la mémoire principale. La mémoire cache ne contient qu'un sous-ensemble des données de la mémoire principale et est de plus petite dimension ce qui entraine que l'on peut se permettre d'utiliser des composants de mémoire vive (REM) plus rapides et plus chers mais moins nombreux que ceux de la mémoire principale ce qui contrebalance l'augmentation du prix. Puisque la mémoire cache ne contient qu'une partie de la mémoire principale, le processeur associé n'y trouvera pas toujours ce qu'il recherche.Dans ce cas, la donnée désirée doit être copiée depuis la mémoire principale dans la mémoire cache. les résultats avantageux de la prévision d'une mémoire cache dépendent du pourcentage de fois où le pro cesseur y trouvera les données qu'il recherche. S'il les trouve toujours, le processeur tourne à la vitesse de la mémoire cache. S'il ne les trouve jamais, il tourne à la vitesse de la mémoire principale et le cache n'apporte rien. Statistiquement, à l'heure actuelle, avec une mémoire cache convenablement adaptée on atteint des taux de réussite (hit) d'environ 95 % et un gain en rapidité de deux à trois. Un avantage des mémoires cache est aussi d'éviter l'en combrement du bus principal qui constitue dans les systèmes moder nes l'un des goulots d'étranglement de la vitesse d'un multi processeur. La présente invention se base sur une analyse des infor mations traitées par un processeur et échangées avec sa mémoire cache. Classiquement, parmi les informations traitées par un pro cesseur, on trouve trois catégories d'informations a) des informations de texte correspondant à des pro grammes et à leurs constantes qui ne sont jamais modifiées en cours d'exécution b) la pile de chaque tâche, ctest-à-dire les résultats fournis par le processeur, pile qui est sans cesse modifiée mais par un seul processeur à la fois, c) des données communes, ou données partagées, modifiées a tout instant par plusieurs processeurs. Selon un aspect de l'invention, on se place dans le cas d'une organisation où les informations de type a) et b) transitent toujours par les mémoires cache (même si une copie en est sauve gardée dans la mémoire principale) et où les informations de type c) sont mémorisées uniquement dans la mémoire principale et ne transitent pas par les mémoires cache. Une telle organisation présente des avantages en ce qui concerne la cohérence du système et simplifie les-problèmes de mise à jour. En effet, les informations de type a) ne sont jamais modifiées et, mêne si elles sont envoyées par la mémoire principale dans divers caches, elles restent telles qu'elles sont et il ne se pose pas de problème de mise à jour. En ce qui concerne les informations de type b), elles sont générées au niveau des processeurs individuels mais par un seul processeur à la fois. Ainsi, quand elles sont renvoyées vers la mémoire principale il ne se pose pas de problème de cohérence entre des copies multiples. Par contre, pour les données communes ou partagées, elles peuvent être traitées par plusieurs processeurs qui en auront chacun reçu une copie de la mémoire principale et les auront modifiées indépendamment. Lors de leur renvoi vers la mémoire principale, des problèmes de mise è jour se poseraient si elles étaient mémorisées dans plusieurs mémoires cache. Il faudrait alors prévoir des systèmes hiérarchiques complexes pour gérer ces mises è jour. Même si on adoptait l'organisation susmentionnée, le fait d'utiliser un bus unique accédant à des données individuelles présenterait encore plusieurs inconvénients. Un premier inconvénient est que tous les transferts entre un processeur ou une mémoire cache et la mémoire principale se font par le bus principal qui tend à devenir un goulot d'étranglement. Un autre inconvénient est que, pendant un transfert entre une mémoire cache et la mémoire principale, le processeur associé est bloqué. Un troisième inconvénient évident est que le transfert de données par le bus principal est limité par la rapidité de ce bus principal à fonctionnement de type aléatoire (donnée par donnée). La présente invention prévoit une nouvelle architecture parallèle à multiprocesseur permettant d'éviter ces inconvénients. Selon un mode de réalisation de la présente invention, il est prévu une architecture parallèle multiprocesseur comprenant des modules élémentaires dont chacun comprend un processeur et une mémoire cache pouvant communiquer entre eux et, par l'intermédiaire d'un bus principal, avec d'autres modules ou avec une mémoire principale, chaque cache comprenant, en plus de son accès vers son processeur et le bus principal, un accès permettant de transférer en parallèle des rangées ou parties de rangées dans un registre associé à ce cache, et cette architecture comprenant en outre un bus de type séquentiel permettant de faire communiquer lesdits registres entre eux et avec la mémoire principale. Dans une telle architecture parallèle multiprocesseur dans laquelle certaines des données sont susceptibles d'être cachées (mémorisées dans un cache) alors que d'autres données (données partagées) sont non-cachées (mémorisables seulement dans la mémoire principale), et dans laquelle des moyens sont prévus pour déterminer si un transfert requis par un processeur est susceptible d'être caché ou non, la présente invention prévoit que, s'il s'agit de données non-cachées, lesdits moyens orientent la requête vers le bus principal par lequel s'effectue le transfert requis entre le processeur et la mémoire principale, et que, s'il s'agit de données susceptibles d'être cachées mais non contenues dans le cache du processeur requérant, lesdits moyens orientent la requête de sorte que le bus séquentiel effectue le transfert entre caches ou entre cache et mémoire principale, par l'intermédiaire desdits registres. Ainsi, la présente invention résout tous les problèmes susmentionnés des architectures de l'art antérieur. Elle nécessite seulement de prévoir comme mémoires cache des mémoires RAM à double accès qui sont aujourd'hui des composants commercialement disponibles (par exemple le produit dit MB 81461 vendu par la Société dite Fujitsu). Ceci permet d'assurer les communications entre mémoires cache ou entre une mémoire cache et la mémoire principale par le bus séquentiel sans affecter les communications directes entre un processeur et la mémoire cache associée ou ce processeur et la mémoire principale par le bus principal. Un autre avantage de l'invention est que les communications entre les mémoires cache et la mémoire principale sont réalisées plus vite avec un bus séquentiel tel qu'utilisé ici qu'avec un bus classique tel que le bus principal commun utilisé dans les systèmes de l'art antérieur. En effet, des transferts de données concernent généralement des blocs (suite de mots de données) d'une certaine longueur, et un bus séquentiel est particulièrement adapté à gérer de tels transferts ce qui peut être réalisé avec les technologies actuelles beaucoup plus vite qu'avec un bus classique non séquentiel dans lequel chaque donnée est adressée individuellement.Par exemple, dans une même technologie, si un transfert de mots par un bus classique est de l'ordre de 200 ns par mot, un transfert par un bus séquentiel, en dehors des opérations initiale et finale, occupe une durée de l'ordre de 30 ns par mot, ce qui constituera un gain important par rapport è un bus fonctionnant classiquement avec une mémoire à accès si le bloc a une certaine longueur et donc que les opérations initiales d'adressage deviennent négligeables. Ces objets, caractéristiques et avantages et ainsi que d'autres de la présente invention seront expliqués plus en détail dans la description suivante de modes de réalisation particuliers faite en relation avec les figures jointes parmi lesquelles la figure 1 illustre une architecture multiprocesseur de l'art antérieur la figure 2 illustre de façon générale une architecture multiprocesseur selon la présente invention la figure 3 représente schématiquement une mémoire RMI à double accès ;; les figures 4 et 5 illustrent schématiquement le processus de transfert d'une mémoire è double accès à une autre en utilisant un bus séquentiel la figure 6 illustre de façon générale l'organisation du bus séquentiel les figures 7 è 9 sont destinées è servir de support è la description d'un mode de réalisation logiciel d'une architecture selon la présente invention les figures 10 à 13 sont destinées è servir de support è la description d'un mode de réalisation matériel d'une architecture selon la présente invention. La figure 2 illustre de façon générale une architecture multiprocesseur selon la présente invention. On y retrouve des cartes comprenant chacune un processeur P, une mémoire cache MC et un commutateur S relié au processeur, è la mémoire cache et à un bus principal BP auquel est également reliée une mémoire principale MP. Selon la présente invention, les mémoires cache MC sont des mémoires è double accès qui communiquement également avec un bus séquentiel BS relié è toutes les mémoires cache et à la mémoire principale. La mémoire principale est également une mémoire è double accès qui peut communiquer soit avec le bus principal par son accès aléatoire soit avec le bus séquentiel par un accès séquentiel. La figure 3 représente schématiquement la structure d'une mémoire RAM è double accès. Cette mémoire comprend une matrice de rangées et de colonnes. Chaque donnée est mémorisée à l'intersection d'une rangée et d'une colonne-. Son adresse consiste en cette combinaison. Il suffit donc de la présenter aux entrées d'adresse r et c sur le bus d'adresse 32 pour lire ou écrire la donnée. Une mémoire RAM à double accès comprend en outre un registre série 31 dans lequel on peut transférer en parallèle le contenu d'une rangée complète de la matrice 30. Inversement, on peut retransférer le contenu du registre en parallèle dans une rangée de la matrice 30. Ces transferts sont illustrés schématiquement en figure 4. Pour repérer le début d'un bloc à l'intérieur d'une rangée, il est prévu un sélecteur CS (figure 3) permettant de pointer le début d'un bloc. Cette indication est spécifiée par le bus d'adresse de la même façon que la rangée et la colonne pour l'accès aléatoire. Une fois qu'une rangée est transférée dans le registre série 31, à chaque coup d'une horloge, le sélecteur CS est avancé et le bit suivant du registre est accessible en lecture ou en écriture à partir de la broche de données série. Il faut noter que ltopéra- tion du sélecteur CS sur le registre série est indépendante du fonctionnement de la partie à accès aléatoire de la matrice 30 et c'est là l'un des principaux avantages de ce mode de fonctionnement comme on le verra ci-après. Pour lire un bloc de bits par la broche de données série, il faut présenter une rangée et une-colonne, comme pour un accès aléatoire mais en spécifiant une opération particulière. Dans cette opération le numéro de rangée indique quelle rangée sera chargée dans le registre série et le numéro de colonne précise la position du sélecteur CS. A la fin de l'opération, le contenu du registre série est disponible bit par bit à la broche de données série et le contenu de la matrice reste disponible par les broches de données d'accès aléatoire. Pour écrire dans la matrice des données en provenance de la broche de données série, on commence comme pour une lecture. Ceci initialise le registre série 31 et positionne le sélecteur CS. Ensuite les données série sont écrites dans le registre en synchronisation avec l'horloge. Enfin le registre série est transféré dans une rangée voulue de la matrice. A titre d'exemple, un cycle de transfert de données par l'accès aléatoire occupe environ 200 nanosecondes de même qu'un transfert entre la matrice et le registre série. Toutefois une fois que les données sont transférées dans le registre série, l'horloge série donne accès aux données successives de ce registre à un rythme d'environ 1 mot, constitué d'un certain nombre de bits en parallèle toutes les 30 ns. L'accès série est donc bien adapté au transfert rapide de blocs constitués de données d'adresses successives. La figure 4 illustre très schématiquement le transfert d'une rangée d'une matrice source vers une matrice de destination selon la présente invention. La rangée de la matrice source 30S est d'abord transférée dans son registre série correspondant 31S. Le contenu de ce registre est transféré au rythme de l'horloge série en passant par le bus séquentiel BS vers le registre série destination 31D. Une fois que cette opération est réalisée, le contenu du registre série 31D est transféré en parallèle dans la rangée choisie de la mémoire destination 30D. Dans le cas de la figure 4, on a traité du transfert d'une rangée d'une matrice mémoire à une autre en passant par les registres série correspondant. Toutefois, on souhaite dans certains cas faire un transfert non pas d'une rangée complète mais d'une partie de rangée, un tel transfert sera simplement réalisé comme cela est représenté à la figure 5 entre les registres série source 31S et destination 31D. Etant donné un bloc commençant à la colonne m d'une rangée de la matrice source et que l'on veut placer à partir de la colonne n d'une rangée de la matrice destination, on commence par transférer les contenus des rangées source et destination dans les registres correspondant 31S et 31D. On pointe ensuite par le sélecteur CS mentionné en relation avec la figure 3 la colonne m dans le registre 31S et la colonne n dans le registre 31D. Le bus séquentiel est alors utilisé pour faire le transfert au rythme de l'horloge série en commençant à m dans le registre 31S et à n dans le registre 31D. Ensuite, le contenu du registre 31D est transféré en parallèle à la rangée correspondante de la matrice 30D, les autres données de cette rangée étant donc réinsérées dans la rangée à l'emplacement où elles se trouvaient initialement. Dans ce qui précède, on a illustré un transfert entre une mémoire source et une mémoire destination, étant entendu que chacune des ces mémoires peut être un cache ou que l'une de ces mémoires peut être la mémoire principale. La figure 6 représente de façon un peu plus détaillée la gestion des transferts par le bus séquentiel. On a supposé que les organes de gestion étaient situés dans un bloc 70 au voisinage de la mémoire principale '.11. Quand l'une des mémoires connectées au bus émet une requête sur une ligne R, celle-ci est transmise à un organe d'arbitrage 71 qui envoie en retour, quand le bus est libre, un signal d'acceptation G et le transfert se fait alors au rythme d'une horloge 72 (précédemment appelée horloge série) pendant une durée déterminée par un compteur 73 en fonction du nombre de bits à transférer. Ceci est représenté symboliquement en couplant les sorties de l'horloge 72 et du compteur 73 dans une porte ET 74 qui fournit des signaux d'horloge C sur la ligne correspondante. Alors des données D sont échangées sur le bus de données reliant entre elles les diverses mémoires cache et principale. On a décrit jusqu'à présent l'aspect général architectural du système selon la présente invention. On va maintenant exposer deux modes de réalisation plus particuliers de gestion de ce système, d'une part, avec un système de gestion de mémoires cache essentiellement logiciel, d'autre part, avec un système de gestion de mémoires cache essentiellement matériel. Mémoires cache gérées par logiciel On rappelera comme cela a été indiqué initialement que l'on se place dans le cadre d'une organisation où les données partagées, telles que définies précédemment, sont mémorisées dans la mémoire principale à l'exclusion des mémoires cache. On choisit aussi que les pages de texte et de pile soient mémorisées dans les diverses mémoires cache à l'exclusion de la mémoire principale, ce qui permet de choisir une mémoire principale de taille modeste. Les pages de pile n'existent à un instant donné qu'à un seul emplacement. Les pages de texte peuvent coexister à l'identique dans plusieurs mémoires cache. La figure 7 représente une carte selon la présente invention dans laquelle on peut voir, outre les éléments précédemment décrits, un module de gestion de mémoire (MMU) qui sert de gestionnaire de mémoire cache. Comme l'illustre la figure 8, la mémoire cache MC est divisée en deux zones principales, une zone réservée aux tables de gestion de la mémoire, à savoir une table de pages virtuelles locale (TPVL) et une table de pages physiques locale (TPPL) et le reste qui est disponible pour les données mémorisées dans la mémoire cache, organisées en pages. De même la mémoire principale MP comprend une zone de table de pages virtuelles partagées (TPVP) et une zone de mémorisation de données proprement dite. La table TPVL est utilisée directement par le module MMU et est formatée en conséquence. Comme la table de page virtuelle partagée de la mémoire principale, cette table TPVL contient autant d'éléments que de pages virtuelles. Comme l'indique -la figure 9, chaque élément de la table TPVL contient plusieurs informations utilisées par le module MbS dont trois sont primordiales : le numéro de la page physique, le bit de pile qui indique si l'on est en présence d'une page de pile P ou d'une page de texte T, et le bit de validité qui est dans l'état V (valide) ou I (invalide). Si le bit de validité est à zéro, la page virtuelle n'est pas dans la mémoire cache (ce qui provoque le défaut de page). S'il est à 1, le numéro de page physique indique la position de la page dans la mémoire cache. Tandis qu'un processeur exécute son programme, il génère une série d'adresses qui sont traduites au fur et à mesure par son module de gestion de mémoire (MMU). S'il s'agit de l'adresse d'une donnée qualifiée ci-dessus de partagée, le MMU en relation avec la TPVL le détermine et le transfert est acheminé immédiatement par le bus principal. S'il s'agit de l'adresse de données de pile ou de texte, normalement, la table TPVL indique dans quelle page physique de la mémoire cache du module se trouvent les données re cherchées. Toutefois, tét ou tard le processeur va requérir une adresse virtuelle dont la page physique ne se trouve pas dans la mémoire cache, c'est-à-dire que le bit de validité de cette page virtuelle n'est pas mis à 1 dans la table TPVL. Ceci provoque une interruption logicielle du type défaut de page" (miss).Il s'agit donc de rechercher la page manquante. Le problème qui se pose alors est double : où trouver la page manquante ? où charger la page manquante ? En ce qui concerne la recherche de la page manquante, la position de toutes les pages valides de la machine se trouve dans la table des pages virtuelles partagées TPVP au niveau de la mémoire principale MP. La table TPP est maintenue dans la mémoire principale et contient un mot pour chaque page virtuelle. Le mot indique le module et l'adresse où est stockée la page. Les pages de pile n'existent qu'en original (pas de copie) mais les pages de texte peuvent exister en plusieurs copies. La table TPVP indique la mémoire cache où la page recherchée a été envoyée en dernier et la position de cette page dans cette mémoire. Le deuxième problème qui se pose est de choisir l'empla- cement où doit être chargée la page, c'est-à-dire de trouver un emplacement de page disponible. Cette question est résolue en utilisant la table de pages virtuelles locale TPVL et la table de pages physiques locale TPPL du processeur requérant. La table de pages physiques locale TPPL possède un élément pour chaque page physique dans la mémoire cache. Elle permet de trouver une page dans la mémoire cache qui est remplaçable et où on peut charger la page manquante. Afin de remplacer seulement les pages les plus anciennes, un pointeur de remplacement PTR parcourt la table TPPL de façon circulaire. Il recherche la page la moins récemment utilisée (dite LRET d'après l'expression anglosaxonne least recently used). L'élément dans la. table TPPL indique ou bien la page virtuelle dans la TPVL à laquelle il correspond ou bien est à zéro pour signaler que la page physique est libre (ce qui arrive en début d'exécution). Ainsi., pour répondre à la question "où charger la page ?", on avance le pointeur de remplacement en relation avec la table TPPL.Si l'élément concerné de la table est à zéro, sa page est remplaçable. Sinon on regarde l'élément indiqué dans la table TPVL. Si c'est une page invalide on peut la remplacer. Si c'est une page de pile, il faut la préserver car elle n'existe qu'en ori#ginal et on avance à nouveau le pointeur. Sinon on regarde à la position correspondante dans la TPVP s'il s'agit d'une copie de page de texte (remplaçable) ou de l'original le plus récent (non remplaçable). Une fois une page remplaçable trouvée, le sous-programme de défaut de page la remplace par la page manquante. Avant de poursuivre l'exécution interrompue, la table TPVP est mise à jour avec la nouvelle position de page (un original s'il s'agit d'une page de pile, une copie la plus récente s'il s'agit d'une page de texte). Lors de l'initialisation du fonctionnement de la machine, le programme (texte) est téléchargé dans les mémoires cache des modules de processeur. De façon générale, il sera trop important pour tenir dans la mémoire cache d'un seul module. Il sera donc divisé en pages et réparti entre tous les modules. La répartition exacte n'a pas d'importance pourvu que la table de pages virtuelles partagée de la mémoire principale et les tables de pages virtuelles locales associées à chaque mémoire cache indiquent la position de chaque page. Au début de l'exécution, toutes les piles sont vides. Les seules pages valides dans les mémoires cache sont donc les pages de texte. Au lancement d'une exécution, chaque processeur aborde une tâche (une partie du programme) et entrain l'apparition d'un grand nombre de défauts de page puisque les pages de texte voulues ne se trouvent généralement pas stockées dans la mémoire cache qui en a besoin. Les transferts appropriés sont réalisés selon le processus indiqué ci-dessus par le bus séquentiel selon l'invention. Ensuite, chaque processeur accumule rapidement un ensemble de pages utilisées et commence à créer des pages de pile. En cours d'exécution, il arrivera qu'un processeur suspende une tâche pour en reprendre une autre. Rapidement il rassemblera à nouveau un ensemble de pages de texte suffisantes pour l'exécution de cette nouvelle tâche. Une page n'est copiée dans la mémoire cache associée à un processeur que sur demande. Les pages de texte remplacées sont les plus anciennes copies dont il est le moins probable que le processeur ait besoin. Mémoires cache gérées par matériel Dans le cadre de cette réalisation, on part des hypothèses et des choix suivants a) la mémoire principale est capable de contenir la totalité du texte, des piles et des données partagées. Plus parti culièrement, on choisit dans cet exemple de réalisation le cas où deux mémoires matériellement distinctes constituent la mémoire principale. La première mémoire à accès aléatoire est gérée classiquement par le bus principal pour les transferts des données partagées. C'est le fonctionnement et la gestion de la deuxième mémoire qui seront exclusivement traités ci-après. Cette deuxième mémoire est appelée dans ce chapitre "mémoire principale". b) La mémoire cache de chaque module de processeur est divisée en blocs. Si le processeur a besoin d'une donnée dans un bloc qui ne se trouve pas dans sa mémoire cache, le bloc sera recopié à partir de la mémoire principale. S'il s'agit d'un bloc de pile, il sera éventuellement copié depuis sa position dans la mémoire cache d'un autre module. c) Tout bloc de pile que l'on voudra remplacer dans une mémoire cache sera préalablement sauvegardé dans la mémoire principale. Comme l'illustre la figure 10, la mémoire cache est divisée en un grand nombre de blocs qui sont similaires aux pages précédemment mentionnées dans le cas de la réalisation logicielle mais à la différence que la taille d'un bloc n'est pas liée à la taille d'une page du module MMU et est plus petite. A chaque bloc sont rattachés d'une part une étiquette, d'autre part un bit supplémentaire destiné à indiquer si le contenu du bloc a été modifié ou non depuis son chargement. L'étiquette stocke les bits de poids fort de l'adresse du bloc et peut afficher l'état invalide si le bloc ne contient pas d'informations. Les bits d'adresse de poids faibles sélectionnent le bloc parmi tous les blocs de la mémoire cache. La figure 11 représente à nouveau un module processeur dans lequel on retrouve les mêmes références qu'en figure 2 désignant les mêmes éléments mais où la mémoire cache MC comprend une partie de mémorisation de données MD et, de façon adjacente, une portée M contenant des bits indiquant si le bloc de données correspondant a été modifié ou non et une partie T d'étiquette. L'adresse produite par le processeur P est divisée en parties de poids fort et de poids faible. La partie de poids faible adresse la mémoire cache à double accès et sélectionne le bloc. Elle adresse également la mémoire de bit de modification M et la mémoire d'étiquette T. La partie de poids fort est comparée dans la mémoire d'étiquette à l'étiquette correspondant au bloc. S'il y a correspondance (signalée par la sortie T), la donnée recherchée se trouve effectivement dans le bloc. Sinon l'étiquette indique l'adresse du bloc actuellement chargé et indique donc l'endroit en mémoire principale où il faudra le sauvergarder comme cela sera indiqué ci-après avant de le remplacer par le bloc recherché. La mémoire cache peut être initialisée pour les transferts séquentiels soit depuis son processeur soit depuis le bus principal. L'étiquette d'un bloc peut être invalidée également depuis le bus principal. Le chargement d'un bloc par le bus séquentiel remet son bit de modification à zéro. Un accès en écriture du processeur P vers n'importe quelle donnée dans un bloc met son bit de modification M à 1. La sauvegarde et le chargement se font par le bus séquentiel BS sous la commande de ses dispositifs de gestion associés à la mémoire principale. Il faut toutefois signaler quel bloc est à sauvegarder et quel bloc est à charger. Suite à un défaut de cache (miss) le module processeur demande un accès de sa mémoire cache au bus séquentiel et émet alors un ou deux mots par l'intermédiaire du bus principal vers le dispositif de gestion de la mémoire principale et du bus séquentiel. Le premier mot est une demande de sauvegarde et n'est émis que si le contenu du bloc à remplacer a été modifié. Le deuxième mot spécifie le bloc à charger. La figure 12 indique la structure de la mémoire principale et la figure 13 illustre le système de gestion de cette mémoire principale et du bus séquentiel. Seuls des transferts par bloc sont effectués depuis et vers la mémoire principale. La mémoire principale MP consiste en un grand nombre de blocs dont chacun est associé à une étiquette T comme les mémoires cache. Toutefois le nombre de blocs de la mémoire principale est plus élevé que celui de chacune des mémoires cache puisque cette mémoire principale doit contenir la totalité des blocs de texte et de piles. L'étiquette indique le statut du bloc qui peut être l'un des trois suivants a) bloc de texte résidant dans la mémoire principale b) bloc de pile actuellement résidant dans la mémoire principale c) bloc de pile actuellement résidant dans un module processeur. Dans ce dernier cas, l'étiquette indique aussi l'adresse du module et du bloc dans celui-ci. Le gestionnaire 80 répond aux demandes de sauvegarde et de chargement émises par un module processeur. Quand ce gestionnaire revoit une demande de sauvegarde, il initialise la mémoire principale pour un transfert par son accès série 81 en écriture et effectue le transfert du bloc par le bus séquentiel BS. Par la même occasion, il marque dans son étiquette T une indication correspondant à pile et "résidant". Quand le gestionnaire reçoit une demande de chargement, il consulte l'étiquette du bloc demandé. Si elle affiche "texte, résidant ou pile, résidant il initialise la mémoire principale pour un transfert par son accès série en lecture et effectue le transfert du bloc vers la mémoire cache du module demandeur. Si le bloc chargé est un bloc de pile, l'étiquette "pile, résidant" est remplacée par le numéro du module demandeur et l'adresse du bloc dans celui-ci. Si l'étiquette affiche un "numéro de module le gestionnaire initialise la mémoire cache du module concerné pour un transfert série en lecture et effectue le transfert du bloc. Par la même occasion il met à jour son étiquette par le numéro du module demandé et invalide le bloc du module à partir duquel le transfert a été fait. Dans un tel système de gestion matérielle de mémoires cache et de mémo-ire principale, au début de l'exécution, les étiquettes de tous les blocs en mémoire principale sont mises à texte, résidant". Quand les processeurs commencent à tourner, il y aura une rafale de demandes de chargement. L'algorithme permet d'effectuer des copies des blocs de texte demandés dans la mémoire cache de chaque processeur qui les requiert. Au fur et à mesure, des blocs de pile apparaissent dans les mémoires cache (bits de modifications à 1). Quand ces blocs doivent être remplacés ils sont sauvegardés comme "pile, résidant dans la mémoire principale. Quand un bloc de pile est demandé, il est transféré depuis la mémoire cache où il a été produit ou utilisé en dernier ou depuis la mémoire principale s'il a été sauvegardé. Il n'y a dans ce système jamais plus d'un exemplaire d'un bloc de pile à la fois. Les deux modes de réalisation particuliers dits de gestion logicielle et de gestion matérielle présentés ci-dessus ne constituent que des exemples particuliers de mises en oeuvre et l'invention concerne de façon plus générale une architecture et toutes les variantes de ces modes de réalisation qui apparaitront à l'homme de l'art. REVEDICATIS 1. Architecture parallèle multiprocesseur comprenant des modules élémentaires dont chacun comprend un processeur (P) et une mémoire cache (MC) pouvant communiquer entre eux et, par l'intermédiaire d'un bus principal (BP), avec d'autres modules ou avec une mémoire principale (MP), caractérisée en ce que chaque cache comprend, en plus de son accès vers son processeur et le bus principal, un accès permettant de transférer en parallèle des rangées ou parties de rangées dans un registre (31) associé à ce cache, et en ce qu'elle comprend en outre un bus de type séquentiel (BS) permettant de faire communiquer lesdits registres entre eux et avec la mémoire principale. 2. Architecture parallèle multiprocesseur selon la revendication 1, dans laquelle certaines des données sont susceptibles d'être cachées (mémorisées dans un cache) alors que d'autres données (données partagées) sont non-cachées, (mémorisables seulement dans la mémoire principale), comprenant des moyens pour déterminer si un transfert requis par un processeur est susceptible d'être caché ou non, caractérisée en ce que - s'il s'agit de données non-cachées, lesdits moyens orientent la requête vers le bus principal par lequel s'effectue le transfert requis entre le processeur et la mémoire principale, et - s'il s'agit de données susceptibles d'être cachées mais non contenues dans le cache du processeur requérant, lesdits moyens orientent la requête de sorte que le bus séquentiel effectue le transfert entre caches ou entre cache et mémoire principale, par l'intermédiaire desdits registres. 3. Architecture parallèle multiprocesseur selon la revendication 2, caractérisée en ce que les données susceptibles d'être cachées comprennent des données de texte (programme) non modifiées en cours d'exécution et des données de pile, susceptibles d'être modifiées par un seul processeur à la fois. 4. Architecture parallèle multiprocesseur selon la revendication 3, caractérisée en ce que - lors du chargement initial du texte, celui-ci, divisé en pages, est directement chargé par le bus séquentiel dans les mémoires cache sans mémorisation dans la mémoire principale, en mémorisant seulement dans une table (TPVP) de la mémoire principale (MP) des informations sur les emplacements dans les mémoires cache où sont chargées ces pages, - lors de la demande par un processeur d'une page de texte, celle-ci est transférée (recopiée) dans sa mémoire cache par le bus séquentiel et ladite table (TPVP) est mise à jour pour indiquer l'emplacement où la page a été transférée en dernier. 5. Architecture parallèle multiprocesseur selon l'une des revendications 3 ou 4, caractérisée en ce que lors du transfert d'une page de pile à partir d'une mémoire, cette page de pile est invalidée dans la mémoire où on l'a prise, d'où il résulte qu'à un instant donné une page de pile n'existe qu'à un emplacement donné.