FR3055715A1 - Methodes et dispositifs pour contourner le cache interne d'un controleur memoire dram evolue - Google Patents

Methodes et dispositifs pour contourner le cache interne d'un controleur memoire dram evolue Download PDF

Info

Publication number
FR3055715A1
FR3055715A1 FR1658373A FR1658373A FR3055715A1 FR 3055715 A1 FR3055715 A1 FR 3055715A1 FR 1658373 A FR1658373 A FR 1658373A FR 1658373 A FR1658373 A FR 1658373A FR 3055715 A1 FR3055715 A1 FR 3055715A1
Authority
FR
France
Prior art keywords
memory
address
cache
addresses
circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1658373A
Other languages
English (en)
Other versions
FR3055715B1 (fr
Inventor
Jean-Francois Roy
Fabrice Devaux
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Upmem SAS
Original Assignee
Upmem SAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Upmem SAS filed Critical Upmem SAS
Priority to FR1658373A priority Critical patent/FR3055715B1/fr
Priority to PCT/FR2017/052368 priority patent/WO2018046850A1/fr
Priority to US16/331,429 priority patent/US11494308B2/en
Priority to KR1020197009869A priority patent/KR102398616B1/ko
Priority to JP2019513044A priority patent/JP2019531546A/ja
Priority to CN201780062063.1A priority patent/CN109952567B/zh
Publication of FR3055715A1 publication Critical patent/FR3055715A1/fr
Application granted granted Critical
Publication of FR3055715B1 publication Critical patent/FR3055715B1/fr
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

L'invention concerne un système de calcul comprenant : un dispositif de calcul (102) ayant un ou plusieurs cœurs de traitement (108) sous commande d'instructions et un contrôleur mémoire (112), le contrôleur mémoire comprenant une 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 pluralité de premières adresses fournies sur le bus d'adresses (106), 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.

Description

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 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 au HCPU de le contrôler. Ces registres, accessibles par le HCPU, sont visibles dans l'espace d'adressage physique du circuit PIM.
B15478
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é 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 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 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 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 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 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 ne garantissent pas qu'elle soit poussée jusqu'au circuit mémoire.
B15478
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 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
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 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 é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 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 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 différentes.
Ainsi une séquence composée :
B15478
- 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 ;
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
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 VI 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 comme paramètre l'adresse AV, la valeur VI 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 n'affectent pas le cache DRAM.
Aussi une instruction d'invalidation ciblant l'adresse AV garantit que la valeur VI n'est plus présente dans le cache CPU, mais ne garantit pas que la valeur VI ne soit pas toujours présente dans le cache DRAM.
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,
- correspond à l'adresse AV,
- contient toujours l'ancienne valeur VI.
B15478
Aussi au lieu de lire la valeur V2 depuis le circuit PIM, le contrôleur DRAM va juste retourner la valeur VI depuis son cache DRAM.
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 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. 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 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 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
Ainsi, un mode de réalisation prévoit un système de calcul comprenant : un dispositif de calcul ayant un ou plusieurs cœurs 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 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
B15478 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 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 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 é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 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 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 d'adresses glissante, dans lesquels les emplacements mémoire de la première plage d'emplacements mémoire sont adressables :
B15478 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 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 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 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 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 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 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 comprend en outre un processeur auxiliaire, et la séquence d'instructions d'accès mémoire comprend uniquement des
B15478 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 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 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.
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 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 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.
B15478
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 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 cœurs 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 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é 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 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; 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 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.
Selon un mode de réalisation, l'adresse d'accès à au moins un registre d'interface est construite par l'assemblage d'un
B15478 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 (2ΛΡ)-1, la lecture du registre d'interface à l'adresse {champ majeur, champ mineur} entraînant 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 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 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 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 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) 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 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
B15478 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 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 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 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 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 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 1'interface.
Selon un mode de réalisation, l'interface comprend un 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 des dernières transactions, pour déterminer automatiquement les séquences d'accès prédéterminées.
B15478
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 commandes faiblement ordonnées émises entre deux commandes fortement ordonnées formant un ensemble de commande faiblement ordonnées à 1'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 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 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
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 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 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 avec les figures jointes parmi lesquelles :
B15478 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 ;
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
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 mémoires, comprenant notamment les requêtes de rafraîchissement, 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.
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 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é
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.
B15478
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.
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 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 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.
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 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 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.
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
B15478
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 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. 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,
- la résolution des problèmes vis à vis de la mémoire
PIM.
La différence venant du fait que les registres de 1'interface sont beaucoup moins nombreux que les mots mémoire de la mémoire PIM.
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
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.
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 Access Memory) dans le cas où le circuit mémoire 104 est une mémoire de type DRAM.
B15478
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 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, 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.
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 écriture,
- un registre ecriture_registre, accessible seulement en écriture,
- un registre lecture_registre, accessible seulement en lecture.
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 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 index_registre
B15478
- é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 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
Comme illustré en figure 2, le circuit mémoire 104 contient 2ΛΝ mots mémoires, mais pour créer de nombreuses adresse, celui-ci est déclaré comme ayant 2Λ(N+ï) mots mémoire, avec i >
0.
Une plage d'adresses physiques de taille 2ΛΝ étant consacrée à mapper les mots mémoires, il reste donc une plage d'adresse physique de taille ( (2Λϊ)-1) x (2ΛΝ) 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.
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 à 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
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 déjà dans l'une de ses entrée, car l'adresse ne correspondra pas :
B15478 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 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 :
- 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 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) .
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 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 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 :
- quand une adresse Al est utilisée, l'adresse suivante Ά2 est donnée par F(Al)
B15478 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).
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 :
- 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.
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 :
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 :
- 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 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 celle-ci,
B15478 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 celleci,
- une commande faiblement ordonnée émise après une commande fortement ordonnée ne peut être exécuté avant celleci, les commandes fortement ordonnées sont ordonnées entre 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
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.
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 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Λη entrées, nommée tampon de commande, 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.
Ces ressources matérielles observent l'algorithme suivant :
B15478 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 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 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.
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 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,
- 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 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.
La série d'adresse mappant le registre de commande est générée par une fonction circulaire F :
B15478
- quand une adresse Al est utilisée, l'adresse suivant Ά2 est donnée par F (Al) .
La fonction F :
- ne modifie en fait qu'un champ de n-bit de l'adresse, 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 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 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.
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 :
si CA et le numéro courant de commande correspondent alors la commande est exécutée, autrement la commande est enregistrée dans 1'entrée du tampon de commande qui a pour index CA et cette entrée est notée valide.
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 marquée invalide.
B15478
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. 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 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 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.
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 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é 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 à
B15478 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 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 successif, N, N+l et N+2, à ce registre :
(adresse(N+2) - adresse (N+l)) <> (adresse(N+l) - adresse(N))
Concernant cette logique de lecture anticipée du cache 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 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.
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
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ΛΝ mots mémoire 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.
B15478
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:
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.
- 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 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 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 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 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ΛΝ adresses physiques mappent classiquement la mémoire réelle, les 2ΛΝ adresses physiques suivante mappent de nombreuse fois l'interface,
B15478
- les 2Λ(Ν+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 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 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' 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 incluse dans une page de la DRAM, la position de la fenêtre mobile pouvant être exprimées comme un couple {x, y} :
- 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 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 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 que tous les accès réalisés à travers la fenêtre mobile ont été fait :
B15478
- 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 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 gui pourraient s'y trouver en attentes.
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.
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 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.
Considérations sur le temps de traversée de la logique réalisant 1'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 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 mobile peut être exprimées par un couple {x, y} :
- x étant un numéro de page,
B15478
- 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.
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 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 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.
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 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 :
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 lecture pour les cache DRAM : assure que toutes les données lues
B15478 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 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 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, 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 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).
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.
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 DCW_BARRIER(start_addr, end_addr).
B15478
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:
- 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
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 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. 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.
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 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,
- la politique de remplacement.
B15478
Analyse du cache DRAM via 1'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 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.
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. 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 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 bancs.
B15478

Claims (18)

  1. REVENDICATIONS
    1. Système de calcul comprenant :
    un dispositif de calcul (102) ayant un ou plusieurs cœurs de traitement (108) sous commande d'instructions et un contrôleur mémoire (112), le contrôleur mémoire comprenant une 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 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.
  2. 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 (N+P)ième opérations d'accès au premier emplacement mémoire.
  3. 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 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 d'écriture.
  4. 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
    B15478 deuxième valeur à p bits de l'adresse dans le premier emplacement mémoire.
  5. 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. 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. 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 (R0) 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 d'adresses (RI) 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 conversion d'adresses (122) adapté à convertir des adresses dans les première et deuxième plages d'adresses (R0, RI) vers des adresses correspondantes dans la fenêtre d'adresses glissante (305).
  8. 8. Système de calcul selon la revendication 7, dans 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. 9. Système de calcul selon la revendication 8, dans lequel ledit au moins un registre (124) du circuit de conversion d'adresses (122) est programmable pour définir l'emplacement et la taille de la fenêtre d'adresses glissante (305).
    B15478
  10. 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 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 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 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. 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. 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. 13.Système de calcul selon la revendication 6, dans lequel le circuit mémoire (104) comprend en outre un processeur
    B15478 auxiliaire (118), les premier et deuxième emplacements mémoire étant des registres de commande du processeur auxiliaire.
  14. 14.Système de calcul selon la revendication 13, dans lequel le dispositif de calcul (102) est configuré pour générer 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 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. 15.Système de calcul selon la revendication 14, dans lequel le circuit mémoire (104) est 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.
  16. 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 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. 17.Système de calcul selon l'une quelconque des revendications 1 à 16, dans lequel le circuit mémoire (104) comprend une matrice mémoire non volatile.
  18. 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 cœurs de traitement (108) et le contrôleur mémoire comprenant une mémoire (114) cache, le procédé comprenant :
    B15478 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).
    100
    1/2
    102
    104
    112
