33 votes

Cache ou registres - lequel est le plus rapide ?

Je suis désolé si ce n'est pas le bon endroit pour poser cette question, mais j'ai cherché et j'ai toujours trouvé des réponses différentes. Ma question est la suivante :

Lequel est le plus rapide ? Cache ou registres du CPU ?

Selon moi, les registres sont ce qui charge directement les données pour les exécuter tandis que le cache est juste un lieu de stockage proche ou interne au CPU.

Voici les sources que j'ai trouvées et qui me déroutent :

2 pour le cache | 1 pour les registres

http://in.answers.yahoo.com/question/index?qid=20110503030537AAzmDGp

Le cache est plus rapide.

http://wiki.answers.com/Q/Is_cache_memory_faster_than_CPU_registers

Alors, laquelle est vraiment la bonne ?

53voto

Hans Passant Points 475940

Le registre du CPU est toujours plus rapide que le cache L1. C'est le plus proche. La différence est d'environ un facteur 3.

J'essaie de rendre cette question aussi intuitive que possible sans me perdre dans la physique qui la sous-tend : il existe une corrélation simple entre la vitesse et la distance en électronique. Plus vous faites voyager un signal, plus il est difficile de le faire parvenir à l'autre extrémité du fil sans qu'il soit corrompu. C'est le principe du "free lunch" de la conception électronique.

Le corollaire est que plus c'est gros, plus c'est lent. Parce que si vous faites quelque chose de plus grand, alors inévitablement les distances vont devenir plus grandes. Une chose qui était automatique pendant un certain temps, la réduction de la taille de l'élément sur la puce produisait automatiquement un processeur plus rapide.

Le fichier de registre d'un processeur est petit et se trouve physiquement près du moteur d'exécution. La mémoire vive est la plus éloignée du processeur. Vous pouvez ouvrir le boîtier et réellement voir les fils entre les deux. Entre les deux se trouvent les caches, conçus pour combler l'écart dramatique entre la vitesse de ces deux opposés. Chaque processeur possède un cache L1, relativement petit (32 Ko en général) et situé le plus près du cœur. Plus bas se trouve le cache L2, relativement grand (4 Mo en général) et situé plus loin du cœur. Les processeurs plus chers possèdent également un cache L3, plus grand et plus éloigné.

25voto

jstine Points 2062

Spécifiquement sur l'architecture x86 :

  • La lecture du registre a une latence de 0 ou 1 cycle.
  • L'écriture dans les registres a une latence de 0 cycle.
  • La latence de lecture/écriture du cache L1 est de 3 à 5 cycles (varie selon l'âge de l'architecture).
  • Les demandes réelles de chargement/stockage peuvent être exécutées dans un délai de 0 ou 1 cycle en raison des fonctions de tampon de réécriture et de transfert de mémoire (détails ci-dessous).

La lecture du registre peut avoir une latence d'un cycle sur les processeurs Intel Core 2 (et les modèles antérieurs) en raison de sa conception : Si un nombre suffisant d'instructions exécutées simultanément lisent différents registres, la banque de registres du processeur ne pourra pas répondre à toutes les demandes en un seul cycle. Cette limitation de conception n'est présente dans aucune puce x86 commercialisée depuis 2010 (mais elle est présente dans certaines puces Xeon sorties en 2010/11).

Les latences de la mémoire cache L1 sont fixées par modèle, mais ont tendance à diminuer à mesure que l'on remonte dans le temps vers les anciens modèles. Cependant, gardez à l'esprit trois choses :

  1. Les puces x86 d'aujourd'hui ont un cache write-back qui a une latence de 0 cycle. Lorsque vous stockez une valeur en mémoire, elle tombe dans ce cache, et l'instruction peut être retirée en un seul cycle. La latence de la mémoire ne devient alors visible que si vous effectuez suffisamment d'écritures consécutives pour remplir le cache write-back. Les caches à réécriture sont très présents dans la conception des puces pour ordinateurs de bureau depuis 2001 environ, mais ils étaient largement absents des marchés des puces mobiles basées sur les ARM jusqu'à une date beaucoup plus récente.

  2. Les puces x86 de nos jours ont transfert de magasin du cache en écriture. Si vous stockez une adresse dans le cache WB et que vous relisez la même adresse plusieurs instructions plus tard, le CPU ira chercher la valeur dans le cache WB au lieu d'accéder à la mémoire L1. Cela réduit la latence visible sur ce qui apparaît pour être une requête L1 à 1 cycle. Mais en fait, la L1 n'est pas du tout référencée dans ce cas. Le transfert de mémoire doit également respecter d'autres règles pour fonctionner correctement, qui varient également beaucoup selon les différents processeurs disponibles sur le marché aujourd'hui (il faut généralement un alignement d'adresse de 128 bits et une taille d'opérande adaptée).

  3. La fonction de transfert de magasin peut générer faux positifs où le CPU pense que l'adresse est dans le tampon d'écriture en se basant sur une vérification rapide des bits partiels (généralement 10-14 bits, selon la puce). Il utilise un cycle supplémentaire pour vérifier avec une vérification complète. En cas d'échec, le CPU doit réacheminer l'adresse comme une demande de mémoire normale. Cet échec peut ajouter un ou deux cycles de latence supplémentaires aux accès qualifiés au cache L1. D'après mes mesures, les ratés de réacheminement de mémoire sont assez fréquents sur le Bulldozer d'AMD, par exemple ; suffisamment pour que sa latence de cache L1 au fil du temps soit environ 10-15% supérieure à ses 3-cycles documentés. Ce n'est presque pas un facteur sur la série Core d'Intel.

Référence primaire : http://www.agner.org/optimize/ et plus particulièrement http://www.agner.org/optimize/microarchitecture.pdf

Ensuite, vous pouvez faire un graphique manuel de ces informations avec les tableaux des architectures, des modèles et des dates de sortie des différentes pages de la liste des processeurs sur wikipedia.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X