Доступ к ОЗУ замедляет процессор?
Вчера я думал, что когда нынешний процессор x86 хочет получить доступ к памяти, между ними существует некоторый разрыв в скорости. Обычно ОЗУ работает на частоте 1333 МГц в случае некоторых новых процессоров Intel. Но сам процессор работает на частоте около 3,2 ГГц.
Таким образом, когда ЦП хочет получить доступ к памяти, он устанавливает адрес для адресации шины, данные для шины данных (скажем, мы хотим записать e), и теперь, нужно ли ЦП ждать дополнительное время для памяти, или есть некоторые как процессор быстрого контроллера, который обрабатывает это время ожидания, а процессор может делать еще несколько операций?
6 ответов
когда ЦП хочет получить доступ к памяти, он устанавливает адрес на шину адреса, данные на шину данных (скажем, мы хотим записать), и теперь, нужно ли ЦП ждать дополнительное время для памяти
Из печально известной статьи памяти Ульриха Дреппера...
Для операций записи CPU не обязательно должен ждать, пока значение не будет безопасно сохранено в памяти. Поскольку выполнение следующих инструкций, по-видимому, имеет тот же эффект, как если бы значение было сохранено в памяти, ничто не мешает ЦП использовать ярлыки. Он может начать выполнять следующую инструкцию раньше. С помощью теневых регистров, которые могут хранить значения, которые больше не доступны в обычном регистре, можно даже изменить значение, которое будет сохранено в операции неполной записи.
Редактировать: Очевидно, что для чтения все ставки выключены - я вполне уверен, что вам нужно подождать, пока данные будут прочитаны, прежде чем работать с ним;) Как уже говорили другие, эти задержки могут быть ниже, если поступают из кеша, или выше если доступ к основной памяти.
В большинстве процессоров небольшой объем быстрой кэш-памяти находится между процессором и основной памятью, храня код и данные, над которыми в данный момент работает процессор, а также пытается активно считывать данные из гораздо более медленной основной памяти (или из следующего уровня кэша).).
"... скажем, мы хотим написать... ЦП должен ждать дополнительное время для памяти, или есть какой-нибудь быстрый контроллер ЦП, который обрабатывает это время ожидания, а ЦП может выполнять еще некоторые операции?"
Да, высокопроизводительные процессоры имеют кэш-память, блок интерфейса шины и буфер записи, так что после того, как ЦП выполняет STORE, остальная часть ЦП может - в большинстве случаев - немедленно продолжить обработку инструкций, пока кеш и шина блок интерфейса и дескриптор буфера записи, отправляющий эти данные в основную память.
Некоторые процессоры отдают приоритет командам LOAD, поэтому, когда за этой инструкцией STORE сразу же следует инструкция LOAD, CPU загружает запрошенные данные из ОЗУ перед сохранением данных в ОЗУ.
процессор должен ждать дополнительное время для памяти
Да, это так. Фактически, проблема, которую вы описываете, является одной из самых больших проблем, с которыми сталкиваются разработчики ЦП и системы при проектировании текущего оборудования: доступ к ОЗУ, как правило, как минимум на порядок медленнее, чем операции внутри ЦП, поэтому доступ к ОЗУ необходимо свести к минимуму,
Это причина того, что все современные процессоры имеют кэш- память процессора, но даже они могут только смягчить проблему.
или есть какой-нибудь быстрый контроллер ЦП, который обрабатывает это время ожидания, а ЦП может сделать еще несколько операций
В общем случае это невозможно, поскольку, когда процессор ожидает данные из ОЗУ, он обычно не может работать без данных. При использовании таких технологий, как гиперпоточность, ЦП может переключаться на выполнение другого программного потока во время ожидания, но для этого требуется поддержка работающего программного обеспечения (оно должно использовать потоки).
В некоторых случаях ЦП может сделать что-то полезное во время ожидания памяти, используя "хитрости", такие как неупорядоченное выполнение и спекулятивное выполнение, но это не всегда возможно. Ответы Энди и Харримка также объясняют это.
Для широкого обсуждения этих проблем есть отличная статья:
Что каждый программист должен знать о памяти Ульриха Дреппера
Если ЦП должен ждать ОЗУ (и на сегодняшних скоростях ЦП это включает в себя кэш L2/L3 на кристалле ЦП), ЦП будет ждать. Это замедляет обработку (поток, работающий на 100% ЦП, может тратить большую часть своих циклов в режиме ожидания на ОЗУ).
Вот почему рассмотрение размещения данных в памяти (при пересечении строк кэша) может оказать большое влияние на производительность жесткого кода обработки данных).
(Исправление к вопросу: последняя оперативная память DDR3 выходит за рамки 1333, 1600 - обычное явление и доступно быстрее без учета разгона.)
есть ли в качестве процессора быстрый контроллер, который обрабатывает это время ожидания и процессор может делать еще несколько операций
Да, но для этого вам понадобится многоядерный компьютер с более чем одним потоком, активно использующим процессор.
По этой причине планировщик операционной системы пытается распределить потоки между ядрами как можно более равномерно и почему каждое ядро обычно имеет собственную кэш-память, чтобы избежать ожидания между ядрами.
Фактически, при покупке многоядерного компьютера следует обратить внимание на размер кеша памяти и, в частности, является ли заявленная для модели компьютера сумма кешем всех ядер, так что в действительности каждое ядро использует только доля от общего