FR1658373A 2016-09-08 2016-09-08 Methodes et dispositifs pour contourner le cache interne d'un controleur memoire dram evolue Active FR3055715B1 (fr)

Priority Applications (6)

Application Number Priority Date Filing Date Title
FR1658373A FR3055715B1 (fr) 2016-09-08 2016-09-08 Methodes et dispositifs pour contourner le cache interne d'un controleur memoire dram evolue
PCT/FR2017/052368 WO2018046850A1 (fr) 2016-09-08 2017-09-06 Methodes et dispositifs pour contourner le cache interne d'un controleur memoire dram evolue
US16/331,429 US11494308B2 (en) 2016-09-08 2017-09-06 Methods and devices for bypassing the internal cache of an advanced DRAM memory controller
KR1020197009869A KR102398616B1 (ko) 2016-09-08 2017-09-06 진보한 dram 메모리 컨트롤러의 내부 캐시를 우회시키기 위한 방법 및 장치
JP2019513044A JP2019531546A (ja) 2016-09-08 2017-09-06 高度dramメモリコントローラの内部キャッシュをバイパスするための方法および装置
CN201780062063.1A CN109952567B (zh) 2016-09-08 2017-09-06 用于旁通高级dram存储器控制器的内部高速缓存的方法和装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR1658373A FR3055715B1 (fr) 2016-09-08 2016-09-08 Methodes et dispositifs pour contourner le cache interne d'un controleur memoire dram evolue
FR1658373 2016-09-08

Publications (2)

Publication Number Publication Date
FR3055715A1 true FR3055715A1 (fr) 2018-03-09
FR3055715B1 FR3055715B1 (fr) 2018-10-05

Family

ID=57750074

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1658373A Active FR3055715B1 (fr) 2016-09-08 2016-09-08 Methodes et dispositifs pour contourner le cache interne d'un controleur memoire dram evolue

Country Status (6)

Country Link
US (1) US11494308B2 (fr)
JP (1) JP2019531546A (fr)
KR (1) KR102398616B1 (fr)
CN (1) CN109952567B (fr)
FR (1) FR3055715B1 (fr)
WO (1) WO2018046850A1 (fr)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7218556B2 (ja) * 2018-12-06 2023-02-07 富士通株式会社 演算処理装置および演算処理装置の制御方法
US11481255B2 (en) * 2019-09-10 2022-10-25 International Business Machines Corporation Management of memory pages for a set of non-consecutive work elements in work queue designated by a sliding window for execution on a coherent accelerator
US11403111B2 (en) 2020-07-17 2022-08-02 Micron Technology, Inc. Reconfigurable processing-in-memory logic using look-up tables
US11355170B1 (en) 2020-12-16 2022-06-07 Micron Technology, Inc. Reconfigurable processing-in-memory logic
US11868657B2 (en) * 2021-02-08 2024-01-09 Samsung Electronics Co., Ltd. Memory controller, method of operating the memory controller, and electronic device including the memory controller
US11354134B1 (en) * 2021-03-25 2022-06-07 Micron Technology, Inc. Processing-in-memory implementations of parsing strings against context-free grammars
US11921634B2 (en) * 2021-12-28 2024-03-05 Advanced Micro Devices, Inc. Leveraging processing-in-memory (PIM) resources to expedite non-PIM instructions executed on a host

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5361391A (en) * 1992-06-22 1994-11-01 Sun Microsystems, Inc. Intelligent cache memory and prefetch method based on CPU data fetching characteristics
US5459856A (en) * 1991-12-06 1995-10-17 Hitachi, Ltd. System having independent access paths for permitting independent access from the host and storage device to respective cache memories
EP0886216A1 (fr) * 1997-06-06 1998-12-23 Texas Instruments Incorporated Microprocesseur comprenant des moyens de stockage de données non-antémémorisables
WO2000055734A1 (fr) * 1999-03-17 2000-09-21 Rambus, Inc. Procede et controleur de memoire a blocs dependants
FR3032814A1 (fr) * 2015-02-18 2016-08-19 Upmem

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6734867B1 (en) * 2000-06-28 2004-05-11 Micron Technology, Inc. Cache invalidation method and apparatus for a graphics processing system
US6983354B2 (en) * 2002-05-24 2006-01-03 Micron Technology, Inc. Memory device sequencer and method supporting multiple memory device clock speeds
US20060090034A1 (en) * 2004-10-22 2006-04-27 Fujitsu Limited System and method for providing a way memoization in a processing environment
JP3938177B2 (ja) * 2004-10-29 2007-06-27 キヤノン株式会社 データ処理装置及びデータ処理装置におけるメモリ割り当て方法
US8253751B2 (en) * 2005-06-30 2012-08-28 Intel Corporation Memory controller interface for micro-tiled memory access
JP2007249314A (ja) * 2006-03-14 2007-09-27 Yaskawa Electric Corp 高速データ処理装置
US7975109B2 (en) * 2007-05-30 2011-07-05 Schooner Information Technology, Inc. System including a fine-grained memory and a less-fine-grained memory
US8386723B2 (en) * 2009-02-11 2013-02-26 Sandisk Il Ltd. System and method of host request mapping
JP5526697B2 (ja) * 2009-10-14 2014-06-18 ソニー株式会社 ストレージ装置およびメモリシステム
US10020036B2 (en) * 2012-12-12 2018-07-10 Nvidia Corporation Address bit remapping scheme to reduce access granularity of DRAM accesses
US9075557B2 (en) * 2013-05-15 2015-07-07 SanDisk Technologies, Inc. Virtual channel for data transfers between devices
US9208103B2 (en) * 2013-09-26 2015-12-08 Cavium, Inc. Translation bypass in multi-stage address translation
CN105706071A (zh) * 2013-09-26 2016-06-22 英特尔公司 持久性存储器的块存储孔
US9690928B2 (en) * 2014-10-25 2017-06-27 Mcafee, Inc. Computing platform security methods and apparatus
EP3018587B1 (fr) * 2014-11-05 2018-08-29 Renesas Electronics Europe GmbH Unité d'accès mémoire

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5459856A (en) * 1991-12-06 1995-10-17 Hitachi, Ltd. System having independent access paths for permitting independent access from the host and storage device to respective cache memories
US5361391A (en) * 1992-06-22 1994-11-01 Sun Microsystems, Inc. Intelligent cache memory and prefetch method based on CPU data fetching characteristics
EP0886216A1 (fr) * 1997-06-06 1998-12-23 Texas Instruments Incorporated Microprocesseur comprenant des moyens de stockage de données non-antémémorisables
WO2000055734A1 (fr) * 1999-03-17 2000-09-21 Rambus, Inc. Procede et controleur de memoire a blocs dependants
FR3032814A1 (fr) * 2015-02-18 2016-08-19 Upmem

