• Aucun résultat trouvé

autres la STT-MRAM . Les résultats montrent que le cas i) fournit la meilleure efficacité énergétique (caractérisée par l’EDP) mais des temps d’exécution très élevés du fait de la forte sollicitation de la mémoire cache L1-D par le processeur. Malgré une mémoire cache L1-D optimisé pour les écritures, la SRAM reste plus rapide. Dans le cas ii), la performance est très proche de la SRAM tandis que l’efficacité énergétique est améliorée de manière significative.

Pour influencer le temps de rétention, Jog et al. [50] diminuent la surface de la Free- Layermais également son épaisseur. De plus, les auteurs proposent de diminuer l’aiman- tation de la couche magnétique pour accentuer la réduction du temps de rétention. Afin de trouver le temps de rétention adéquat, Jog et al. mènent une analyse centrée sur les ap- plications. Les écritures des benchmark PARSEC et SPEC CPU2006 sont monitorées sur différentes niveaux de caches pour établir le temps moyen entre deux utilisations d’une même donnée. Ce délai indique le temps de rétention minimal que la cellule MTJ doit fournir. Pour assurer que les données ne seront pas perdues si le temps de rétention est dépassé, les auteurs proposent d’ajouter un compteur de 2nbits à chaque bloc de la mé-

moire cache cache. Ce compteur caractérise l’état d’utilisation du bloc. Une valeur de 0 indique que le bloc vient d’être amené dans le cache, une valeur de 2n1 indique que

le bloc va bientôt être perdu. Ce compteur est incrémenté automatiquement selon une période définie. Lorsque la valeur maximale est atteinte, une transaction d’écriture de ce bloc vers une mémoire temporaire est envoyée afin de sauvegarder la valeur. Les résultats expérimentaux montrent une forte diminution de la consommation énergétique et une amélioration des performances de l’ordre de 10%.

moire cache ont différentes périodes de rétention. Par exemple, sur un cache 16 associatif, le way 0 est optimisé pour les latences avec un faible temps de rétention, tandis que les 15autres ways ont des temps de rétention plus élevés. Ils utilisent ensuite des compteurs matériels pour détecter si un bloc est plus souvent accédé en écriture qu’en lecture. Les blocs dominés par les écritures sont alloués dans le way 0. Pour éviter la perte de don- nées dans le way 0, un mécanisme de migration est mis en place pour déplacer les blocs sur d’autres lignes avec de plus longues périodes de rétention. Dans le cas d’un cache bas niveau comme le L1-D, les cellules sont optimisées de manière à diminuer la latence d’écriture et l’énergie. Le temps de rétention est alors de quelques micro-secondes. Un mécanisme de rafraîchissement basé sur des compteurs matériels est mis en place et seuls les blocs en fin de vie sont rafraichis pour éviter la perte de données.

Considérant un cache avec des temps de rétention différents en fonction des lignes, Bou- ziane et al. [15] proposent de calculer le Partial Worst-Case Execution Time (pWCET) entre l’écriture d’une donnée et la prochaine lecture de celle-ci. Cela permet de déterminer quel est le temps minimal pour lequel le cache doit conserver une donnée avant qu’elle ne soit ré-utilisée. Ce calcul est effectué à la compilation de manière statique. Avec cette infor- mation, il est possible de guider le placement des données dans les lignes de la mémoire cache en fonction des temps de rétention.

Remarques

Les approches présentées ici nécessitent une modification profonde de la technologie. Or, les informations disponibles sur la maturité de la STT-MRAM chez les industriels sont très difficiles d’accès. Les travaux sont alors basés sur des modèles et des extrapolations dont on peut remettre en question la justesse.

La modification de la cellule MTJ se fait au prix d’une période de rétention plus faible, voire extrêmement faible (quelques ns). En cas de défaillance du mécanisme de contrôle de rétention, il y aurait une inconsistance dans les données manipulées et de potentielles erreurs dans les calculs.

3.3.2 Optimisations au niveau circuit

Zhou et al. [121] ont développé une méthode appelé Early Write Termination (EWT) pour diminuer le nombre de bits redondant sur les cellules STT-MRAM. On entend par redondant le fait d’écrire une valeur qui est déjà présente. Lorsqu’une opération d’écri- ture est effectuée sur une MTJ, la résistance de la cellule ne change pas au fur et à mesure du temps. Au contraire, elle s’inverse brutalement à la fin de l’opération. Avant ce chan- gement, la cellule contient donc la valeur initiale avant écriture. Cette valeur est alors lue

Pattern 1 00000000000000000000000000000000 Pattern 2 00000000000000000000000000000001 Pattern 3 00000000000000000000000000000010 Pattern 4 00000000000000000000000000000100 ... ... Pattern 31 00100000000000000000000000000000 Pattern 32 01000000000000000000000000000000 Pattern 33 10000000000000000000000000000000

