FR 3055715 A1 20180309 FR 1658373 A 20160908 B15478 1 METHODES ET DISPOSITIFS POUR CONTOURNER LE CACHE INTERNE D'UN CONTROLEUR MEMOIRE DRAM EVOLUE DOMAINE La présente demande concerne un système de calcul comprenant un processeur, une mémoire, et une interface de commande entre le processeur et la mémoire. EXPOSE DE L'ART ANTERIEUR Un processeur PIM (Processor In Memory) est un processeur intégré directement dans un circuit mémoire, par exemple dans un circuit mémoire DRAM. Dans ce document ce circuit mémoire est appelé circuit PIM. Un processeur PIM est contrôlé par un processeur principal, typiquement un processeur Intel, ARM ou Power. Dans ce document ce processeur est appelé HCPU (Host CPU). Le processeur PIM et le HCPU ont accès à la mémoire dans laquelle le processeur PIM est intégré. Dans ce document cette 15 mémoire est appelée mémoire PIM. La demande de brevet publiée sous le numéro FR 3032814 décrit par exemple un moyen de permettre aux processeurs PIM et HCPU d'accéder à la mémoire PIM. Chaque processeur PIM possède des registres permettant 20 au HCPU de le contrôler. Ces registres, accessibles par le HCPU, sont visibles dans l'espace d'adressage physique du circuit PIM. 3055715 B15478 2 Dans ce document ces registres sont appelés registres d'interface, l'ensemble des registres d'interface d'un processeur PIM étant appelé l'interface de ce processeur PIM, et le logiciel, s'exécutant sur le HCPU, contrôlant cette interface étant appelé 5 le logiciel d'interface. Caractérisation des communications Le HCPU effectue typiquement les actions suivantes pour utiliser un processeur PIM: - beaucoup d'écritures de paramètres, instructions et 10 données, dans la mémoire PIM; - relativement peu d'écritures de paramètres, instructions, données et commandes, dans des registres d'interface de ce processeur PIM; - relativement peu de lectures d'état et de résultats 15 depuis des registres d'interface du processeur PIM; - beaucoup de lectures de résultats depuis la mémoire PIM. Problème d'écritures différées Les écritures générées par le HCPU ayant comme 20 destination soit l'interface d'un processeur PIM, soit la mémoire PIM, doivent être réalisées sans délai. Un HCPU possède un système de cache et ce dernier peut retarder d'un temps indéterminé une écriture dans le circuit PIM. Les processeurs HCPUs disposent d'instructions de 25 gestion de cache permettant de forcer la mise à jour en mémoire principale, d'une donnée spécifiée par son adresse, dont l'écriture n'a pour l'instant eu lieu que dans le cache du processeur. Malheureusement ces instructions de gestion de cache 30 n'affectent pas le cache du contrôleur DRAM quand celui en possède un, ce qui est le cas des processeurs hautes performances comme les HCPUs. Aussi ces instructions de mise à jour garantissent qu'une donnée écrite est "poussée" jusqu'au contrôleur DRAM, mais 35 ne garantissent pas qu'elle soit "poussée" jusqu'au circuit mémoire. 3055715 B15478 3 Quand un système possède de la mémoire normale, sans processeur PIM intégré, le logiciel n'a aucun besoin d'utiliser une instruction de gestion de cache après une écriture, car le fait que cette écriture atteigne le circuit mémoire rapidement 5 n'a pas importance. Le cache affecté par les instructions de gestion de cache est nommé dans ce document "cache CPU", le cache non-affecté par ces instructions étant nommé "cache DRAM". Problème d'écritures différées dans des mémoires non volatile 10 Les écritures différées sont également un problème pour des mémoires non-volatile n'intégrant pas de processeur PIM. Par exemple certaines mémoires MRAM (mémoire magnétique), comme celle fabriquées par la société EVERSPIN, sont conçues pour présenter une interface compatible DRAM, permettant 15 de les utiliser avec un contrôleur DRAM. Avant de pouvoir couper l'alimentation électrique d'un système informatique utilisant de telles mémoires, il est important de pouvoir être sûr qu'il n'y a plus d'écriture ciblant la MRAM qui soit en attente dans le cache DRAM, autrement ces 20 écritures seraient perdues quand le courant serait stoppé. Problème d'écritures fusionnées Un autre problème est que si une donnée Cl à écrire à une certain adresse est stockée dans le cache DRAM, cette donnée peut être remplacée par l'arrivée d'une nouvelle donnée C2 pour 25 la même adresse, le cache DRAM considérant optimal de ne pas écrire Cl dans le circuit mémoire, Cl étant supplantée par C2. Si ce raisonnement est juste pour une mémoire, il ne l'est pas pour un registre d'interface recevant des commandes du HCPU : si Cl et C2 sont deux commandes, il est nécessaire que Cl 30 puis C2 soient écrites dans le circuit PIM. Problème d'écritures réordonnées Un autre problème est que le cache DRAM peut changer l'ordre dans lequel les écritures de données sont réalisées, ce qui est problématique même quand ces écritures sont à des adresses 35 différentes. Ainsi une séquence composée : 3055715 B15478 4 - de l'écriture d'un paramètre d'une commande dans un registre d'interface nommé PARAM, - puis de l'écriture de la commande correspondante dans un autre registre d'interface nommé CMD ; 5 peut être réalisée en sens inverse par le cache DRAM, faisant que la commande écrite dans CMD va être exécutée en utilisant comme paramètre l'ancienne valeur du registre PARAM, celui-ci n'ayant pas encore été écrit par le nouveau paramètre. Problème de valeurs cachées obsolètes 10 Quand le HCPU lit une valeur V2 à une adresse AV, cette valeur V2 ayant été générée par un processeur PIM, il est important que la valeur lue par le HCPU soit bien cette valeur récente V2, et non une valeur antérieur V1 qui aurait été copiée dans un cache lors d'une lecture antérieure à la génération de V2, à cette même adresse AV. Les processeurs HCPUs disposent d'instructions de gestion de cache, permettant notamment d'invalider dans le cache une donnée spécifiée par son adresse. Aussi après l'exécution d'une telle instruction avec 20 comme paramètre l'adresse AV, la valeur V1 n'est plus présente dans le cache, et si le HCPU relis une donnée à l'adresse AV, il va obtenir la valeur V2 du circuit mémoire et le cache va cacher maintenant cette valeur V2. Malheureusement ces instructions de gestion de cache 25 n'affectent pas le cache DRAM. Aussi une instruction d'invalidation ciblant l'adresse AV garantit que la valeur V1 n'est plus présente dans le cache CPU, mais ne garantit pas que la valeur V1 ne soit pas toujours présente dans le cache DRAM. 30 Si tel est le cas quand le HCPU va relire l'adresse AV, comme cette adresse n'est plus dans le cache CPU, celui-ci va demander une lecture à l'adresse AV au contrôleur DRAM. Mais ce dernier a une entrée de son cache DRAM qui : - est valide, 35 - correspond à l'adresse AV, - contient toujours l'ancienne valeur Vl. 3055715 B15478 5 Aussi au lieu de lire la valeur V2 depuis le circuit PIM, le contrôleur DRAM va juste retourner la valeur V1 depuis son cache DRAM. Quand un système possède de la mémoire normale, sans 5 processeur PIM intégré, le logiciel n'a aucun besoin d'utiliser une instruction de gestion de cache avant de lire une donnée : une donnée dans le cache CPU étant toujours la plus récente car seul le HCPU modifie la mémoire, alors que dans un système avec un processeur PIM, ce dernier peut aussi modifier la mémoire. 10 Modification des HCPUs La solution la plus logique serait que les HCPUs soient modifiés afin que les instructions de gestions de cache affectent également les caches DRAM. Malheureusement il est très difficile de convaincre un 15 fabriquant de HCPU de réaliser une telle modification, car : - le coût de conception d'un HCPU est très important et cette conception s'étale sur plusieurs années, - un retard dans la conception du HCPU du à cette modification aurait un coût très importantes pour le fabricant, - le support de processeur PIM via une telle modification peut aller à l'encontre de la stratégie industrielle et commerciale du fabricant. Il y a donc un besoin pour une solution aux problèmes de communication entre un HCPU et un processeur PIM intégré dans 25 une DRAM, qui ne nécessite pas de modifier les HCPUs, mais qui soit entièrement implémentée : - dans l'interface du processeur PIM, et - par le logiciel d'interface. RESUME 30 Ainsi, un mode de réalisation prévoit un système de calcul comprenant : un dispositif de calcul ayant un ou plusieurs coeurs de traitement sous commande d'instructions et un contrôleur mémoire, le contrôleur mémoire comprenant une mémoire cache ; et un circuit mémoire couplé au contrôleur mémoire par 35 l'intermédiaire d'un bus de données et d'un bus d'adresses, le circuit mémoire étant adapté à avoir un premier emplacement 3055715 B15478 6 mémoire de m bits accessible par une pluralité de premières adresses fournies sur le bus d'adresses, le dispositif de calcul étant configuré pour sélectionner, pour chaque opération mémoire accédant au premier emplacement mémoire de m bits, une adresse 5 parmi la pluralité de premières adresses. Selon un mode de réalisation, le premier emplacement mémoire de m bits est accessible par une pluralité P de premières adresses, le dispositif de calcul étant configuré pour utiliser une première des adresses pour accéder au premier emplacement 10 mémoire pendant une Nième et un (N+P)ième opérations d'accès au premier emplacement mémoire. Selon un mode de réalisation, chaque adresse de la pluralité de premières adresses comprend une première valeur de n bits et une seconde valeur de p bits, le dispositif de calcul 15 étant configuré pour effectuer une opération d'écriture de données d'écriture vers les m bits du premier emplacement mémoire en réalisant une opération de lecture du premier emplacement mémoire en utilisant l'une des premières adresses ayant une première valeur à n bits sélectionnée et une seconde valeur à p bits générée 20 en fonction des données d'écriture. Selon un mode de réalisation, le circuit mémoire est adapté, en réponse à la réception d'une opération de lecture vers le premier emplacement mémoire utilisant l'une parmi des premières adresses, à écrire la deuxième valeur à p bits de l'adresse dans le premier emplacement mémoire. Selon un mode de réalisation, p et m sont des entiers positifs et m est égal ou supérieur à p. Selon un mode de réalisation, le circuit mémoire est adapté à avoir un deuxième emplacement mémoire accessible par une 30 pluralité de deuxièmes adresses fournies sur le bus d'adresses. Selon un mode de réalisation, les premier et deuxième emplacements mémoire font partis d'une première plage d'emplacements mémoire du circuit mémoire, la première plage d'emplacements mémoire étant sélectionnée par une fenêtre 35 d'adresses glissante, dans lesquels les emplacements mémoire de la première plage d'emplacements mémoire sont adressables : 3055715 B15478 7 par des adresses correspondantes dans une première plage d'adresses comprenant une de la première pluralité d'adresses et une de la deuxième pluralité d'adresses ; et par des adresses correspondantes dans une deuxième plage 5 d'adresses comprenant un autre de la première pluralité d'adresses et une autre de la deuxième pluralité d'adresses ; le circuit mémoire comprenant un circuit de conversion d'adresses adapté à convertir des adresses dans les première et deuxième plages d'adresses vers des adresses correspondantes dans 10 la fenêtre d'adresses glissante. Selon un mode de réalisation, le circuit de conversion d'adresses comprend au moins un registre programmable pour définir l'emplacement de la fenêtre d'adresses glissante. Selon un mode de réalisation, ledit au moins un registre 15 du circuit de conversion d'adresses est programmable pour définir l'emplacement et la taille de la fenêtre d'adresses glissante. Selon un mode de réalisation, le contrôleur mémoire est adapté à effectuer une opération d'évacuation de cache, l'opération d'évacuation de cache comprenant une ou plusieurs 20 séquences d'instructions d'accès mémoire réalisées par le contrôleur mémoire ayant comme résultat que : tout ou partie des transactions d'écriture de mémoire cache stockées dans la mémoire cache du contrôleur mémoire est écrit vers le circuit mémoire ; ou 25 tout ou partie des données de lecture stockées dans la mémoire cache du contrôleur mémoire est évacué de la mémoire cache, les données de lecture comprenant des données lues à partir du circuit mémoire avant l'opération d'évacuation de cache ; ou tout ou partie des transactions d'écriture de mémoire 30 cache stockées dans la mémoire cache du contrôleur mémoire est écrit vers le circuit mémoire et tout ou partie des données de lecture stockées dans la mémoire cache du contrôleur mémoire est évacué de la mémoire cache. Selon un mode de réalisation, le circuit mémoire 35 comprend en outre un processeur auxiliaire, et la séquence d'instructions d'accès mémoire comprend uniquement des 3055715 B15478 8 instructions d'accès de registre pour accéder à un ou plusieurs registres de commande du circuit mémoire pour commander le processeur auxiliaire. Selon un mode de réalisation, le circuit mémoire 5 comprend un circuit de surveillance, accessible par le dispositif de calcul, et adapté à enregistrer des transactions d'accès mémoire effectuées dans le circuit mémoire, le dispositif de calcul étant configuré pour générer lesdites une ou plusieurs séquences d'instructions d'accès mémoire sur la base des 10 transactions enregistrées par le circuit de surveillance. Selon un mode de réalisation, le circuit mémoire comprend en outre un processeur auxiliaire, les premier et deuxième emplacements mémoire étant des registres de commande du processeur auxiliaire. 15 Selon un mode de réalisation, le dispositif de calcul est configuré pour générer des commandes d'un premier type et des commandes d'un deuxième type, le circuit mémoire étant adapté à modifier l'ordre des commandes reçues du dispositif de calcul de telle sorte que, pour un premier groupe de commandes du deuxième 20 type généré par le dispositif de calcul entre des première et deuxième commandes du premier type, l'ordre des première et deuxième commandes du premier type par rapport au groupe de commandes du deuxième type est respecté. Selon un mode de réalisation, le circuit mémoire est 25 adapté à modifier l'ordre des commandes sur la base d'une valeur d'ordre associée à au moins chaque commande du premier type, la valeur d'ordre de chaque commande étant incluse : dans l'adresse du destinataire de la commande ; ou dans la commande elle-même ; ou partiellement dans l'adresse du destinataire de la commande et partiellement dans la commande elle-même. Selon un mode de réalisation, le dispositif de calcul comprend en outre une mémoire cache CPU configurable par des instructions de gestion de cache, la mémoire cache du contrôleur mémoire n'étant pas configurable par des instructions de gestion de cache. 3055715 B15478 9 Selon un mode de réalisation, le circuit mémoire comprend une matrice mémoire non volatile. Un autre mode de réalisation prévoit un procédé d'accès à un circuit mémoire couplé à un contrôleur mémoire d'un 5 dispositif de calcul par l'intermédiaire d'un bus de données et d'un bus d'adresses, le dispositif de calcul ayant un ou plusieurs coeurs de traitement et le contrôleur mémoire comprenant une mémoire cache, le procédé comprenant : sélectionner, par le dispositif de calcul, pour chaque opération mémoire accédant à un 10 premier emplacement de mémoire de m bits du circuit mémoire, une adresse parmi une pluralité de premières adresses, le premier emplacement mémoire de m bits étant accessible par chacune de la pluralité des premières adresses fournies sur le bus d'adresses. Selon un autre aspect, il est prévu un système composé 15 d'un circuit principal et d'au moins un circuit mémoire; le circuit principal comprenant au moins un processeur principal et un contrôleur mémoire connecté au circuit mémoire; le contrôleur mémoire comprenant un cache qui n'est pas affecté par les instructions de gestion de cache du processeur principal; le 20 circuit mémoire intégrant au moins un processeur auxiliaire; ce processeur auxiliaire comprenant une interface accessible au processeur principal; cette interface comprenant des registres, chaque registre de cette interfaces étant accessible par le processeur principal à travers une pluralité d'adresses; 25 l'interface étant contrôlée par un logiciel s'exécutant sur le processeur principal, le logiciel choisissant pour chacun des accès à un registre donné de l'interface, une adresse parmi la pluralité d'adresses correspondantes à ce registre. Selon un mode de réalisation, le choix de l'adresse pour 30 accéder à un registre de l'interface donné, se fait de tel façon, qu'une adresse, utilisée lors du N ième accès à ce registre, sera utilisée lors du (N+P) ième accès à ce registre, P étant le nombre d'adresses composant la pluralité d'adresses associées à ce registre. 35 Selon un mode de réalisation, l'adresse d'accès à au moins un registre d'interface est construite par l'assemblage d'un 3055715 B15478 10 premier champ de n-bit nommé champ majeur, avec un deuxième champs de p-bit, nommé champ mineur, où la valeur du champ majeur est choisie parmi une pluralité de valeurs, et où la valeur du champ mineur peut avoir n'importe quelle valeur comprise entre 0 et 5 (2^P)-1, la lecture du registre d'interface à l'adresse {champ majeur, champ mineur} entrainant l'écriture de celui-ci par la valeur champ mineur, le logiciel utilisant de telle lectures pour écrire des valeurs dans le registre d'interface. Selon un mode de réalisation, les valeurs possibles du 10 champ mineur sont restreintes aux valeurs qui peuvent être écrite dans le registre d'interface. L'avantage de l'utilisation, lors d'une opération de lecture, d'un champ de l'adresse pour transmettre des bits à écrire dans la mémoire est que l'opération de lecture ne risque 15 pas d'être mise en attente dans la mémoire cache, comme pourrait l'être une opération d'écriture. Selon un mode de réalisation, des registres de l'interface permettent de configurer la position et le cas échéant la taille, d'une fenêtre d'accès additionnelle sur une zone de la 20 mémoire du circuit mémoire, cette fenêtre d'accès étant accessible à travers une pluralité de plage d'adresses, et où le logiciel d'interface réalise des accès à la mémoire du circuit mémoire en positionnant cette fenêtre d'accès sur la zone mémoire concernée, et choisi les adresses d'accès dans la pluralité de plage 25 d'adresses permettant d'accéder à cette fenêtre d'accès. Selon un mode de réalisation, le logiciel d'interface choisi les adresses pour accéder à la fenêtre d'accès de telle façon que si l'adresse du N ième accès à la fenêtre d'accès est choisie parmi une plage d'adresse donnée, alors l'adresse du (N+P) 30 ième accès sera choisie dans cette même plage d'adresse, P étant le nombre de plage d'adresse composant la pluralité de plage d'adresses. Selon un mode de réalisation, le logiciel contrôlant l'interface utilise une séquence d'accès, choisie parmi un 35 ensemble de séquences d'accès prédéterminées, pour chasser du cache du contrôleur mémoire les transactions d'écriture émises 3055715 B15478 11 préalablement à cette séquence, forçant ainsi la réalisation effective de ces transactions d'écriture, la détermination des séquences d'accès prédéterminées se faisant à partir des caractéristiques connues ou déduite de l'observation, du cache du 5 contrôleur mémoire. Selon un mode de réalisation, le logiciel contrôlant l'interface utilise une séquence d'accès, choisie parmi un ensemble de séquences d'accès prédéterminées, pour chasser du cache du contrôleur mémoire les données lues préalablement à cette 10 séquence, la détermination des séquences prédéterminées se faisant à partir des caractéristiques connues ou déduite de l'observation, du cache du contrôleur mémoire. Selon un mode de réalisation, le logiciel contrôlant l'interface utilise une séquence d'accès, choisie parmi un 15 ensemble de séquences d'accès prédéterminées, pour chasser du cache du contrôleur mémoire les transaction d'écriture et les données lues préalablement à cette séquence, la détermination des séquences prédéterminées se faisant à partir des caractéristiques connues ou déduite de l'observation, du cache du contrôleur 20 mémoire. Selon un mode de réalisation, la séquence d'accès est réduite, de telle façon qu'elle ne garantisse l'éviction du cache du contrôleur mémoire que des transactions d'écriture ou des données lues, correspondant à un sous ensemble des adresses 25 physiques associés au circuit mémoire. Selon un mode de réalisation, les séquences d'accès prédéterminées ne comprennent que des accès à des registres de l'interface. Selon un mode de réalisation, l'interface comprend un 30 mécanisme d'enregistrement des dernières transactions ayant atteintes le circuit mémoire, ce mécanisme d'enregistrement étant accessible par le processeur principal via l'interface elle-même. Selon un mode de réalisation, le logiciel contrôlant l'interface utilise préalablement le mécanisme d'enregistrement 35 des dernières transactions, pour déterminer automatiquement les séquences d'accès prédéterminées. 3055715 B15478 12 Selon un mode de réalisation, l'interface comprend au moins un registre de commande aptes à recevoir des commandes du HCPU, et ou ces commandes sont classées entre des commandes fortement ordonnées et des commandes faiblement ordonnées; les 5 commandes faiblement ordonnées émises entre deux commandes fortement ordonnées formant un ensemble de commande faiblement ordonnées à l'intérieur duquel les commandes faiblement ordonnée peuvent être exécutées dans le désordre; et ou les commandes fortement ordonnées sont exécuté dans l'ordre vis à vis des autres 10 commandes fortement ordonnées et vis à vis des ensembles de commandes faiblement ordonnées. Selon un mode de réalisation, l'interface comprend au moins un registre de commande aptes à recevoir des commandes du HCPU, et ou ces commandes sont toutes fortement ordonnées entre 15 elles. Selon un mode de réalisation, les commandes sont réordonnées grâce à l'utilisation d'un numéro compris dans les commandes elles même. Selon un mode de réalisation, les commandes sont 20 réordonnées grâce à l'utilisation d'un numéro compris dans les adresses des commandes. Selon un mode de réalisation, les commandes sont réordonnées grâce à l'utilisation de numéros, une partie d'un numéro étant comprise dans la commande elle-même, le reste du 25 numéro étant compris dans l'adresse de la commande. Selon un mode de réalisation, le processeur auxiliaire n'est pas intégré dans le circuit mémoire, mais est intégré dans un circuit connecté au circuit mémoire. Selon un mode de réalisation, il n'y a pas de processeur 30 intégré et la mémoire est non volatile. BREVE DESCRIPTION DES DESSINS Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation 35 avec les figures jointes parmi lesquelles : 3055715 B15478 13 la figure 1 illustre schématiquement un système de calcul selon un mode de réalisation ; la figure 2 illustre plus en détail une interface mémoire du système de la figure 1 selon un mode de réalisation ; 5 et la figure 3 illustre plus en détail une interface mémoire du système de la figure 1 selon un autre mode de réalisation. DESCRIPTION DETAILLEE 10 Le cache DRAM Taille du cache DRAM La présence d'un cache DRAM permet les optimisations suivantes : - le réordonnancement des requêtes aux circuits 15 mémoires, comprenant notamment les requêtes de rafraichissement, afin de minimiser les ouvertures de pages, opérations particulièrement lentes, - la lecture anticipée de données qui seront probablement accédées prochainement. 20 La taille considérable du cache CPU (jusqu'à plusieurs dizaines de Mo) fait qu'il n'est pas nécessaire que le cache DRAM soit d'une taille importante pour que l'essentiel des gains en performance qu'il puisse apporter soit atteint. Il est notable que les documents marketings des 25 fabricants de HCPU mentionnent toujours la taille du cache CPU mais jamais l'existence même du cache DRAM : cela n'est le cas que parce que sa taille est négligeable en comparaison de celle du cache CPU. Applicabilité 30 La question se pose d'utiliser les techniques, décrites plus loin, pour se passer totalement des instructions de gestion de cache, car si ces techniques fonctionnent sur le cache DRAM, on pourrait imaginer qu'elles fonctionnent également sur le cache CPU. 3055715 B15478 14 Mais ces techniques risquent de ne pas être performantes lorsque qu'elles sont appliquées à des caches de grandes tailles, alors que les instructions de gestions de cache sont tout à fait adaptées à la gestion de tels caches. 5 Aussi il n'y a aucune raison ne pas utiliser les instructions de gestion de cache, les techniques décrites étant utilisées pour les compléter et non pour les remplacer. Convention: Usage implicite des instructions de gestion de cache Dans ce document, et afin de simplifier les 10 explications, les instructions de gestions de cache sont implicitement utilisées dans les cas suivants : quand il est dit que le HCPU écrit une donnée, il faut comprendre que le HCPU réalise en fait les deux actions suivantes 15 il écrit cette donnée en utilisant une instruction normale d'écriture en mémoire, il utilise une instruction de gestion de cache mettant à jour l'entrée correspondante du cache CPU mais n'affectant pas le cache DRAM. 20 quand il est dit que le HCPU lit une donnée, il faut comprendre que le HCPU réalise en fait les deux actions suivantes : - il utilise une instruction de gestion de cache invalidant l'entrée correspondante du cache CPU mais 25 n'affectant pas le cache DRAM, - il lit cette donnée en utilisant une instruction normale de lecture en mémoire. Usage implicite d'instruction de barrière mémoires Le HCPU est habituellement un processeur très performant 30 donc capable d'exécuter des instructions dans le désordre (Out Of Order processor : 000 processor), aussi en plus des instructions de gestion de cache, l'usage d'instructions de "barrière mémoire" est possible pour forcer l'exécution dans un ordre adéquat des instructions. 35 Une instruction de barrière mémoire BM assure que tous les accès générés par des instructions situées avant l'instruction 3055715 B15478 15 BM sont entièrement réalisés du point de vue du cache CPU, avant qu'un accès généré par une instruction situé après l'instruction BM soit réalisé. Le jeu d'instruction d'un HCPU peut comprendre, pour des 5 raisons d'optimisation des performances, des variations autour de ce concept, avec, par exemple, des instructions barrières ne concernant que les écritures ou que les lectures. Tout cela est bien connu de l'homme de l'art, qui choisira, le cas échéant, l'instruction barrière la plus adéquate. 10 Solution pour les registres d'interfaces Les techniques décrites ci-après pour résoudre les problèmes ci-dessus comprennent : - la résolution des problèmes vis à vis des registres d'interface, 15 - la résolution des problèmes vis à vis de la mémoire PIM. La différence venant du fait que les registres de l'interface sont beaucoup moins nombreux que les mots mémoire de la mémoire PIM. 20 L'expression registre "mappé" veut dire que le registre est accessible à une adresse physique. Un registre peut être mappé plusieurs fois : cela veut dire qu'il est accessible à plusieurs adresses physiques différentes. Réduction du nombre de registres d'interface 25 La figure 1 illustre un système de calcul comprenant un dispositif de traitement 102 couplé par un bus, par exemple de type DDR (de l'anglais "Double Data Rate"), vers un circuit mémoire 104. Le bus comprend par exemple un bus de données 106A et un bus d'adresse 106B. 30 Le dispositif 102 comprend par exemple un ou plusieurs coeurs de traitement 108, une mémoire cache CPU (de l'anglais "Central Processing Unit") 110, et un contrôleur mémoire 112 comprenant une mémoire cache 114. La mémoire cache 114 est par exemple une mémoire cache DRAM (de l'anglais "Dynamic Random 35 Access Memory) dans le cas où le circuit mémoire 104 est une mémoire de type DRAM. 3055715 B15478 16 Le circuit mémoire 104 comprend par exemple une mémoire 116, un dispositif de traitement 118 et une interface 120. De plus, le circuit 104 comprend par exemple un circuit de traduction d'adresse 122 comprenant un ou plusieurs registres 124 et un 5 circuit de surveillance 126. La solution prévoit que chaque registre d'interfaces est mappé un certain nombre de fois, ce nombre dépendant des caractéristiques du cache DRAM. Pour une plage d'adresse physique d'une taille donnée, 10 moins les registres d'interfaces sont nombreux, plus chacun d'entre eux pourra être mappé de nombreuses fois. Il est toujours possible de réaliser une interface ayant très peu de registres d'interface, donc pouvant avoir chacun de ses registres mappé un grand nombre de fois, en utilisant un système d'accès indirect. 15 Par exemple, l'interface du processeur PIM 118 peut comprendre seulement 3 registres directement accessibles, permettant un accès indirect à un nombre bien plus grand de registres : - un registre index registre, accessible seulement en 20 écriture, - un registre ecriture registre, accessible seulement en écriture, - un registre lecture registre, accessible seulement en lecture. 25 Une telle interface permet d'accéder indirectement à un grand nombre de registres : Pour lire un registre qui est accessible seulement indirectement, il faut: - écrire l'index de ce registre dans le registre 30 index registre - lire le registre lecture registre Pour écrire un registre qui est accessible seulement indirectement, il faut: - écrire l'index de ce registre dans le registre 35 index registre 3055715 B15478 17 - écrire la donnée à écrire dans le registre ecriture registre Dans ce document seul l'ensemble des registres d'interface d'un processeur PIM qui sont directement accessible 5 par le HCPU, est nommé l'interface de ce processeur PIM; du point de vue de l'invention, les registres indirectement accessibles ne faisant pas partie de l'interface du processeur PIM. Création de très nombreuses adresses pour chaque registre d'interface 10 Comme illustré en figure 2, le circuit mémoire 104 contient 2^ATmots mémoires, mais pour créer de nombreuses adresse, celui-ci est déclaré comme ayant 2^(N+1) mots mémoire, avec 1 > 0. Une plage d'adresses physiques de taille 2^N étant 15 consacrée à mapper les mots mémoires, il reste donc une plage d'adresse physique de taille ((2^1)-1) x (2^A) disponible pour mapper les quelques registres 202, 204 de l'interface 120 du processeur PIM, permettant de mapper chacun de ces registres un très grand nombre de fois. 20 Le code de démarrage (BIOS / boot firmware) et le système d'exploitation (OS, Operating System) doivent tenir compte de la taille réelle de la mémoire et non de la taille déclarée: - les tests mémoires effectués au démarrage du système ne doivent concerner que la plage d'adresse physique correspondant 25 à la mémoire réelle, - l'OS doit initialiser les bases de données de ses allocateurs mémoires en tenant compte de la taille réelle de la mémoire. Mécanisme de l'invention pour les registres d'interface 30 Pour les registres d'interface, le logiciel d'interface utilise, à chaque accès à un registre (par exemple des accès 208 au registre 202 et des accès 210 au registre 204 en figure 2) une adresse différente mappant celui-ci; en conséquence : - le cache DRAM ne va pas fournir une donnée qu'il a 35 déjà dans l'une de ses entrée, car l'adresse ne correspondra pas : 3055715 B15478 18 cela résolvant le problème des instructions d'invalidation de cache n'affectant pas le cache DRAM, - le cache DRAM ne va pas fusionner des transactions d'écritures : de telle fusions nécessitant que les transactions 5 aient une même adresse, - le cache DRAM va "déborder" rapidement, poussant naturellement les transactions d'écritures qui y étaient stockées à être exécutées. Concernant le dernier point, le logiciel d'interface : 10 - peut s'assurer à tout moment qu'une écriture a bien été réalisée, en relisant le registre d'interface destinataire de l'écriture (en utilisant bien sur une autre adresse mappant ce registre), - peut, après une série d'écritures, générer des accès 15 "bidon", en lecture ou en écriture, n'ayant pour vocation que de pousser les écritures précédentes hors du cache DRAM, ceci causant leur réalisations (et il peut vérifier que ces écritures ont bien été faite, et générer de nouveaux accès bidon si tel n'est pas le cas). 20 Bien sur un registre d'interface ne peut être mappé un nombre infini de fois, aussi passé un certain nombre d'accès à ce registre, l'ensemble des adresses mappant celui-ci va être épuisé et des adresses déjà utilisées vont être utilisées de nouveau. C'est pourquoi l'ensemble des adresses disponibles pour 25 chaque registre d'interface doit être suffisamment grand, pour qu'avant qu'une adresse soit réutilisée, il n'y ait aucune chance qu'une entrée dans le cache DRAM soit encore associée à cette adresse. La taille minimale de l'ensemble des adresses mappant 30 un registre d'interface est bien sur fonction de la taille et des caractéristiques du cache DRAM. Génération simple de la liste d'adresse La série d'adresse mappant le registre de commande est générée par une fonction circulaire F : 35 - quand une adresse Al est utilisée, l'adresse suivante A2 est donnée par F(A1) 3055715 B15478 19 - l'état associé à un mot mémoire, nommé adresse courante, se résume à l'adresse utilisée pour son dernier accès (voir un champ de cette adresse si une partie de l'adresse reste fixe). 5 Série d'adresse commune Plusieurs registres d'interface, au lieu d'être chacun associé à une adresse courante privée, peuvent utiliser une adresse courante commune, cette dernière étant régie à chaque accès de la façon suivante : 10 - l'adresse de l'accès à un registre est le résultat de la somme d'un offset, dépendant du registre considéré, et de l'adresse courante commune, - après l'accès, l'adresse courante commune est mise à jour par la fonction F. 15 Réordonnancement des écritures de commandes Un registre d'interface susceptible de recevoir des commandes est appelé dans ce document registre de commande, les commandes pouvant arriver à un tel registre étant divisées en deux classes: 20 une classe faiblement ordonnées : comprenant par exemple des commandes écrivant des données, des instructions et des paramètres, une classe fortement ordonnées : comprenant par exemple des commandes : 25 - démarrant le processeur PIM, - stoppant le processeur PIM, - obtenant le statut du processeur PIM. L'appartenance d'une commande à l'une ou l'autre classe est encodée dans la commande elle-même. Les règles 30 d'ordonnancement sont les suivantes : les commandes faiblement ordonnées ne sont pas ordonnées entre elles : - une commande faiblement ordonnée émise avant une autre commande faiblement ordonnée peut être exécutée après 35 celle-ci, 3055715 B15478 20 les commandes faiblement ordonnées sont ordonnées vis à vis des commandes fortement ordonnées : - une commande faiblement ordonnée émise avant une commande fortement ordonnée ne peut être exécuté après celle- 5 ci, - une commande faiblement ordonnée émise après une commande fortement ordonnée ne peut être exécuté avant celle-ci, les commandes fortement ordonnées sont ordonnées entre 10 elles : - une commande fortement ordonnée émise avant une autre commande fortement ordonnée ne peut être exécuté après celle-ci. Réordonnancement des commandes fortement ordonnées 15 A cause du cache DRAM, les commandes fortement ordonnées peuvent être reçues dans le désordre par le registre de commande destinataire, mais elles doivent cependant être exécutées dans l'ordre de leur génération : pour cela les commandes fortement ordonnées sont numérotées lors de leur génération. 20 Numérotation dans la commande Dans cette méthode chaque commande fortement ordonnée à destination d'un registre de commande donné, comprend un champ de n-bit servant à numéroter celle-ci. De plus les ressources matérielles suivantes sont 25 associées à ce registre de commande : un compteur de n-bits, nommé numéro courant de commande, contenant le numéro courant de la commande fortement ordonnée à exécuter. une mémoire de 2^n entrées, nommée tampon de commande, 30 chaque entrée étant : - capable d'être dans un état valide ou invalide, - initialement dans l'état invalide, - capable, dans l'état valide, de stocker une commande fortement ordonnée. 35 Ces ressources matérielles observent l'algorithme suivant : 3055715 B15478 21 quand une commande fortement ordonnée est écrite dans le registre de commande, son numéro V est comparé avec le numéro courant de commande : - si les numéros correspondent alors la commande 5 est exécutée, - autrement la commande est enregistrée dans l'entrée du tampon de commande [V] et cette entrée est notée valide. quand une commande fortement ordonnée est terminée, le 10 numéro courant de commande est incrémenté, sa nouvelle valeur étant notée W, et : - si l'entrée du tampon de commande [W] est valide alors la commande qu'elle contient est exécutée et l'entrée est marquée invalide. 15 Le logiciel d'interface peut lire le numéro courant de commande pour savoir quelle est la dernière commande exécutée, ce qui lui permet de savoir combien ont été exécutées, et donc combien de nouvelles commandes fortement ordonnées il peut générer sans dépasser la capacité du tampon de commande. Ainsi il peut générer 20 des commandes fortement ordonnées au fur et à mesure que les précédentes sont exécutées. Etablir une distinction entre commandes fortement ordonnées et commandes faiblement ordonnées permet : - de limiter la taille du tampon de commande, 25 - d'exécuter des commandes faiblement ordonnées dans leur ordre d'arrivée plutôt que dans leur ordre d'émission, améliorant ainsi les performances, - d'exécuter des commandes faiblement ordonnées en parallèle si l'interface dispose du parallélisme interne pour le 30 supporter. Numérotation dans l'adresse Dans cette méthode, qui est une variation de la méthode précédente, une partie de l'adresse où est écrite la commande sert de numéro de commande. 35 La série d'adresse mappant le registre de commande est générée par une fonction circulaire F : 3055715 B15478 22 - quand une adresse Al est utilisée, l'adresse suivant A2 est donnée par F(A1). La fonction F : - ne modifie en fait qu'un champ de n-bit de l'adresse, 5 noté CA, - définit un ensemble E de M valeurs possibles de CA. Le registre de commande est associé aux ressources matérielles suivantes : un compteur de n-bits, nommé le numéro courant de 10 commande, contenant le numéro courant de la commande fortement ordonnée à exécuter. une mémoire de M entrées nommée tampon de commande, chaque entrée étant: - uniquement indexée par une des valeurs de 15 l'ensemble E, - capable d'être dans un état valide ou invalide, - initialement dans l'état invalide, - capable, dans l'état valide, de stocker une commande fortement ordonnée. 20 Ces ressources matérielles observent l'algorithme suivant : quand une commande fortement ordonnée arrive au registre de commande, son champ CA est comparé avec la valeur du numéro courant de commande : 25 - si CA et le numéro courant de commande correspondent alors la commande est exécutée, - autrement la commande est enregistrée dans l'entrée du tampon de commande qui a pour index CA et cette entrée est notée valide. 30 quand une commande fortement ordonnée est terminée, le numéro courant de commande est modifié par la fonction F et : - si l'entrée du tampon de commande désignée par le nouveau numéro courant de commande est valide alors la commande qu'elle contient est exécutée et l'entrée est 35 marquée invalide. 3055715 B15478 23 Numérotation mixte Cette méthode utilise en fait les deux méthodes précédentes, le numéro de la commande étant constitué pour partie d'un champ de l'adresse et pour partie d'un champ de la commande. 5 Réordonnancement des commandes faiblement ordonnées Les commandes faiblement ordonnées n'ont pas besoin d'être réordonnées entre elles, il faut juste s'assurer : 1. qu'il n'y a pas de commandes fortement ordonnées en attente d'exécution avant de générer des commandes faiblement 10 ordonnées, 2. qu'il n'y a pas de commandes faiblement ordonnées en attente d'exécution avant de générer des commandes fortement ordonnées. Le premier point est facile à déterminer étant donné que 15 le logiciel d'interface : - sait combien il a émis de commandes fortement ordonnées, - peut savoir, en lisant le numéro de commande courante, combien de commandes fortement ordonnées ont été exécutées. 20 Le second point est facile à déterminer en associant à chaque registre de commande un registre comptant combien de commande faiblement ordonnées reçu par ce registre de commande ont été exécutées. Note: une FIFO peut être utilisée pour stocker les 25 commandes faiblement ordonnées, dans le cas où le rythme de leur arrivée puisse être supérieur au rythme de leurs exécutions. Evitement des lectures anticipées Il est souhaitable d'éviter que le cache DRAM réalise des lectures anticipées. Ce genre de lecture peut être déclenché 30 automatiquement quand le cache DRAM observe un motif d'accès régulier, comme par exemple une série d'accès ou chaque accès à lieu à une "distance d'adresse" (address stride) fixe de l'accès précédent. Le cache DRAM peut disposer d'une logique apte à 3055715 B15478 24 détecter de tel motif d'accès et décider de lire des données en avance en se basant sur ce motif d'accès. Note: dans un cache CPU avec une politique d'allocation d'écriture retardée ("write back"), politique d'allocation la plus 5 courante car la plus performante en moyenne, une écriture dans la mémoire résulte initialement en une lecture. Pour éviter les lectures anticipées il est souhaitable que l'ensemble des adresses disponibles pour un même registre d'interface soit balayé de telle façon que pour trois accès 10 successif, N, N+1 et N+2, à ce registre : (adresse(N+2) - adresse (N+1)) <> (adresse(N+1) - adresse(N)) Concernant cette logique de lecture anticipée du cache 15 DRAM, il est probable que celle-ci tienne compte du fait que les adresses d'une série d'accès reste ou non dans la même page DRAM, et la série d'adresse utilisée pour accéder à un registre d'interface doit tenir compte de ce fait. L'homme de l'art comprendra aisément quand fonction de 20 la stratégie de lecture anticipée du cache DRAM, l'ordre d'utilisation des adresses peut être plus ou moins compliqué, mais qu'il est possible de générer un ordre tel que la logique de chargement anticipée ne soit pas activée, celle-ci ne reconnaissant aucun motif d'accès régulier. 25 En tout état de cause, pour se protéger de possible lecture anticipée, il est souhaitable que l'interface du processeur PIM ne comprenne pas de registres qui soient modifiés par leurs lectures. Solution pour la mémoire PIM 30 Les problèmes d'accès au registre d'interface sont résolus fondamentalement par le fait que chacun de ces registres est mappé de nombreuse fois. Cela n'est pas possible avec la mémoire PIM. Par exemple, considérons une mémoire contenant 2^N mots mémoire 35 déclarée comme une mémoire contenant 2^(N+2) mots mémoire : cette mémoire à 4 fois plus d'adresses que de mots mémoires. 3055715 B15478 25 Par symétrie, il est raisonnable de considérer qu'il n'est pas intéressant, pour résoudre le problème d'accès à la mémoire PIM, d'avoir des mots mémoires plus mappés que d'autres. Aussi il serait logique de faire la répartition suivante: 5 - 1/4 de l'espace d'adressage physique du circuit mémoire est dédié à l'interface du processeur PIM. Le nombre de ses registres est très faible, aussi chacun de ces registres va être mappé des millions de fois : permettant de résoudre aisément le problème d'accès pour ces registres d'interface. 10 - les 3/4 de l'espace d'adressage physique est dédié à mapper la mémoire PIM proprement dite, permettant en fait à chaque mot mémoire d'être mappé seulement 3 fois. En conclusion il n'est pas possible de mapper suffisamment de fois chaque mot mémoire pour que le mécanisme de 15 changement d'adresse à chaque accès soit effectif. Solution utilisant une fenêtre mobile Au lieu de déclarer la mémoire comme 4 fois plus grande, il faudrait la déclarer comme bien plus grande encore, ce qui n'est généralement pas possible, car correspondant à des 20 configurations mémoires non supportées par le contrôleur mémoire DRAM. Comme cela est illustré en figure 3, une solution est d'utiliser une fenêtre d'accès 305, nommé fenêtre mobile, dont l'emplacement 304 dans la mémoire PIM 302 (et éventuellement la 25 taille) peut être configuré via des registres d'interface, cette fenêtre mobile étant mappée de nombreuse fois dans une grande plage d'adresses physiques 306 nommée fenêtre multiple. Organisation des adresses physiques Par exemple, et considérant une mémoire PIM dont la 30 taille déclarée est 4 fois plus grande que la taille réelle comme dans l'exemple précédent, les adresses physiques du circuit PIM pourraient être organisées comme suit: - les premières 2^N adresses physiques mappent classiquement la mémoire réelle, 35 - les 2^N adresses physiques suivante mappent de nombreuse fois l'interface, 3055715 B15478 26 - les 2^(N+1) adresses physiques constituent la fenêtre multiple, où la fenêtre mobile est mappée de nombreuse fois. Note: l'espace d'adresse physique mappant classiquement la mémoire PIM peut être utilisée par le HCPU pour accéder aux 5 zones de la mémoire PIM qui ne sont pas accédées par le processeur PIM. Note: en fonction de la réalisation de l'invention, la zone de mémoire PIM sur laquelle la fenêtre mobile est positionnée, peut rester ou non, accessible à travers l'espace 10 d'adresse physique "classique" de la mémoire PIM. Un accès dans la fenêtre mobile (par exemple des accès 308, 310 et 312 en figure 3) va donc être transformé en un accès dans la zone mémoire PIM sur laquelle cette fenêtre mobile est couramment positionnée (par exemple des accès 308', 310' et 312' 15 en figure 3). La fenêtre mobile est accessible via une pluralité de plages d'adresses physiques, l'ensemble de ces plages d'adresses physiques constituant la fenêtre multiple. La fenêtre mobile est telle qu'elle est entièrement 20 incluse dans une page de la DRAM, la position de la fenêtre mobile pouvant être exprimées comme un couple {x, : - x étant un numéro de page, - y étant un offset en octet dans la page, où la taille de la fenêtre mobile et les valeurs possibles de y 25 sont telles que la fenêtre mobile ne peut jamais se retrouver à chevaucher deux pages de la mémoire PIM. Quand le logiciel d'interface veut accéder à des zones de mémoire PIM: - il configure un ou plusieurs registres d'interface 30 pour faire coïncider la fenêtre mobile avec la zone mémoire considérée, - il utilise des accès avec des adresses changeantes pour réaliser les accès qu'il souhaite, - il peut alors passer à la zone suivante, sous réserve 35 que tous les accès réalisés à travers la fenêtre mobile ont été fait: 3055715 B15478 27 - les écritures sont effectives, - les lectures sont effectives. Note: concernant les deux derniers sous-points, si le HCPU est un processeur 000, l'usage d'instructions de barrière 5 mémoire peut s'avérer nécessaire. Quand le logiciel d'interface a écrit toutes les zones concernées, il utilise des accès bidon, pour pousser hors du cache DRAM les dernières écritures qui pourraient s'y trouver en attentes. 10 D'une façon générale, le logiciel d'interface peut maintenant utiliser, pour accéder à la mémoire PIM couramment ciblée par la fenêtre mobile, toutes les solutions précédemment décrites pour l'accès au registre d'interface, notamment l'usage d'adresse courante commune. 15 Déplacement de la fenêtre mobile: - déplacer la fenêtre mobile ne modifie pas les adresses courantes ou communes : le logiciel d'interface modifie une adresse courante privée ou commune que lorsque celle-ci est utilisée pour un accès : elle n'est pas modifiée par le déplacement 20 de la fenêtre mobile. - tous les accès ayant utilisé un positionnement de la fenêtre mobile, doivent être effectifs (doivent avoir atteint le circuit mémoire), avant le déplacement de celle-ci à une autre position. 25 Considérations sur le temps de traversée de la logique réalisant l'invention: La réalisation de quelque registre d'interface, mappés de nombreuse fois, ne pose pas de difficulté significative concernant la vitesse de la logique, du fait notamment que le 30 nombre de tels registres est très faible. La vitesse de la logique réalisant le mécanisme de la fenêtre mobile peut quant à lui poser plus de problème comme expliqué ci-après. Comme précédemment indiqué, la position de la fenêtre 35 mobile peut être exprimées par un couple {x, : - x étant un numéro de page, 3055715 B15478 28 - y étant un offset en octet dans la page. La fenêtre mobile est donc associée à la page x, de la mémoire PIM, cette association étant programmable via des registres d'interfaces. 5 Quand le contrôleur mémoire DRAM émet une transaction d'activation de page ciblant n'importe qu'elle page p de la fenêtre multiple, alors le numéro de page p doit être remplacé par le numéro de page x. Le décodage de ce cas est simple car il suffit de 10 regarder très peu de bit du numéro d'un numéro de page pour déterminer que cette page appartient à la fenêtre multiple. Néanmoins ce décodage simple, et le remplacement de la valeur p par la valeur x, rallonge légèrement le temps de traversé du chemin logique constitué par la logique d'activation du circuit 15 mémoire. Pour réaliser le mécanisme de la fenêtre logique il peut être prévu de rallonger légèrement la latence d'une opération d'activation, la valeur de celle-ci pouvant être programmée dans le contrôleur mémoire. 20 Méthode des barrières d'accès Dans cette méthode, des séquences d'accès prédéterminées sont utilisées pour remplir le cache DRAM de transactions sans importance: - chassant les écritures en attente : réalisant donc 25 leurs mises à jour - chassant des données lues : réalisant donc leur invalidation Connaissant les caractéristiques du cache DRAM, il est possible de créer les séquences d'accès suivantes : 30 DCW BARRIER (Dram Cache Write Barrier), barrière d'écriture pour les caches DRAM : assure que toute les écritures faites avant le commencement de DCW BARRIER sont effectives (visible par le processeur PIM) à la fin de DCW BARRIER. DCR BARRIER (Dram Cache Read Barrier), barrière de 35 lecture pour les cache DRAM : assure que toutes les données lues 3055715 B15478 29 après la fin de DCR BARRIER sont plus récentes que la date à laquelle DCR BARRIER a été commencée. DCM BARRIER (Dram Cache Memory Barrier): barrière de lecture et d'écriture pour les caches DRAM, équivaut 5 indifféremment à : soit DCW BARRIER suivit de DCR BARRIER, soit DCR BARRIER suivit de DCW BARRIER. Comme DCW BARRIER et DCR BARRIER fonctionnent toutes deux en chassant les données précédentes du cache DRAM, et à moins 10 que le cache DRAM soit asymétrique dans sa gestion des lectures et des écritures, on aura en général : DCW BARRIER = DCR BARRIER = DCM BARRIER Certaines architectures de cache DRAM peuvent être telles qu'il soit possible de réduire les séquences DCW BARRIER, 15 DCR BARRIER et DCM BARRIER, et donc de réduire leur temps d'exécution, si l'effet de ces barrières ne s'applique qu'à une plage d'adresses spécifiée en paramètre. Si par exemple la plage d'adresses est spécifiée par son adresse de départ et son adresse de fin, alors on peut avoir les 20 variantes de séquence d'accès BARRIER suivantes: DCW BARRIER(start addr, end addr) assure que toute les écritures faites avant le commencement de DCW BARRIER(start addr, end addr) dans la plage d'adresse {start addr : end addr} sont effectives à la fin de DCW BARRIER(start addr, end addr). 25 DCR BARRIER(start addr, end addr) assure que toute les valeurs lues dans la plage d'adresses {start addr : end addr} après la fin de DCR BARRIER(start addr, end addr) sont plus récentes que la date à laquelle DCR BARRIER(start addr, end addr) a été commencée. 30 DCM BARRIER(start addr, end addr) équivaux indifféremment à : soit DCW BARRIER(start addr, end addr) suivit de DCR BARRIER(start addr, end addr), soit DCR BARRIER(start addr, end addr) suivit de 35 DCW BARRIER(start addr, end addr). 3055715 B15478 30 Application aux mémoires non-volatiles Une mémoire non-volatile, dépourvu de processeur PIM, peut néanmoins avoir une interface lui permettant d'utiliser tous les aspects de l'invention, notamment ceux permettant: 5 - de pousser les écritures en attente hors du cache DRAM, - de vérifier que les écritures sont effectives dans la mémoire PIM. Détermination des caractéristiques du cache DRAM 10 Les suites d'adresses à utiliser dans l'invention dépendent des caractéristiques du cache DRAM. Obtenir la documentation Il est nettement plus facile d'obtenir du fabricant de HCPU une documentation sur le cache DRAM, que de lui demander de 15 modifier son HCPU. Analyser le comportement du cache DRAM Si des informations sur les caches DRAM présents dans le HCPU ne sont pas disponibles, il est possible d'analyser le trafic généré par un contrôleur mémoire DRAM d'un processeur HCPU. 20 Ce genre d'analyse est couramment réalisé entre autre par les fabricants de DRAM et de cartes mémoires DIMMs, notamment pour mettre au point leur produits et vérifier leur conformité, mais aussi par les fabricants d'ordinateurs utilisant des processeurs HCPU, pour la mise au point de leurs systèmes. 25 Il existe des systèmes d'analyse, comme par exemple ceux de la société Tektronix, capable d'analyser le trafic d'un contrôleur DRAM d'un processeur HCPU. En exécutant un programme conçu à cette intention sur le HCPU, et en utilisant un outil d'analyse de trafic comme ceux 30 de la société Tektronix, il peut être possible de déterminer notamment les paramètres suivants du cache DRAM: - la taille maximale d'une entrée du cache DRAM, - l'associativité du cache DRAM, - le nombre d'entrée du cache DRAM, 35 - la politique de remplacement. 3055715 B15478 31 Analyse du cache DRAM via l'interface L'interface peut comprendre des moyens matériels pour enregistrer les N dernières transactions arrivées, ou du moins ou une partie suffisante de leurs caractéristiques, cet 5 enregistrement étant accessible via l'interface elle-même. La présence de ces moyens d'enregistrement, permet aux personnes en charge de développer le logiciel d'interface, de se passer de l'usage de moyen d'analyse externes, moyens qui sont assez onéreux. 10 Il est même possible de concevoir un logiciel d'interface capable, dans de nombreux cas, de déterminer automatiquement, sans moyen d'analyse externe, les caractéristiques du cache DRAM, et ainsi d'automatiser la création des séquences d'accès DCR BARRIER, DCW BARRIER et DCM BARRIER. 15 Considération vis à vis des Banks des circuits DRAM Une mémoire DRAM est organisée en banc, page et colonnes. Par soucis de simplicité, la description de l'invention n'a pas pris en compte la présence de banc : une DRAM étant 20 organisée en banc, page et mot mémoires. Fondamentalement la présence de bancs dans une DRAM permet d'avoir plusieurs pages ouvertes (une page ouverte par banc au maximum). Aussi l'homme de l'art comprendra aisément que l'invention exposée ici n'est pas modifiée par la présence de 25 bancs. REVENDICATIONS1. Système de calcul comprenant : un dispositif de calcul (102) ayant un ou plusieurs coeurs de traitement (108) sous commande d'instructions et un contrôleur mémoire (112), le contrôleur mémoire comprenant une 5 mémoire cache(114) ; et un circuit mémoire (104) couplé au contrôleur mémoire (112) par l'intermédiaire d'un bus de données (106A) et d'un bus d'adresses (106B), le circuit mémoire (104) étant adapté à avoir un premier emplacement mémoire de m bits accessible par une 10 pluralité de premières adresses fournies sur le bus d'adresses (106B), le dispositif de calcul (102) étant configuré pour sélectionner, pour chaque opération mémoire accédant au premier emplacement mémoire de m bits, une adresse parmi la pluralité de premières adresses. 15 2. Système de calcul selon la revendication 1, dans lequel le premier emplacement mémoire de m bits est accessible par une pluralité P de premières adresses, le dispositif de calcul (102) étant configuré pour utiliser une première des adresses pour accéder au premier emplacement mémoire pendant une Nième et un 20 (N+P)ième opérations d'accès au premier emplacement mémoire. 3. Système de calcul selon la revendication 1 ou 2, dans lequel chaque adresse de la pluralité de premières adresses comprend une première valeur de n bits et une seconde valeur de p bits, le dispositif de calcul (102) étant configuré pour effectuer 25 une opération d'écriture de données d'écriture vers les m bits du premier emplacement mémoire en réalisant une opération de lecture du premier emplacement mémoire en utilisant l'une des premières adresses ayant une première valeur à n bits sélectionnée et une seconde valeur à p bits générée en fonction des données 30 d'écriture. 4. Système de calcul selon la revendication 3, dans lequel le circuit mémoire (104) est adapté, en réponse à la réception d'une opération de lecture vers le premier emplacement mémoire utilisant l'une parmi des premières adresses, à écrire la 3055715 B15478 33 deuxième valeur à p bits de l'adresse dans le premier emplacement mémoire. 5. Système de calcul selon la revendication 3 ou 4, dans lequel p et m sont des entiers positifs et m est égal ou supérieur à p. 6. Système de calcul selon l'une quelconque des revendications 1 à 5, dans lequel le circuit mémoire (104) est adapté à avoir un deuxième emplacement mémoire accessible par une pluralité de deuxièmes adresses fournies sur le bus d'adresses (106B). 7. Système de calcul selon la revendication 6, dans lequel les premier et deuxième emplacements mémoire font partis d'une première plage d'emplacements mémoire (304) du circuit mémoire (104), la première plage d'emplacements mémoire étant sélectionnée par une fenêtre d'adresses glissante (305), dans lesquels les emplacements mémoire de la première plage d'emplacements mémoire sont adressables : par des adresses correspondantes dans une première plage d'adresses (RO) comprenant une de la première pluralité d'adresses 20 et une de la deuxième pluralité d'adresses ; et par des adresses correspondantes dans une deuxième plage d'adresses (R1) comprenant un autre de la première pluralité d'adresses et une autre de la deuxième pluralité d'adresses ; le circuit mémoire (104) comprenant un circuit de 25 conversion d'adresses (122) adapté à convertir des adresses dans les première et deuxième plages d'adresses (RO, R1) vers des adresses correspondantes dans la fenêtre d'adresses glissante (305). 8. Système de calcul selon la revendication 7, dans 30 lequel le circuit de conversion d'adresses (122) comprend au moins un registre (124) programmable pour définir l'emplacement de la fenêtre d'adresses glissante (305). 9. Système de calcul selon la revendication 8, dans lequel ledit au moins un registre (124) du circuit de conversion 35 d'adresses (122) est programmable pour définir l'emplacement et la taille de la fenêtre d'adresses glissante (305). 3055715 B15478 34 10.Système de calcul selon l'une quelconque des revendications 1 à 9, dans lequel le contrôleur mémoire (112) est adapté à effectuer une opération d'évacuation de cache, l'opération d'évacuation de cache comprenant une ou plusieurs 5 séquences d'instructions d'accès mémoire réalisées par le contrôleur mémoire ayant comme résultat que : tout ou partie des transactions d'écriture de mémoire cache stockées dans la mémoire cache (114) du contrôleur mémoire (112) est écrit vers le circuit mémoire (104) ; ou 10 tout ou partie des données de lecture stockées dans la mémoire cache (114) du contrôleur mémoire (112) est évacué de la mémoire cache, les données de lecture comprenant des données lues à partir du circuit mémoire avant l'opération d'évacuation de cache ; ou 15 tout ou partie des transactions d'écriture de mémoire cache stockées dans la mémoire cache (114) du contrôleur mémoire est écrit vers le circuit mémoire (104) et tout ou partie des données de lecture stockées dans la mémoire cache (114) du contrôleur mémoire (112) est évacué de la mémoire cache. 11.Système de calcul selon la revendication 10, dans lequel le circuit mémoire (104) comprend en outre un processeur auxiliaire (118), et dans lequel la séquence d'instructions d'accès mémoire comprend uniquement des instructions d'accès de registre pour accéder à un ou plusieurs registres de commande du circuit mémoire (104) pour commander le processeur auxiliaire (118). 12.Système de calcul selon la revendication 10 ou 11, dans lequel le circuit mémoire (104) comprend un circuit de surveillance (126), accessible par le dispositif de calcul (102), et adapté à enregistrer des transactions d'accès mémoire effectuées dans le circuit mémoire (104), le dispositif de calcul (102) étant configuré pour générer lesdites une ou plusieurs séquences d'instructions d'accès mémoire sur la base des transactions enregistrées par le circuit de surveillance (126). 13.Système de calcul selon la revendication 6, dans lequel le circuit mémoire (104) comprend en outre un processeur 3055715 B15478 35 auxiliaire (118), les premier et deuxième emplacements mémoire étant des registres de commande du processeur auxiliaire. 14.Système de calcul selon la revendication 13, dans lequel le dispositif de calcul (102) est configuré pour générer 5 des commandes d'un premier type et des commandes d'un deuxième type, le circuit mémoire (104) étant adapté à modifier l'ordre des commandes reçues du dispositif de calcul (102) de telle sorte que, pour un premier groupe de commandes du deuxième type généré par le dispositif de calcul (102) entre des première et deuxième 10 commandes du premier type, l'ordre des première et deuxième commandes du premier type par rapport au groupe de commandes du deuxième type est respecté. 15.Système de calcul selon la revendication 14, dans lequel le circuit mémoire (104) est adapté à modifier l'ordre des 15 commandes sur la base d'une valeur d'ordre associée à au moins chaque commande du premier type, la valeur d'ordre de chaque commande étant incluse : dans l'adresse du destinataire de la commande ; ou dans la commande elle-même ; ou 20 partiellement dans l'adresse du destinataire de la commande et partiellement dans la commande elle-même. 16.Système de calcul selon l'une quelconque des revendications 1 à 15, dans lequel le dispositif de calcul (102) comprend en outre une mémoire cache CPU (110) configurable par 25 des instructions de gestion de cache, la mémoire cache (114) du contrôleur mémoire n'étant pas configurable par des instructions de gestion de cache. 17.Système de calcul selon l'une quelconque des revendications 1 à 16, dans lequel le circuit mémoire (104) 30 comprend une matrice mémoire non volatile. 18.Procédé d'accès à un circuit mémoire (104) couplé à un contrôleur mémoire (112) d'un dispositif de calcul (102) par l'intermédiaire d'un bus de données (106A) et d'un bus d'adresses (106B), le dispositif de calcul (102) ayant un ou plusieurs coeurs 35 de traitement (108) et le contrôleur mémoire comprenant une mémoire (114) cache, le procédé comprenant : 3055715 B15478 36 sélectionner, par le dispositif de calcul, pour chaque opération mémoire accédant à un premier emplacement de mémoire de m bits du circuit mémoire (104), une adresse parmi une pluralité de premières adresses, le premier emplacement mémoire de m bits 5 étant accessible par chacune de la pluralité des premières adresses fournies sur le bus d'adresses (106B).