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

Assembleur Discussion :

Employer le cache processeur


Sujet :

Assembleur

  1. #1
    Débutant
    Employer le cache processeur
    Bonjour,

    est-il possible d'employer le cache processeur en langage assembleur ?

  2. #2
    Expert éminent
    Non
    Plus sérieusement pour toi c'est quoi la mémoire cache ?
    Pour moi c'est une mémoire RAM/SRAM plus rapide parce que elle a une distance (physique j’entends) plus proche du processeur que la RAM ordinaire.
    Et donc en gros faut juste connaître la mémory map pour savoir (si elle existe , elle n'existe pas sur tout les processeurs) et donc en gros elle est aussi accessible en C et C++.
    D'ailleurs la seule chose que l'asm fait plus que le C ce sont les instructions spécifiques (mais comme elle sont utilisé de manière rare on peut s'en passé a 98%).

  3. #3
    Membre chevronné
    C'est le processeur qui gère la mémoire cache.
    Au mieux on peut la remettre à zéro volontairement.
    Donc sans rien faire, ton programme assembleur va utiliser la mémoire cache
    par contre, pour une utilisation optimale de cette dernière, il faut privilégier de boucles courtes, et des données placées en continu.

  4. #4
    Débutant
    Le processeur intègrerait un logiciel d'analyse de fréquence d'apparition de portion de code ça me parait gros, j'aimerais moi même gérer le cache, Kannagi tu dis que ce serait possible, quelqu'un aurait du code à me montrer ?

  5. #5
    Expert éminent
    Il est probable aussi que Forthman a raison.

    j'aimerais moi même gérer le cache, Kannagi tu dis que ce serait possible, quelqu'un aurait du code à me montrer ?
    j'ai peut être parlé trop vite , je parlais dans le sens si elle était accessible , elle serait accessible via une adresse en mémoire (laquelle aucune idée ça serait complètement arbitraire).

    Ma question est pourquoi veut tu faire cela ? (c'est vrai que de nos jours les CPU sont un peu trop long )
    Je dis cela parce que bossant avec des processeurs ne possédant pas de mémoire cache, pas de pipeline et des instructions multicycle , j'arrive a en faire je que j'en veux :p

  6. #6
    Membre confirmé
    Pour moi c'est le CPU qui gère la mémoire cache. La seule chose que l'on puisse faire c'est de vider la cache pour forcer processeur à mettre en cache les prochains accès mémoire.

  7. #7
    Débutant
    Comment le processeur détermine-t'il ce qu'il met en cache ou non ?

  8. #8
    Membre chevronné
    un petit toute sur wikipedia : https://fr.wikipedia.org/wiki/M%C3%A9moire_cache

  9. #9
    Débutant
    Et en c++ est-il possible d'employer la mémoire cache du processeur ? Elle me serait très utile pour un programme qui avec le mécanisme du cache que je vois décrit un peu partout ne pourrait pas avoir autant de bénéfice que si moi je l'employais à ma façon.

  10. #10
    Responsable Systèmes

    Comme déjà expliqué, c'est l’électronique du CPU qui gère son cache, tu peux juste l'invalider.

    Comment le processeur détermine-t'il ce qu'il met en cache ou non ?
    Il fait sa sauce avec les algorithmes de prédiction de branchement.

    Si tu veux optimiser ton code, il te faut faire en sorte que ta façon de programmer génère le moins possible de prédictions de branchements. Le compilateur C le fera beaucoup mieux que toi.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutor...s/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  11. #11
    Membre éclairé
    Cache cache
    Bonjour,

    Tardivement je découvre ce sujet peut être éventé.

    Si on ne peut pas gérer finement les caches des CPU, il y a des ordres qui permettent d'influer son comportement.

    Quand nous accédons à une donnée en mémoire, le CPU va la chercher (et nous fait attendre). Mais il ne fait pas que cela, il charge en fait une ligne de données (hélas de taille variable selon les CPU). L'idée est qu'il est probable que des données voisines soient également demandées dans le process en cours. Auquel cas les accès suivants (dans la limite de la ligne de cache chargée) sont bien plus rapides. Bien sûr, quand la ligne est épuisée, nous avons droit à nouveau à des délais d'accès mémoire.

    Il serait bien utile de pouvoir précharger une ligne d'avance. Le temps d'accès est alors masqué puisque nous n'avons pas besoin tout de suite des données.

    Justement, il y a des ordres pour cela, ce sont les prefetch. Il y en un par niveau de cache. Il faut savoir que ce sont plus des prières au CPU que des ordres. Le CPU peut très bien ne pas l'exécuter.
    Ainsi, sur le cache de premier niveau le prefetch est rarement exécuté. Le niveau 2 est assez souvent servi et le niveau 3 plus encore. Avec le niveau 2 dans les traitements d'images, je peux gagner entre 5 et 8%. Pas mal pour seulement 2 ou 3 instructions supplémentaires (en plus du prefetch, il faut pré-calculer la future adresse).

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  12. #12
    Expert éminent
    Une ligne de cache fait normalement 32 octets sur les intel/AMD donc oui si on code un peu intelligemment on peut optimiser !
    D'ailleurs j'avais remarqué que GCC optimise le code asm pour la mémoire cache.

    Mais d'autre processeur (comme le CELL) permet de charger la mémoire en même temps que l’exécution et donc s'approcher grandement des chiffres théoriques !
    (il suffit de faire la technique de double buffer , pendant qu'on exécute on charge les données du prochain bloc , ainsi de suite).