Also Published As

Publication number Publication date
CN109952567A (zh) 2019-06-28
US20210349826A1 (en) 2021-11-11
KR102398616B1 (ko) 2022-05-16
FR3055715B1 (fr) 2018-10-05
WO2018046850A1 (fr) 2018-03-15
JP2019531546A (ja) 2019-10-31
US11494308B2 (en) 2022-11-08
CN109952567B (zh) 2023-08-22
KR20190067171A (ko) 2019-06-14

Similar Documents

Publication Publication Date Title
FR3055715A1 (fr) Methodes et dispositifs pour contourner le cache interne d&#39;un controleur memoire dram evolue
US20190243558A1 (en) Two-level system main memory
US9552220B2 (en) Method and apparatus of accessing data of virtual machine
CN104025060B (zh) 支持近存储器和远存储器访问的存储器通道
CN104115129B (zh) 用于从处理器到存储器子系统智能刷新数据的系统和方法
JP2018133086A5 (fr)
US10203878B2 (en) Near memory accelerator
FR2624994A1 (fr) Systeme de commande de registre intermediaire de traduction
CN103999161A (zh) 用于相变存储器漂移管理的设备和方法
FR3023030A1 (fr)
US10216437B2 (en) Storage systems and aliased memory
EP3293637A1 (fr) Gestion d&#39;index dans une mémoire flash
FR2805368A1 (fr) Systeme et procede utilisant l&#39;acces speculatif a l&#39;antememoire pour des performances ameliorees
JP7038656B2 (ja) キャッシュへのアクセス
EP2666092B1 (fr) Systeme multi-coeurs et procede de coherence de donnees
FR2609195A1 (fr) Procede de gestion d&#39;antememoires associees a des processeurs dans une architecture multiprocesseur a bus unique et systeme de traitement de donnees fonctionnant suivant ce procede
US20230342049A1 (en) Reading a master boot record for a namespace using a regular read operation
EP2652624B1 (fr) Procede, programme d&#39;ordinateur et dispositif de gestion d&#39;acces memoire dans une architecture multiprocesseurs de type numa
US20240045597A1 (en) Storage device and operation method thereof
US20230359550A1 (en) File system integration into data mining model
KR20170042522A (ko) 비식별 요청을 처리하는 저장 장치 및 그것의 동작 방법

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 2

PLSC Publication of the preliminary search report

Effective date: 20180309

PLFP Fee payment

Year of fee payment: 3

PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8