Prendre Le conseil de Peter Norvig , je réfléchis à la question suivante: p>
Combien de temps faut-il pour chercher un mot de la mémoire, avec et sans cache miss? P> blockQuote>
(assumer le matériel et l'architecture standard. Pour simplifier les calculs, assumez une horloge de 1 GHz) P>
3 Réponses :
semble être comme norvig répond à cela lui-même :
execute typical instruction 1/1,000,000,000 sec = 1 nanosec fetch from L1 cache memory 0.5 nanosec branch misprediction 5 nanosec fetch from L2 cache memory 7 nanosec Mutex lock/unlock 25 nanosec fetch from main memory 100 nanosec send 2K bytes over 1Gbps network 20,000 nanosec read 1MB sequentially from memory 250,000 nanosec fetch from new disk location (seek) 8,000,000 nanosec read 1MB sequentially from disk 20,000,000 nanosec send packet US to Europe and back 150 milliseconds = 150,000,000 nanosec
Qu'en est-il de la justification de la réponse? Les nombres durs sont, plus ou moins, connus.
@Yuval - bonne question. Mais vous n'avez pas spécifié dans votre question initiale que vous êtes intéressé par le «pourquoi», seulement le «quoi». En outre, quel type de justification cherchez-vous ici? Expliquer pourquoi i> la mémoire principale prend 100 NS? Comme pour expliquer tous les circuits logiques jouant une partie de jeu?
Je trouve le mutex contre la mémoire principale et la mémoire principale intéressante et surprenante. J'aurais deviné que le ce qui est - à au moins quatre fois plus lent serait l'inverse. J'aurais pensé qu'un mutex-verrouillage typique nécessite i> une récupération de mémoire principale. De toute évidence, je me trompe - je vais devoir ajuster certains de mes points de vue sur les frais généraux multitâches, je suppose.
Résumé juste ici , avec une certaine imprécision . Quand écrit (il y a plus de 2 ans) et pour un PC de milieu de gamme de l'époque, il estimé: accès à la mémoire, 60ns; L1 cache, 10ns; Cache L2, 20-30ns (aucune estimation des temps d'accès au cache L3). Tout cela varie bien sûr au lot em>, en fonction des modèles de conflit et d'accès (car les couches de cache sont généralement remplies "par des lignes" de la mémoire plus lente, si vous accédez à l'adresse x, adresse x + 1 Le deuxième accès peut être un peu plus rapide car le remplissage de la ligne de cache a été démarré par le premier accès). P>
et, bien sûr, un serveur haut de gamme et bien réglé sera beaucoup plus rapide (les différences relatives entre de telles machines dans la latence d'accès à la mémoire sont généralement beaucoup plus grandes que celles des vitesses de processeur «brutes»). P>
Il y a un Nice Visualisation des données de ce tableau publiées sur github.org ont également une "échelle humaine" réinterprétation des valeurs de temps là-bas. P>
p>
C'est une vidéo plutôt bien connue sur la visualisation de ce qu'est une nanoseconde est Grace Hopper - Nanosecondes . La backstory est qu'à la fin des années 60 ou quelque chose qu'elle voulait faire une affaire pour laquelle nous devons faire des copeaux de processeur plus petits.
La vidéo n'est pas longue disponible.
YouTube.com/results?search_query=grace+Hopper+Nanoseconde