зачем нужны отдельные icache и dcache - PullRequest
21 голосов
/ 03 января 2012

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

Ответы [ 5 ]

21 голосов
/ 03 января 2012

Основная причина: производительность.Другая причина - энергопотребление.

Раздельный dCache и iCache позволяют получать инструкции и данные параллельно.

Инструкции и данные имеют разные шаблоны доступа.

Запись в iCacheредкиРазработчики ЦП оптимизируют iCache и архитектуру ЦП, исходя из предположения, что изменения кода происходят редко.Например, Руководство по оптимизации программного обеспечения AMD для 10-часовых и 12-часовых процессоров гласит:

Предварительное декодирование начинается при заполнении кэша инструкций L1.Информация предварительного кода генерируется и хранится вместе с кешем инструкций.

В процессоре Intel Nehalem имеется буфер с обратной связью, а в дополнение к этому процессор Sandy Bridge имеет кэш-память µop Микроархитектура Intel, AMDи VIA CPU .Обратите внимание, что эти функции относятся к коду и не имеют прямого аналога в отношении данных.Они повышают производительность, а поскольку Intel «запрещает» разработчикам ЦП вводить функции, которые приводят к чрезмерному увеличению энергопотребления, они, по-видимому, также выигрывают от общего энергопотребления.

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

Код демонстрирует иные шаблоны, чем данные.

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

(Конечно, причина наличия отдельных iCache и dCache не уменьшена сложность, потому что если бы причиной была уменьшенная сложность, то не было бы никакой конвейерной обработки ни в одной из текущих конструкций ЦП. ЦП с конвейерной обработкой является более сложным, чем ЦП без конвейерной обработки. Мы хотим повышенной сложности. Дело в том, что следующая конструкция ЦП (обычно) более сложная, чем предыдущая.)

5 голосов
/ 03 января 2012

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

2 голосов
/ 03 января 2012

Одной из причин является снижение сложности - вы можете реализовать общий кеш, который может извлекать несколько строк одновременно или просто асинхронно (см. Hit-Under-Miss), но это делает контроллер кеша намного более сложным.

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

И, как сказал Дэн, их разделение упрощает конвейеризацию, не увеличивая сложность контроллера.

1 голос
/ 13 февраля 2017

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

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

Кроме того, большую часть времени процессор выбирает команды последовательно (за некоторыми исключениями, такими как взятые цели, прыжки и т. Д.), Что дает кэшу команд более пространственную локализацию и, следовательно, хорошую частоту попаданий. Кроме того, как упоминалось в других ответах, почти нет записей в ICache (самоизменяющийся код, такой как JIT-компиляторы). Таким образом, отдельные конструкции icache и dcache могут быть оптимизированы с учетом их шаблонов доступа и других компонентов, таких как очереди загрузки / сохранения, буферы записи и т. Д.

0 голосов
/ 28 февраля 2014

Как правило, существует 2 вида архитектур: 1. архитектура фон Неймана и 2. архитектура сложного типа.Гарвардская архитектура использует 2 отдельных воспоминания.Вы можете получить больше об этом на этой странице руки http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3839.html

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