2010-06-29 3 views

Répondre

13

On dirait Norvig answers this himself:

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 

La partie où il est dit "instruction d'exécution de type" = 1 ns implique un processeur de 1 GHz (en supposant un pipelining efficace, bien sûr).

Je ne sais pas où il prend cette information, mais je confiance Peter Norvig être :-) fiable

+0

Qu'en est-il une justification de la réponse? Les nombres durs sont plus ou moins connus. –

+0

@Yuval - bonne question. Mais vous n'avez pas précisé dans votre question initiale que vous êtes intéressé par le "pourquoi", seulement le "quoi". Aussi, exactement quel genre de justification cherchez-vous ici? Expliquer * pourquoi * la mémoire principale prend 100 ns? Comme pour expliquer tous les circuits logiques jouant partie? –

+0

Je trouve le mutex vs principal-memory-fetch intéressant et surprenant. J'aurais deviné que ce qui est au moins quatre fois plus lent serait l'inverse. J'aurais pensé qu'un Mutex-lock typique nécessiterait un fetch de mémoire principale. Évidemment, je me trompe - je vais devoir ajuster certaines de mes vues sur les frais généraux multitâches, je suppose. – Steve314

3

sommaire Foire here, avec une certaine imprécision. Lorsqu'il a été écrit (il y a plus de 2 ans) et pour un PC de milieu de gamme de l'époque, il a estimé: l'accès mémoire, 60ns; Cache L1, 10ns; Cache L2, 20-30ns (aucune estimation pour les temps d'accès au cache L3). Tout dépend de la contention et des accès (puisque les couches de cache sont généralement remplies "par des lignes" de mémoire plus lente, si vous accédez à l'adresse X puis à l'adresse X + 1, le second accès peut être un peu plus rapide que le remplissage de la ligne de cache a été démarré par le premier accès). Et, bien sûr, un serveur haut de gamme, bien réglé sera beaucoup plus rapide (les différences relatives entre ces machines dans la latence d'accès à la mémoire sont généralement beaucoup plus grandes que celles dans les vitesses CPU "brutes").

2

Il ya un nice visualization des données dans cette table publié sur github.org Ils ont également une réinterprétation «à échelle humaine» des valeurs de temps là.

enter image description here

+0

Il s'agit d'une vidéo plutôt bien connue sur la visualisation de ce qu'est une nanoseconde [Grace Hopper - Nanoseconds] (https://www.youtube.com/watch?v=JEpsKnWZrJ8). La trame de fond est que dans la fin des années 60 ou quelque chose qu'elle voulait faire un cas, pourquoi nous devons faire de plus petites puces de processeur. – user7610

Questions connexes