IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Direct-mapped cache ?


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut Direct-mapped cache ?
    Bonsoir,

    J'ai lu plusieurs publications qui parlaient d'un "direct-mapped cache" afin d'optimiser l'accès à des variables souvent utilisées, mais j'ai du mal à comprendre comment ceci est implémenté, d'un point du vue du code. Est-ce implémenté comme un "bête" cache LRU ou MRU, ou est-ce plus compliqué ?

    Merci

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Bakura Voir le message
    Est-ce implémenté comme un "bête" cache LRU ou MRU, ou est-ce plus compliqué ?
    Le "direct-mapped" consiste a avoir une "formule mathematique" pour calculer directement la position dans le cache de n'importe quelle adresse possible.

    Bien sur, le cache étant plus petit que l'espace d'adressage, certaines adresses auront la même position dans le cache. Cela implique:

    1. en cas de collision, c'est la dernière adresse qui est conservée dans le cache. Il faut donc une formule de calcul qui minimise les collisions, ou alors utiliser des adresses tenant compte de la formule utilisée.

    2. il faut une info dans le cache, en plus de la valeur, pour savoir quelle adresse (parmis celles pouvant générer une collision) est stockée actuellement. Cette info est appelée "tag".

    Donc cela donne quelque chose comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    setcache(adresse,valeur) {
      int position = F(adresse);
      cache[position].valeur =  valeur;
      cache[position].tag =  Tag(adresse);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    getcache(adresse) {
      int position = F(adresse);
      int tag = Tag(adresse);
      if (cache[position].tag != tag) return null;
      return cache[position].valeur;
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Merci de la réponse. Mais j'ai du mal à comprendre comment ça fonctionne concrètement. Imagine que j'ai un tableau de taille fixe de 32 éléments, quelle différence entre cette approche et celle d'accéder directement à un élément du tableau ?

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Bakura Voir le message
    quelle différence entre cette approche et celle d'accéder directement à un élément du tableau ?
    ?

    Je ne comprend pas ta question. Le "direct-mapped" accéde directement à un élément du tableau, à la différence d'une méthode type "hash map" dans laquelle on calcule un "hash" puis où l'on parcourt toute la structure du cache pour trouver l'entrée ayant le meme hash.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Ok. En gros ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maStructure tab[32];
    maStructure s1 = tab[3];
    Ceci est donc un direct-mapped cache ? En fait si je comprends ce que tu dis, c'est juste un "bête" tableau, dans lequel on dispose juste d'une fonction pour retrovuer l'indice correspondant ?

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Bakura Voir le message
    Ceci est donc un direct-mapped cache ? En fait si je comprends ce que tu dis, c'est juste un "bête" tableau, dans lequel on dispose juste d'une fonction pour retrovuer l'indice correspondant ?
    heu... oui, c'est ca : on dispose d'une fonction pour calculer l'indice correspondant.

    Cependant, comme je l'ai dit, on ne stocke pas seulement la "valeur" dans le tableau mais également le "tag" pour savoir quelle adresse y est stockée (a cause des collisions dues à la formule de calcul).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cache direct exercice(help)
    Par seichan94 dans le forum Assembleur
    Réponses: 9
    Dernier message: 16/01/2014, 10h56
  2. [Google Maps] Adresse Google Map pour avoir directement itineraire à velo ou à pied
    Par philou8 dans le forum APIs Google
    Réponses: 1
    Dernier message: 11/10/2013, 10h26
  3. [HTML] Directives HTML : <map name="">
    Par CyranOrion dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/04/2009, 16h09
  4. [DX9][C#]Direct Input - Action mapping
    Par Imhotep dans le forum DirectX
    Réponses: 4
    Dernier message: 06/07/2006, 23h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo