Discuter:Mémoire cache

Un article de Wikipédia, l'encyclopédie libre.

Sommaire

[modifier] Il n'y a pas que des mémoires cache

Drôle d'idée d'avoir redirigé Cache vers Mémoire cache. Le concept de cache en informatique est très général et n'est pas limité aux mémoires. Le Wikipédia anglophone n'a pas cette erreur (cf. en:Cache). J'envisage de supprimer la redirection et d'écrire un article Cache général. Avis ? --Bortzmeyer 18 octobre 2006 à 10:41 (CEST)

Excellente idée, j'approuve. eberkut 8 janvier 2007 à 12:45 (CET)

[modifier] Question

Ptite question: Le cache de second niveau, il n'est pas A COTE du processeur ?

Ca depend, des fois oui, des fois non. Plus d'explication à l'adresse suivante: http://www.hardware.fr/articles/136/page1.html Tibo 11:38 déc 6, 2002 (CET)

Autre question: Invente a grenoble ? Referecence de l article svp ?

[modifier] différence avec mémoire tampon

Le paragraphe que je viens d'ajouter s'inspire de celui-ci, en le nuançant :

while data in the page cache is reused multiple times, the data in the disk buffer is typically never reused. In this sense, the phrases disk cache and cache buffer are misnomers, and the embedded computer's memory is more appropriately called the disk buffer. en:Hard_disk#Access_and_interfaces--Teofilo-Folengo 10 mar 2005 à 16:01 (CET)

une remarque pour ce qui est de l'exemple avec la boucle en C qui "tient en cache"

Pour ce qui est des données, elles ne seront pas dans le L1, elle seront dans un registre. Pour ce qui est des instructions elles seront très probablement dans le L1.

Tout ça pour dire que l'exemple est soit trop précis (pas assez d'explication sur le DATA cache et l'instruction cache) soit faux, les données sont dans les registres.

Puis-je suggérer une modification:

Premièrement on met un exemple qui tient en cache en utilisant un tableau et pas une variable

//tableau de 1024 entiers qui tiennent normalement dans les caches L1 typiquement une 10aine de ko, là où 1024 entiers (sur une machine où l'entier est codé sur 32bits) consommeront 4ko.

int monTableau[1024]; 
int somme=0;
/*initialisation du tableau*/
for (i=0;i<1024;i++)
  monTableau[i]=i;
/*calcule de la somme des éléments du tableau*/
for (i=0;i<1024;i++)
  somme+=monTableau[i];

A noter que l'entier somme sera très probablement caché dans un registre. Le fait que monTableau soit de taille < taille du cache L1 garantit que le processeur effectura les 1024 sommes sans jamais accéder réellement la mémoire.

A noter que l'entier somme sera très probablement caché dans un registre.
Certainement pas.
Un registre n'est pas un cache. C'est une mémoire non-adressable qui doit être utilisée explicitement en langage assembleur.
Le cache mémoire (L1, L2, L3), le cache disque sont utilisés automatique quand on accède à la RAM ou aux fichiers respectivement.
--Wcorrector (d) 24 novembre 2007 à 05:51 (CET)

[modifier] Cacher : mot ambigü

Quel serait un bon équivalent au terme "cacher" (dans le sens "placer en mémoire cache"), pour ne pas le confondre avec masquer, camoufler ? Serge Hartmann

Cacher avec ce sens est-il déjà dans le dictionnaire français vu qu'inspiré d'un mot anglais, ça ressemble plustôt à du franglais.
Désolé je n'ai pas compris ta réponse, peux-tu la reformuler ? Serge Hartmann
Je crois qu'il demande si cacher peut avoir ce sens en français, selon les « décideurs » du dictionnaire (personnellement je trouve ça un peu laid, mais bon). « Antémémoriser » ? Mort de rire Ayadho 28 décembre 2006 à 18:55 (CET)

[modifier] Qustion

qu'est ce que ca vous dire : memoire cache et le BIOS

[modifier] Producteur plus lent que le consommateur : pas de sens

on peut en trouver entre tout fournisseur de données (réseau informatique, disque dur, mémoire principale) plus lent que l'élément demandeur (processeur par exemple).

Plus lent comment ?

Plus lent en débit ? C'est quoi le débit du processeur ? Ce qu'il peut accepter comme données entrantes (aucun sens dans le cas du DMA) ? Ce que le programme peut traiter ?

Plus lent en temps d'accès ? C'est quoi le temps d'accès du processeur à un secteur disque ?

Ça n'a vraiment aucun sens.

Du point de vue du traitement complet d'une information : même je dois faire deux opérations A puis B (A ; B), et que l'opération B est 10 fois plus longue que l'opération A, je gagne quelque chose à éviter de refaire plusieurs fois la même opération A grâce à un cache.

