Микроархитектура Zen2

Всем привет. Сегодня мы разбираемся с микроархитектурой Zen2. Если изменения между Zen и Zen+ были незначительные, то Zen2 предоставляет заметные преимущества. Процессоры на данной микроархитектуре вышли в 2019 году и выпускаются по 7нм техпроцессе.

Выборка инструкций

Микроархитектура Zen2, image #1

Начнём с выборки инструкций. У zen2 кэш под инструкции L1I имеет объём 32кб и ассоциативность 8-way. Объем строки составляет 64 байта, а количество — 64 строки. Хоть кэш под инструкции и стал меньше, но ассоциативность увеличилась, поэтому прирост здесь будет положительный. Что у нас по буферам ассоциативной трансляциий, они же и TLB?

ITLB (Instructions Translation Lookaside Buffers):

L1 на 64 записи полностью ассоциативный и для всех страниц

L2 на 512 записей для 4кб и 2мб страниц, 8-way ассоциативность.

DTLB (Data Translation Lookaside Buffers):

L1 64 записи, все страницы, полная ассоциативность

L2 на 2048 записей для 4кб и 2мб страниц, 16-way ассоциативность.

Блок выборки инструкций за такт выбирает 32-байт инструкций. Выборка инструкции работает вместе с блоком предсказания ветвлений, который в Zen2 подвергается заметными изменениями. L2 кэш имеет объем 512кб и ассоциативность 8-way.

Блок предсказания ветвлений

Введение многоступенчатого статического механизма TAGE и позволяет добиться более вероятных предсказаний ветвей. TAGE с L1 BTB не работает, а работает только с L2 BTB. В Zen2 BTB буферы увеличиваются.

L0 BTB: 16 записей
L1 BTB: 512 записей
L2 BTB: 7 000 записей

В BTB буферах находится история ветвлений и, очевидно, что чем больше буфер, тем дальше история ветвлений будет записана в буферы BTB. Блок предсказания ветвлений согласуется с буфером возврата стеков, а буфер возврата стеков рассчитан на 32 записи. Про предсказания ветвлений ждите отдельную статью.

Декодирование

Инструкции отправляются в буфер очереди инструкций перед декодированием с пропускной способностью 32 байта за такт. Сам буфер рассчитан на 20 записей. Каждая запись содержит 16 байтов инструкций, выравненные по 16-байтной границе. В режиме SMT каждому потоку доступно 10 записей. Два 16-байтных окна сканируются за такт, чтобы определить границы 4-ёх инструкций. Эти инструкции отправляются на декодирование.

Микроархитектура Zen2, image #2

Декодеров тут всего 4. Каких? Сложных! Все декодеры сложные. Для сложных инструкций декодеры обращаются к микрокоду, на основе которого воспроизводится последовательность макроопераций. Главным изменением на этапе декодирования являетя кэш под микрооперации. Декодированные инструкции записываются в Op Cache на внушительные 4096 записей. Суть его заключается в том, чтобы сохранять последовательность декодированных микроопераций. Если нужно выполнить инстркцию повторно, а она уже есть в кэше микроопераций, тогда не придётся проделывать все этапы раннее. Целых 8 микроопераций может отправиться из кэша микроопераций. Zen2 поддерживает макрослияние и микрослияние, что увеличивает производительность. Макрослияние слияет две инструкции в одну микроопераци, а микрослияние две микрооперации в одну. Естественно, что слияние не доступно для всех инструкций, а только для некоторых. Все микрооперации поступают в очередь. Далее идёт выполнение микроопераций.

Выполнение

Начнём с INT части.

Микроархитектура Zen2, image #3

Из диспетчера 6 микроопераций за такт попадают в буфер Register Rename, где происходит переименование регистров. ReOrder Buffer (буфер переупорядочения) увеличивается с 192 записей до 224 в зен2. Всё это нужно для достижения внеочередного исполнения. Планировщики состоят из четырёх очередей ALU по 16 записей и AGU на 28 записей. PRF расссчитан на 180 записей. На zen2 у нас 4 ALU и 3 AGU блока. ALU как раз и выполняют микрооперации, а AGU нужны для генерации адресов, но 1 из них только на запись. Сейчас рассмотрим Floating Point Unit.

Микроархитектура Zen2, image #4

Главным изменением является 256-битные блоки, исполняющие инструкции. Прирост двухкратный. На изображении эти блоки называются MUL и ADD.

Микроархитектура Zen2, image #5

Очередь Non-Sheduling рассчитана на 64 записей. Эту очередь разделяет диспетчер и планировщик. Диспетчер отправляет микрооперации на целочисленную сторону, чтобы ускорить загрузку FP и сохранять вычисления адресов, если занят планировщик. Планировщик рассчитан на 36 записей и выдает до 4-ёх микроопераций на выполнение. Регистровый файл рассчитан на 160 записей.

Делитель

Скорее всего вы слышали про некий делитель у Ryzen на микроархитектуре Zen2. Очень странно, что многие ошибаются в этом моменте и сейчас я объясню почему. Как у нас обстояли дела на Zen/Zen+ с частотами UCLK и FCLK? Они все были равны физической или реальной частоте оперативной памяти, которая ниже в два раза.

UCLK = FCLK = MEMCLK

UCLK — частота контроллера памяти
FCLK — частота infinity fabric
MEMCLK — физическая частота оперативной памяти

Вы вряд ли разгоните оперативную память до 4400МГц. На zen2 для красивых цифр сделали этот самый делитель, который делит частоту UCLK после официально заявленных 3733МГц. Тогда происходит так, что ½MEMCLK = UCLK. Никакого смысла для обычного пользователя нет от этого делителя, ведь такой разгон ситуацию ухудшает, поэтому вы всегда можете отключить его в BIOSе. FCLK в свою очередь с делителем не поднимается выше 1800МГц. Многие ошибаются в этом аспекте, говоря, что делят частоту FCLK, а не UCLK.

Микроархитектура Zen2, image #6

Чиплеты

В чём преимущество вообще модулей CCX (Core CompleX)? Очевидно, что в их масштабируемости. По 2 модуля CCX находятся в одном кристалле, что составляет 8 ядер. У Ryzen Threadripper на микроархитектурах Zen и Zen+ были вот такие NUMA-конфигурации кристаллов.

Микроархитектура Zen2, image #7

Такая конфигураций уж очень тормознутая в межъядерных задержках, что можно видеть в inter-core data latency тестах.

Микроархитектура Zen2, image #8

AMD теперь сделали I/O Die отдельным кристаллом, но и ядра с кэшами тоже будут отдельными кристаллами. Задержки намного снизились, благодаря чиплетам, но отличная масштабируемость осталась.

Микроархитектура Zen2, image #9

Только правда Ryzen не является полность 7нм процессором, ведь как раз I/O Die имеет размер транзисторов 14нм, либо 12нм. Это зависит от предназначения I/O.

Client I/O Die (cIOD) — 12нм
Server I/O Die (sIOD) — 14нм

Есть кое-какая проблема, связанная с I/O Die. Об этой проблеме вы можете почитать в нашей предыдущей статье. Ещё стоит упомянуть, что именно I/O производится на заводах GlobalFoundries. А что насчёт всеми хваленного монокристалла? Ну… Как-то так

Микроархитектура Zen2, image #10

Где теперь ваши «задержки на чиплетах»?

Infinity Fabric

Микроархитектура Zen2, image #11

Infinity fabric сам по себе в zen2 является Die-to-die (от кристалла к кристаллу), но нас интересует Data Fabric. Именно он связывает между собой модули CCD, контроллер памяти и I/O hub. Data Fabric работает на частотах FCLK, про которые вы уже знаете и является 512-битным! На Zen/Zen+ шина infinity fabric, которая делала тоже самое, но связывала CCX была 256-битная. Здесь кроется ответ на низкую скорость записи, которую мы можем увидеть в тестах aida64. Дело в том, что на запись data fabric работает в режиме 16 байт за такт.

Микроархитектура Zen2, image #12

Кэши и латентонсть

Для многих будет новостью, но латентность кэшей измеряется в тактах. Так вот для L1D INT операций требуется 4-5 тактов, а для FP 7-8 тактов. Для L2 кэша 12 тактов, а L3 является общим буфером между ядрами, поэтому там латентность будет непостоянной. Тем не менее, мы с уверенностью скажем, что по сравнению с Zen/Zen+ задержки увеличились из-за удвоенного объёма. Без такого большого L3 кристаллы были бы уж слишком маленькими. Площадь 74мм2, где L3 занимает большую часть. Примерная латентность кэша L3 стала 30 тактов (от 25 тактов ранее)

Микроархитектура Zen2, image #13
19 views·1 share