Подтвердить что ты не робот

Кэш или регистры - что быстрее?

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

Что быстрее? Кэш или регистры процессора?

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

Вот те источники, которые я нашел, что смущает меня:

2 для кеша | 1 для регистров

http://in.answers.yahoo.com/question/index?qid=20110503030537AAzmDGp

Кэш быстрее.

http://wiki.answers.com/Q/Is_cache_memory_faster_than_CPU_registers

Итак, что же это такое?

4b9b3361

Ответ 1

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

Следствие состоит в том, что больше медленнее. Потому что, если вы сделаете что-то большее, то неизбежно расстояния увеличатся. Что-то, что было автоматически на некоторое время, уменьшив размер функции на чипе, автоматически создало более быстрый процессор.

Регистровый файл в процессоре мал и физически близок к механизму выполнения. Наиболее удаленным от процессора является ОЗУ. Вы можете вскрыть корпус и увидеть провода между ними. Между ними сидят тайники, предназначенные для преодоления драматического разрыва между скоростью этих двух противоположностей. Каждый процессор имеет кэш L1, относительно небольшой (32 КБ типа) и расположен ближе всего к ядру. Далее - кеш L2, относительно большой (тип 4 МБ) и расположен дальше от ядра. Более дорогие процессоры также имеют кэш L3, больше и дальше.

Итак, что нужно, так это то, что регистр ЦП всегда быстрее, чем кэш L1. Он ближе всего. Разница примерно в 3 раза.

Ответ 2

В частности, архитектура x86:

  • Чтение из регистра имеет задержку 0 или 1 цикла.
  • Запись в регистры имеет 0 задержку цикла.
  • Чтение/запись кеша L1 имеет задержку от 3 до 5 циклов (зависит от возраста архитектуры)
  • Фактические запросы загрузки/хранения могут выполняться в течение 0 или 1 такта из-за функций резервного копирования и хранения (подробнее см. ниже).

Чтение из регистра может иметь 1-часовую задержку на процессорах Intel Core 2 (и более ранних моделях) из-за его дизайна: если достаточно одновременных команд-инструкций считываются из разных регистров, банк регистров ЦП не сможет обслуживать все запросов за один цикл. Это ограничение дизайна отсутствует в любом чипе x86, который был поставлен на потребительский рынок с 2010 года (но он присутствует в некоторых чипах Xeon, выпущенных в 2010/11 годах).

Задержки кэша L1 фиксированы для каждой модели, но, как вы возвращаетесь во времени, к более старым моделям, они становятся медленнее. Однако имейте в виду три вещи:

  • Процессоры x86 в эти дни имеют кэш обратной записи с задержкой 0 циклов. Когда вы храните значение в память, оно попадает в этот кеш, и инструкция может уйти в отставку за один цикл. Задержка латентности становится видимой только тогда, когда вы выдаете достаточную последовательную запись для заполнения кэша обратной записи. Кэши обратной записи были заметны в дизайне настольных чипов с 2001 года, но до недавнего времени они широко отсутствовали на рынке мобильных чипов на базе ARM.

  • Чипы x86 в эти дни имеют переадресацию магазина из кэша обратной записи. Если вы храните адрес в кэш-памяти WB, а затем читаете один и тот же адрес несколько инструкций позже, CPU будет извлекать значение из кэша WB вместо доступа к памяти L1 для него. Это уменьшает видимую задержку на том, что кажется запросом L1 для 1 цикла. Но на самом деле, L1 в этом случае вообще не ссылается. У пересылки также есть некоторые другие правила, чтобы он работал правильно, что также сильно варьируется в зависимости от различных доступных сегодня на рынке процессоров (обычно требуется 128-битное выравнивание адресов и размер совпадающих операндов).

  • Функция пересылки в хранилище может генерировать ложные срабатывания, когда ЦП считает, что адрес находится в буфере обратной записи на основе быстрой проверки частичных бит (обычно 10-14 бит, в зависимости от чипа). Он использует дополнительный цикл для проверки с полной проверкой. Если это не удастся, ЦП должен перенаправить в качестве обычного запроса на память. Эта пропущенность может добавить дополнительную задержку в 1-2 цикла для получения доступа к кэшу L1. В моих измерениях, например, на AMD Bulldozer часто случаются пропуски при пересылке, например; достаточно, чтобы время задержки латентного кэша L1 было на 10-15% выше, чем его документированные 3-циклы. Это почти не фактор для серии Intel Core.

Основная ссылка: http://www.agner.org/optimize/ и, в частности, http://www.agner.org/optimize/microarchitecture.pdf

И затем вручную сопоставьте информацию об этом с таблицами по архитектурам, моделям и датам выпуска с различных страниц списка процессоров в википедии.