web-dev-qa-db-fra.com

Cache ou registres - quel 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 toujours trouvé une réponse différente. Ma question est:

Lequel est plus vite? Cache ou registres CPU?

Selon moi, ce sont les registres qui chargent directement les données pour les exécuter alors que le cache n'est qu'un lieu de stockage proche ou interne au CPU.

Voici les sources que j'ai trouvées 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, c'est quoi vraiment?

24
user1255454

Le registre CPU est toujours plus rapide que le cache L1. C'est le plus proche. La différence est à peu près un facteur de 3.

Essayer de rendre cela aussi intuitif que possible sans se perdre dans la physique sous-jacente à la question: il existe une simple corrélation entre la vitesse et la distance en électronique. Plus vous faites avancer un signal, plus il est difficile d'obtenir ce signal à l'autre extrémité du fil sans que le signal ne soit corrompu. C'est le principe "il n'y a pas de déjeuner gratuit" de la conception électronique.

Le corollaire est que plus grand est plus lent. Parce que si vous faites quelque chose de plus grand, alors les distances vont inévitablement augmenter. Quelque chose qui était automatique pendant un certain temps, la réduction de la taille des fonctionnalités de la puce a automatiquement produit un processeur plus rapide.

Le fichier de registre dans un processeur est petit et se trouve physiquement proche du moteur d'exécution. La plus éloignée du processeur est la RAM. Vous pouvez faire éclater le boîtier et en fait voir les fils entre les deux. Entre les deux, les caches sont conçues 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 volumineux (4 Mo en général) et situé plus loin du cœur. Les processeurs plus chers ont également un cache L3, plus grand et plus éloigné.

37
Hans Passant

Plus précisément 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.
  • Le cache de lecture/écriture L1 a une latence de 3 à 5 cycles (varie selon l'âge de l'architecture)
  • Les demandes de chargement/stockage réelles peuvent s'exécuter en 0 ou 1 cycle en raison du tampon de réécriture et des fonctionnalités de transfert de stockage (détails ci-dessous)

La lecture à partir 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 suffisamment d'instructions d'exécution simultanée lisent à partir de différents registres, la banque de registres du processeur ne pourra pas traiter toutes les demandes dans un cycle unique. Cette limitation de conception n'est présente dans aucune puce x86 mise sur le marché grand public depuis 2010 (mais elle est présente dans certaines puces Xeon publiées en 2010/11).

Les latences de cache L1 sont fixes par modèle, mais ont tendance à ralentir à mesure que vous remontez dans le temps vers des modèles plus anciens. Cependant, gardez à l'esprit trois choses:

  1. les puces x86 ont de nos jours un cache en écriture différée qui a une latence de cycle 0. Lorsque vous stockez une valeur en mémoire, elle tombe dans ce cache et l'instruction peut se retirer en un seul cycle. La latence de la mémoire n'est alors visible que si vous effectuez suffisamment d'écritures consécutives pour remplir le cache de réécriture. Les caches d'écriture différée occupent une place importante dans la conception de puces de bureau depuis environ 2001, mais étaient largement absents des marchés des puces mobiles basées sur ARM jusqu'à bien plus récemment.

  2. les puces x86 de nos jours ont transfert de magasin à partir du cache de réécriture. Si vous stockez une adresse dans le cache WB, puis relisez la même adresse plusieurs instructions plus tard, le CPU récupérera la valeur du cache WB au lieu d'accéder à la mémoire L1 pour cela. Cela réduit la latence visible sur ce qui apparaît pour être une requête L1 à 1 cycle. Mais en fait, le L1 n'est pas du tout référencé dans ce cas. Le transfert de magasin a également d'autres règles pour qu'il fonctionne correctement, qui varient également beaucoup entre les différents processeurs disponibles sur le marché aujourd'hui (nécessitant généralement un alignement d'adresse 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 processeur pense que l'adresse est dans le tampon d'écriture différée sur la base d'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. Si cela échoue, le processeur doit réacheminer en tant que demande de mémoire régulière. Cette erreur peut ajouter une latence supplémentaire de 1 à 2 cycles aux accès au cache L1 éligibles. Dans mes mesures, les échecs de transfert de magasin se produisent assez souvent sur le bulldozer d'AMD, par exemple; suffisamment pour que sa latence de cache L1 au fil du temps soit environ 10 à 15% plus élevée que ses 3 cycles documentés. C'est presque un non-facteur sur la série Core d'Intel.

Référence principale: http://www.agner.org/optimize/ et spécifiquement http://www.agner.org/optimize/microarchitecture.pdf

Et puis gravez manuellement des informations à partir de cela avec les tableaux sur les architectures, les modèles et les dates de sortie des différentes pages de la liste des processeurs sur wikipedia.

16
jstine