Доступ RAM замедляет ЦП?

Вчера я думал, когда существующий x86 ЦП хочет получить доступ к памяти существует некоторый разрыв скорости между ними. Обычно RAM работает на уровне 1333 МГц в случае некоторого нового Intel CPUs. Но сам ЦП работает на уровне приблизительно 3,2 ГГц.

Так, когда ЦП хочет получить доступ к памяти, он устанавливает адрес на адресную шину, данные к шине данных (позволяет, говорят, что мы хотим записать), и теперь, ЦП должен ожидать дополнительное время памяти или является там некоторыми как ЦП быстрый контроллер, который обрабатывает то время ожидания, и ЦП может сделать еще некоторые операции?

2
задан 26.07.2016, 06:59

6 ответов

то, когда ЦП хочет получить доступ к памяти, он устанавливает адрес для адресации шины, данные к шине данных (позволяет, говорят, что мы хотим записать), и теперь, делает ЦП, должны ожидать дополнительное время памяти

От печально известной статьи памяти Ulrich Drepper...

Для операций записи должен не обязательно ожидать ЦП, пока значение безопасно не хранится в памяти. Пока выполнение следующих инструкций, кажется, имеет тот же эффект, как будто значение было сохранено в памяти нет ничего, что препятствует тому, чтобы ЦП срезал путь. Это может начать выполнять следующую инструкцию рано. С помощью теневых регистров, которые могут содержать значения, больше не доступные в регулярном регистре, даже возможно изменить значение, которое должно быть сохранено в неполной операции записи.

Править: Очевидно, для чтений, все ставки прочь - я абсолютно уверен, что необходимо ожидать данных, которые будут считаны прежде, чем воздействовать на него;) Как другие сказали, эти задержки могут быть ниже при прибытии из кэша, или выше при доступе к оперативной памяти.

2
ответ дан 08.12.2019, 04:41

В большинстве центральных процессоров небольшое количество быстрой кэш-памяти находится между памятью ЦП и оперативной памятью, содержа код и данные, ЦП в настоящее время продолжает работать, а также пытается заранее читать из намного более медленной оперативной памяти (или из следующего уровня кэша).

5
ответ дан 08.12.2019, 04:41

делает ЦП, должны ожидать дополнительное время памяти

Да, это делает. На самом деле, проблемой, которую Вы описываете, является одна из самых сложных задач, с которыми ЦП и разработчики системы сталкиваются при разработке текущих аппаратных средств: доступ RAM обычно является, по крайней мере, порядком величины медленнее, чем операции в ЦП, таким образом, доступ RAM должен быть минимизирован.

Это - причина, все современные центральные процессоры имеют кэши ЦП, но даже они могут только смягчить проблему.

или есть ли некоторые как ЦП быстрый контроллер, который обрабатывает то время ожидания, и ЦП может сделать еще некоторые операции

В целом это не возможно, как тогда, когда ЦП ожидает данных из RAM, это обычно не может продолжаться без данных. С методами как гиперпоточность ЦП может переключиться на выполнение другого потока программного обеспечения, в то время как это ожидает, но это требует поддержки со стороны под управлением программного обеспечения (это должно использовать потоки).

В некоторых случаях ЦП может сделать что-то полезное при ожидании памяти, при помощи "приемов" как выполнение с изменением последовательности и спекулятивное выполнение, но это не всегда возможно. Ответы от Andy и harrymc также объясняют это.

Для обширного обсуждения этих проблем существует превосходная статья:

Что каждый программист должен знать о памяти Ulrich Drepper

2
ответ дан 08.12.2019, 04:41

Если ЦП должен ожидать RAM (и при сегодняшних скоростях ЦП это включает кэш L2/L3 в ЦП, умирают), ЦП должен будет ожидать. Это действительно замедляет обработку (поток, достигающий 100% ЦП, мог тратить большинство своих циклов неактивное ожидание на RAM).

Поэтому рассмотрение формата данных в памяти (когда строки кэша пересечены) может иметь большой эффект на производительность трудного кода обработки данных).

(Исправление к вопросу: последний DDR3 RAM идет значительно вне 1333, 1600 распространен, и быстрее доступно, не рассматривая разгон.)

1
ответ дан 08.12.2019, 04:41

есть ли некоторые как ЦП быстрый контроллер, который обрабатывает то время ожидания, и ЦП может сделать еще некоторые операции

Да, но Вам был бы нужен многоядерный компьютер, чтобы заставить его произойти, и больше чем с одним потоком активно с помощью ЦП.

Это - причина, почему планировщик операционной системы пытается распределить потоки максимально равномерно между ядрами, и почему каждое ядро обычно идет со своей собственной кэш-памятью, чтобы избежать, чтобы межъядро ожидало.

На самом деле, при покупке многоядерного компьютера, нужно обратить внимание на размер кэша памяти, и конкретно является ли сумма, требуемая модель компьютера, общим кэшем всех ядер, так, чтобы в действительности каждое ядро только использовало часть общего количества.

1
ответ дан 08.12.2019, 04:41

"... скажите, что мы хотим записать..., что ЦП должен ожидать дополнительное время памяти или является там некоторыми как ЦП быстрый контроллер, который обрабатывает то время ожидания, и ЦП может сделать еще некоторые операции?"

Да, высокоэффективные центральные процессоры имеют кэши и блок шинного интерфейса и буфер записи так, чтобы, после того, как ЦП сделал ХРАНИЛИЩЕ, остальная часть ЦП может - в большинстве случаев - сразу продолжают обрабатывать инструкции в то время как блок кэш-памяти и блок шинного интерфейса и дескриптор буфера записи, отсылающий те данные в оперативную память.

Некоторые центральные процессоры располагают по приоритетам инструкции по ЗАГРУЗКЕ, поэтому когда тем инструкциям по ХРАНИЛИЩУ сразу следует инструкция по ЗАГРУЗКЕ, загрузки ЦП запрошенные данные от RAM прежде, чем хранить данные к RAM.

1
ответ дан 08.12.2019, 04:41

Теги

Похожие вопросы