Как MIPS r10000 извлекает скрытую задержку кэша команд? - PullRequest
0 голосов
/ 09 сентября 2018

Я изучаю различные стадии конвейера mips r10000 .В документе говорится, что процессор каждый раз выбирает 4 инструкции за цикл из кэша команд.Но задержка из кэша команд должна составлять более одного цикла, хотя я не знаю точную задержку попадания в кэш команд, задержка попадания в кэш данных L1 в Haswell процессоре составляет около 4 циклов.

Итак, если мы предположим, что задержка кэша инструкций L1 равна 3-4 циклам, как процессор может получать 4 инструкции за цикл?

1 Ответ

0 голосов
/ 09 сентября 2018

MIPS R10000 имел кэш команд с задержкой в ​​один цикл и мог извлекать непрерывный блок из четырех команд в блоке кэша без ограничений выравнивания.

Механически, это, вероятно, означало, что он использовал четыре банка SRAM с, по крайней мере, частично независимой адресацией (декодирование адресов набора кэша могло быть общим) 4 Bank Array of 16 Words

Поскольку каждый банк является независимо адресуемым, как можно видеть на диаграмме, можно получить доступ к любой смежной последовательности из четырех слов, содержащихся в шестнадцати словах. При адресации строк [0, 0, 0, 0] получаются слова [0, 1, 2, 3] (слова 0-3); row [1, 0, 0, 0] получает слова [4, 1, 2, 3] (слова 1-4); row [1, 1, 0, 0] получает слова [4, 5, 2, 3] (слова 2-5); ...; строки [3, 3, 3, 2] получают слова [12, 13, 14, 11] (слова 11-14); строки [3, 3, 3, 3] получают слова [12, 13, 14, 15] (слова 12-15).

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

(Общая альтернатива для выборки нескольких команд имеет ограничение выравнивания естественно выровненного фрагмента, например, 16 байтов.)

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

Буферизация инструкций может сгладить такие опасности, поскольку пропускная способность редко достигает максимума из-за зависимостей данных и других опасностей.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...