2010-06-29 1 views
9

Принимая Peter Norvig's advice, я обдумывал вопрос:Сколько времени требуется, чтобы получить одно слово из памяти?

Сколько времени потребуется, чтобы извлечь одно слово из памяти, и без промаха кэша?

(Предположим, стандартные аппаратные средства и архитектура Для упрощения расчетов предположим, 1 ГГц часы.)

ответ

13

Похоже Норвиг 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 

часть, где он говорит, что «выполнить типичную команду» = 1 нс означает CPU 1 ГГц (при условии, конечно, эффективной конвейерной обработки).

Я не знаю, где он берет эту информацию, но я доверяю Питер Норвигу быть надежным :-)

+0

А как насчет оправдания ответа? Твердые числа, более или менее, известны. –

+0

@Yuval - хороший вопрос. Но вы не указали в своем первоначальном вопросе, что вас интересует «почему», только «что». Также, какое именно оправдание вы ищете здесь? Объясните * почему * основная память занимает 100 нс? Как в объяснении всех логических схем, играющих роль? –

+0

Я считаю, что мьютекс и основная память-выбор интересны и удивительны. Я бы догадался, что в любом случае это будет меньше, чем в четыре раза медленнее. Я бы подумал, что обычный Mutex-lock будет * требовать * извлечение основной памяти. Очевидно, я ошибаюсь - мне придется приспособить некоторые мои взгляды на многозадачные накладные расходы, я думаю. – Steve314

3

Fair краткого содержания here, с некоторыми неточностями. Когда было написано (2+ года назад) и для среднего компьютера того времени, он оценил: доступ к памяти, 60 нс; Кэш L1, 10 нс; L2, 20-30ns (без оценок времени доступа к кэшу L3). Все это, разумеется, зависит от шаблонов конкуренции и доступа (поскольку уровни кэша обычно заполняются «линиями» из более медленной памяти, если вы обращаетесь к адресу X, тогда адрес X + 1, второй доступ может быть немного быстрее, заполнение строки кеша было начато первым доступом).

И, конечно, высокопроизводительный, хорошо настроенный сервер будет намного быстрее (относительные различия между такими машинами в латентности доступа к памяти обычно намного больше, чем у «сырых» скоростей процессора).

2

В таблице, опубликованной на github.org, есть nice visualization. Они также имеют «человеческий масштаб» переинтерпретации значений времени.

enter image description here

+0

Это довольно известное видео о визуализации того, что такое наносекунда [Grace Hopper - Nanoseconds] (https://www.youtube.com/watch?v=JEpsKnWZrJ8). Предыстория заключается в том, что в конце 60-х или что-то она хотела сделать случай, почему нам нужно создавать меньшие чипы ЦП. – user7610