Tableau 3.2 – Système d’encodage implémenté par Yazdanshenas et al.

en parallèle de l’écriture, et s’il s’avère qu’elle est identique à celle qui est en train d’être écrite, alors la transaction est interrompue.

Yazdanshenas et al. [118] proposent une optimisation au niveau du circuit pour ré- duire la probabilité d’une inversion de bit dans une cellule MTJ. Pour cela, ils réduisent la probabilité pour les cellules mémoires de contenir la valeur 1, qui implique un état de résistance fort se dégradant au fur et à mesure du temps. Ils ont étudié l’évolution des don- nées écrites dans le cache pour les applications de la suite PARSEC et ont remarqué que, en considérant des blocs de 4 octets, il existe 33 valeurs qui sont majoritairement utilisées. Ainsi, chacune de ses valeurs est encodée dans un format particulier limitant le nombre de 1 en utilisant une distance de Hamming de 2 au maximum entre deux nombres. Ce système d’encodage est décrit par le tableau 3.2. Ainsi, pour chaque nouvelle écriture, il existe une forte probabilité que seuls 2 bits soient écrits sur les 32 qui composent le bloc. Pour empêcher les écritures inutiles, cette approche est combinée avec l’approche EWT de Zhou et al..

Remarques

Ces propositions impliquent de monitorer l’état des cellules MTJ ou d’encoder ou de décoder chaque octet lu ou écrit. Bien que le surcoût matériel soit faible, il faut modifier les cellules MTJ pour ajouter les contrôleurs de lecture et d’écriture. De la même manière que les approches technologiques, la modification des cellules MTJ est une tâche complexe nécessitant un accès privilégié à des informations industrielles afin de valider l’approche expérimentalement. Enfin, ces techniques nécessitent de descendre au niveau du circuit de la mémoire cache, ce qui n’est pas l’approche que nous considérons pour nos travaux.

3.3.3 Caches hybrides

Un cache hybride est un cache utilisant deux technologies de mémoire. Cette approche est possible avec certaines NVM qui sont compatibles CMOS. Le principe est le suivant. Les données sont caractérisées en fonction de leur taux de lecture et d’écriture. Soit une donnée est plus souvent lue, soit elle est plus souvent écrite. Ensuite, les auteurs se servent de cette information pour placer la donnée dans la partie SRAM ou la partie NVM de la mémoire cache. Si une donnée est plus fréquemment lue, alors on la placera dans la partie NVM. En effet, le temps de lecture est sensiblement le même que la SRAM. En revanche, si une donnée est très fréquemment écrite, alors elle sera placée dans la partie SRAM de la mémoire cache. Cela limitera les latences en écriture et leur coût énergétique.

Li et al. [63] ont proposé une approche appelée SPD (software dispatch). Cette technique repose sur le compilateur est le système d’exploitation pour capturer le schéma d’accès aux données. En se basant sur cette détection, le système d’exploitation peut guider le cache pour placer les données. Celles-ci sont distribuées sur les parties SRAM et NVM selon le schéma évoqué précédemment pour diminuer le temps d’exécution et la consom- mation énergétique. Cette proposition est illustrée par la Figure 3.6.

Lors de la compilation, une passe de détection des accès mémoire sous forme de ta- bleaux est effectuée. Le compilateur est également utilisé pour détecter les structures de données chainées via l’utilisation de graphes. Tous ces accès à la mémoire sont analysés et une instruction est insérée lors de la compilation avant ces accès pour guider le placement dans l’une ou l’autre partie de la mémoire cache. Lors de l’évaluation, Li et al. ont montré que leur approche diminue le temps d’exécution de 5% et la consommation énergétique de 10%.

Bien que ces résultats soient intéressants, cette proposition nécessite une mise en place assez coûteuse au-dessus du matériel. Le compilateur doit être modifié pour analyser le code source, impliquant de recompiler les applications pour bénéficier de cette technique. De plus, cela implique que le compilateur doit avoir la connaissance de la technologie de cache qui est dans le processeur. Cela brise la couche d’abstraction qui existe entre le compilateur et la technologie matérielle sous-jacente. L’allocateur mémoire du système d’exploitation doit également être modifié, et une nouvelle instruction CPU ajoutée. En- fin, cette approche est une approche dite statique. Elle repose sur une analyse du code source avant l’exécution du programme, et aucune nouvelle décision ne peut être prise durant l’exécution. Cela empêche toute adaptabilité du matériel quant au comportement de l’application.

NVM

SRAM

Données lues Données écrites Requête CPU Répartiteur - Migrateur Analyse du compilateur