2

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

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

6 ответов6

5

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

2

должен ли процессор ждать дополнительное время для памяти

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

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

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

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

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

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

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

2

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

Из печально известной статьи памяти Ульриха Дреппера ...

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

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

1

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

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

Некоторые процессоры отдают приоритет командам LOAD, поэтому, когда за этой инструкцией STORE немедленно следует инструкция LOAD, CPU загружает запрошенные данные из ОЗУ перед сохранением данных в ОЗУ.

1

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

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

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

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .