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

Почему нужны отдельные icache и dcache

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Код показывает разные шаблоны, чем данные.

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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