--Wcorrector (d) 24 novembre 2007 à 06:31 (CET)

Je suis en général d'accord avec tes modifications, sauf ici. La formulation me paraissait à la fois claire, générale et pertinente, même si on peut sans doute l'améliorer. Une mémoire cache est une petite mémoire rapide qui sert à donner l'illusion qu'un gros fournisseur de données lent, est rapide. La différence de performances est centrale au concept de cache. La notion de réutilisation, voire de localité des données (ou une notion généralisée pour une cache de ressources réseau), l'est aussi. Marc Mongenet (d) 24 novembre 2007 à 07:24 (CET)
Je suis en général d'accord avec tes modifications,
Merci !
sauf ici.
Ah.
La formulation me paraissait à la fois claire, générale et pertinente, même si on peut sans doute l'améliorer.
Je n'ai pas un problème avec la formulation en français, mais avec le principe même de la comparaison qui est faite par cette phrase : elle parlait de vitesse relative du processeur (demandeur) et de la mémoire (fournisseur), ce qui selon moi n'a pas de sens (si on considère l'envoie/réception d'une unité d'information), ou bien est faux (si on considère le calcul que le processeur doit effectuer, il peut être plus long que ce qu'il a fallu à la mémoire pour envoyer cette information).
Par exemple si je consulte une page Web complexe avec une connexion Internet haut débit, il n'est pas invraisemblable que le temps de téléchargement soit inférieur au temps de traitement par le navigateur (décodage et rendu), autrement-dit que la vitesse d'accès à la mémoire (le serveur HTTP) soit inférieur à la vitesse du processeur qui a demandé l'information (le navigateur). Pourtant c'est quand même un avantage d'utiliser un cache disque plutôt que de re-télécharger tout tout le temps.
L'exemple peut paraitre absurde, mais pour moi le fait même de comparer une mémoire et un processeur n'a pas de sens.
Une mémoire cache est une petite mémoire rapide qui sert à donner l'illusion qu'un gros fournisseur de données lent, est rapide.
Entièrement d'accord. Tu compares deux mémoires différentes. Le texte que j'ai supprimé comparait la mémoire et le processeur.
La différence de performances est centrale au concept de cache.
Oui, l'amélioration que l'on a en utilisant une mémoire rapide au lieu d'une mémoire lente : c'est pourquoi j'ai gardé ceci en intro:
"En informatique, une mémoire cache ou antémémoire est une mémoire relativement rapide qui stocke les informations les plus utilisées d'une autre mémoire plus grande et plus lente. Elle sert à accélérer les traitements."
Effectivement j'ai retiré 'petite'. Sans bonne raison (j'ai été choqué à l'idée que la RAM qui sert de cache disque est petite, mais elle est bien plus petite que le disque).
Je remets petite dans l'introduction :
"une mémoire cache ou antémémoire est une mémoire relativement petite et rapide qui stocke les informations les plus utilisées d'une autre mémoire plus grande et plus lente."
La notion de réutilisation, voire de localité des données (ou une notion généralisée pour une cache de ressources réseau), l'est aussi.
Dans le cas d'un cache HTTP, il y a une notion de quasi-atomicité d'une ressource désignée par une URL (on peut en demander une partie avec Range mais c'est très rare).
--Wcorrector (d) 24 novembre 2007 à 09:34 (CET)

[modifier] Cohérence des caches séparés

Néanmoins, les caches séparés introduisent des problèmes de cohérence entre les deux caches, notamment pour les codes qui se modifient.

Oui, par définition. C'est le principe même de la séparation du cache de code que de faire l'hypothèse que le code n'est pas auto-modifiant.

De plus, il est également possible qu'une même ligne de mémoire principale

Ligne de cache plutôt ?

contienne des instructions et des données. Ainsi, il y a une copie de cette ligne dans chaque cache, ceci pouvant créer des problèmes de cohérence entre les deux caches (i.e. les deux mémoires n'ont pas les mêmes données,

En quoi est-ce un problème de cohérence ? Le cache de code n'a pas besoin d'avoir une version à jour des données que je sache.

chacun n'ayant qu'une partie (qui peut être nulle) à jour de la ligne).

Comment le cache de donné pourrait ne pas avoir une information entièrement à jour ?

Comment le cache de code pourrait n'avoir aucune information à jour si la ligne contient du code et que le code n'est pas auto-modifiant (cas mentionné précédemment, et qui pose problème que la même ligne de cache mélange code et données ou pas).

Je supprime les assertions citées (sauf la première !).

--Wcorrector (d) 24 novembre 2007 à 06:14 (CET)