CPU

Микроархитектура AMD ZEN: шаг вперед или назад? Часть 4


В 2017 году компания AMD представила процессоры Ryzen с новой микроархитектурой Zen. Сегодня редакция ServersTech.ru детально разберет микроархитектуру Zen, проследив как изменились задержка и пропуск инструкций с K10.

Помимо привычных способов повышения производительности процессора (повышение тактовой частоты, увеличение ширины исполнительного тракта, расширение разрядности ИУ и векторизация инструкций), существует неочевидный способ - снижение таймингов инструкций, то есть сокращение времени выполнения инструкций. Например, снижение времени выполнения операции деления вдвое будет условно равно удвоению тактовой частоты процессора при выполнении деления (с большим количеством допущений). Таким образом, снижение таймингов выполнения инструкций может быть вполне действенным способом, хоть и весьма ограниченным и специфичным (так как для повышения быстройдествия всего процессора необходимо снизить тайминги всех инструкций, тогда как в реальности обычно происходит снижение таймингов лишь определенных инструкциий, что ускоряет процессор только в узком круге задач).
Всего существует два наиболее важных тайминга: задержка (latency) и пропуск (reciprocal throughput). Где задержка выражается в тактах, которые необходимы для выполнения инструкции, а пропуск - количество тактов, которые необходимо пропустить для выполнения следующей инструкции в данном ИУ. Сравним тайминги некоторых инструкций для K10, Bulldozer и Zen, используя справочные данные Agner Fog.

Остальные материалы по микроархитектуре Zen собраны здесь.

Таблицы будут построены следующим образом: в колонке «Инструкция» будет указана инструкция и операнды (m, m32, m64, m128, m256 - память; r, r32, r64 - РОН; mm - регистры MMX; xmm - регистры SSE; ymm - регистры AVX); в колонках K10, Bulldozer и Zen будут указаны непосредственно тайминги в тактах для данных микроархитектур по схеме «задержка (пропуск)».

Инструкции X86

Инструкция

K10

Bulldozer

Zen

MOV r64, m64

3 (1/2)

4 (0.5)

3 (0.5)

XCHG r, r

2 (1)

1 (1)

0 (0.33)

XCHG r, m

21 (19)

50 (50)

30 (30)

PUSH r

1

1

1

POP r

1

1

0.5

ADD r, r

1 (1/3)

1 (0.5)

1 (0.25)

SUB r, r

1 (1/3)

1 (0.5)

1 (0.25)

NEG r

1 (1/3)

1 (0.5)

1 (0.25)

INC r

1 (1/3)

1 (0.5)

1 (0.25)

DEC r

1 (1/3)

1 (0.5)

1 (0.25)

AND r, r

1 (1/3)

1 (0.5)

1 (0.25)

OR r, r

1 (1/3)

1 (0.5)

1 (0.25)

XOR r, r

1 (1/3)

1 (0.5)

1 (0.25)

NOT r

1 (1/3)

1 (0.5)

1 (0.25)

MUL r64

4 (2)

6 (4)

3 (2)

IMUL r64, r64

4 (2)

6 (4)

3 (1)

DIV r64

15-78 (15-78)

16-75 (16-75)

14-46 (14-45)

IDIV r64

24-87 (24-87)

22-79 (20-75)

14-47 (14-45)

MOV: перессылка данных из памяти в регистры у Zen на уровне K10 - 3 такта, в то время как у Bulldozer - 4 такта.
XCHG: обмен данными между регистрами у Zen «бесплатный» (с пропуском в 0.33 такта), в то время как у K10 и Bulldozer 2 и 1 такта соответственно. Обмен данными между регистром и памятью у Zen больше, чем у K10 - 30 тактов против 21, но меньше, чем у Bulldozer - 50.
PUSH: для помещения числа в стек всем участникам требуется 1 такт.
POP: извлечение числа из вершины стека у Zen происходит за полтакта, в то время как раньше это требовало 1 такт.
ADD: операция сложения чисел у K10, Bulldozer и Zen требует 1 такт, но необходимо отметить, что у K10 пропуск 1/3 такта, Bulldozer - 1/2, а у Zen - 1/4 такта.
Аналогичная ситуация и с вычитанием (SUB), изменением знака числа (NEG), инкрементом (INC), декрементом (DEC), логическим И (AND), логическим ИЛИ (OR), логическим исключающим ИЛИ (XOR), инверсией битов (NOT).
MUL: беззнаковое умножение на Zen стало вдвое быстрее, чем на Bulldozer - 3 такта против 6.
IMUL: умножение на Zen требует всего 3 такта, в то время как на Bulldozer - 6, а на K10 - 4.
DIV: деление беззнаковых чисел также ускорилось: Zen требует 14-46 тактов; Bulldozer - 16-75; K10 - 15-78.
IDIV: операция деления существенно ускорилась в Zen - 14-47 тактов против 22-79 у Bulldozer.
Подводя промежуточный итог, основные инструкции из набора Х86 стали выполняться на Zen быстрее, чем на предшественниках, то есть Zen даже на одинаковой частоте с предшественниками будет показывать большую производительность (при преобладании представленных инструкций в коде).

Инструкции X87

На сегодняшний день набор инструкций Х87 почти не используется в современных программах, а в процессорах он оставлен для совместивости (тот самый «+» архитектуры х86). Данный набор инструкций уже давно не разивается - не добавляются ни новые инструкции, ни регистры.

Инструкция

K10

Bulldozer

Zen

FLD r

2 (1/2)

2 (0.5)

1 (1)

FST r

2 (1/2)

2 (0.5)

1 (1)

FSTP m80

8 (7)

9 (20)

8

FILD m

6 (1)

12 (1)

8 (1)

FIST m

4 (1)

8 (1)

5 (1)

FISTP m

4 (1)

8 (1)

5 (1)

FADD r

4 (1)

5-6 (1)

5 (1)

FSUB r

4 (1)

5-6 (1)

5 (1)

FMUL r

4 (1)

5-6 (1)

5 (1)

FDIV r

31 (24)

10-42

(5-18)

8-15 (4-6)

FSQRT

35 (35)

10-53

8-21

(4-10)

FXTRACT

9 (41)

10 (5)

10 (7)

FCOS

90

160 (160)

50-115

FSIN

51

65-210 (65-210)

50-170

FLD: загрузка вещественного числа в стек в Zen стала быстрее - 1 такт против 2 тактов, но пропуск увеличился - в K10 и Bulldozer пропуск равнялся 0,5 такта, а в Zen - 1 такт.
FST: с копированием вещественного числа из стека ситуация аналогичная FLD.
FILD: загрузка целого числа в стек в Zen стала быстрее, чем в Bulldozer - 8 тактов против 12, но медленнее, чем в K10 (6 тактов).
FIST: с копированием целого числа из стека ситуация аналогичная FILD.
FISTP: со считыванием целого числа из стека ситуация аналогичная FILD.
FADD: сложение вещественных чисел в Zen происходит за 5 тактов, тогда как в Bulldozer - 5-6, а в K10 - 4.
FSUB: с вычитанием вещественных чисел ситуация аналогичная FADD.
FMUL: с умножением вещественных чисел ситуация аналогичная FADD.
FDIV: деление вещественных чисел действительно стало быстрее - как по задержке, так и по пропуску: Zen выполняет операцию за 8-15 тактов, а Bulldozer - 10-42 и K10 - 31.
FSQRT: извлечение квадратного корня также ускорилось: Zen выполняет операцию за 8-21 тактов, а Bulldozer - 10-53 и K10 - 35.
FXTRACT: извлечение экспоненты и мантиссы у Zen стало медленнее, чем в Bulldozer - увеличился пропуск на 2 такта, при сохранении задержки на прежнем уровне в 10 тактов.
FCOS: вычисление косинуса в Zen происходит быстрее, чем в Bulldozer - 50-115 тактов против 160.
FSIN: с вычислением синуса ситуация аналогичная FCOS.
Как отмечалось выше, набор инструкций Х87 не развивается и сохраняется для совместимости - это видно по времени исполнения инструкций в Zen, где скорость выполнения многих инструкций хоть и выше, чем в Bulldozer, но ниже, чем в K10, который вышел в 2007 году. Из рассмотренных инструкций существенное ускорение получили только деление вещественных чисел FDIV и извлечение квадратного корня FSQRT.

Инструкции MMX

Набор инструкций MMX был анонсирован 1997 году и предложил восемь 64-битных регистров mm и 57 инструкций. На сегодняшний день данный набор инструкций устарел и не развивается - оставлен в современных процессорах для совместимости.

Инструкция

K10

Bulldozer

Zen

MOVD r32, mm

3 (1)

8 (1)

3 (1)

MOVD mm, r32

6 (3)

10 (1)

3 (1)

MOVD mm, m32

4 (1/2)

6 (0.5)

4 (0.5)

MOVQ mm, mm

2 (1/2)

2 (0.5)

1 (0.25)

MOVQ mm, m64

4 (1/2)

6 (0.5)

4 (0.5)

PXOR mm, r

2 (1/2)

2 (0.5)

1 (0.25)

POR

2 (1/2)

2 (0.5)

1 (0.25)

PAND

2 (1/2)

2 (0.5)

1 (0.25)

PANDN

2 (1/2)

2 (0.5)

1 (0.25)

PMADDWD mm, r

3 (1)

4 (1)

3 (1)

PCMPEQB mm, r

2 (1/2)

2 (0.5)

1 (0.33)

MOVD: перессылка данных в Zen в зависимости от операндов стала либо быстрее, либо осталась на уровне K10, например: пересылка из РОН в регистры mm в Zen осуществляется за 3 такта, тогда как в K10 - за 6 тактов.
MOVQ: пересылка учетверенных слов между регистрами mm в Zen вдвое быстрее, чем в K10 - 1 такт против 2 (аналогично и пропуск - 0.25 такта против 0.5).
PXOR: побитовое логическое исключающее ИЛИ в Zen осуществляется за 1 такт против 2 в K10.
С логическим ИЛИ (POR), логическим И (PAND), побитовым логическим НЕ (PANDN) ситуация аналогичная PXOR.
PMADDWD: умножение четырех слов в Zen происходит с той же скоростью, что и в K10 (но быстрее, чем в Bulldozer).
PCMPEQB: проверка равенства байтов в Zen требует 1 такт, а в K10 и Bulldozer - 2 такта.
Как можно заметить, из рассмотренных инструкций значительная часть стала выполняться быстрее в Zen, чем у предшественников.

Инструкции SSE

Наборы инструкций SSE (SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2) получили широкое распространение и до последнего времени (до появления AVX) активно развивались. Данные наборы инструкций решили основные недостатки MMX (работа только с целыми числами и невозможность параллельной работы с MMX и X87) и предоставили восемь (в последствии 16) 128-битных регистров. Большое количество инструкций (около 300), 128-битные регистры, работа с вещественными числами и удобство работы (по сравнению со стеком в Х87) позволили отказаться от MMX и Х87. Рассматротрим некоторые инструкции из наборов SSE.

Инструкция

K10

Bulldozer

Zen

MOVD r32, xmm

3 (1)

8 (1)

3 (1)

MOVD xmm, r32

6 (3)

10 (1)

3 (1)

MOVQ xmm, xmm

2.5 (1/3)

2 (0.5)

1 (0.25)

MOVQ xmm, m64

2 (1/2)

6 (0.5)

4 (0.25)

PXOR xmm, r

2 (1/2)

2 (0.5)

1 (0.25)

ADDPS xmm, xmm

4 (1)

5-6 (0.5)

3 (0.5)

ADDSS xmm, xmm

4 (1)

5-6 (0.5)

3 (0.5)

SUBPS xmm, xmm

4 (1)

5-6 (0.5)

3 (0.5)

MULPS xmm, xmm

4 (1)

5-6 (0.5)

3 (0.5)

MULSS xmm, xmm

4 (1)

5-6 (0.5)

3 (0.5)

DIVPS xmm, xmm

18 (15)

9-24 (4.5-9.5)

10 (3)

SQRTPS xmm, xmm

21 (18)

14-15 (4.5-12)

9-10 (4-5)

ANDPS xmm, xmm

2 (1/2)

2 (0.5)

1 (0.25)

ORPS xmm, xmm

2 (1/2)

2 (0.5)

1 (0.25)

XORPS xmm, xmm

2 (1/2)

2 (0.5)

1 (0.25)

MOVD: перессылка данных в Zen в зависимости от операндов стала либо быстрее, либо осталась на уровне K10, например, пересылка из РОН в регистры xmm в Zen осуществляется за 3 такта, тогда как в K10 - за 6 тактов.
MOVQ: пересылка учетверенных слов между регистрами xmm в Zen в 2,5 раза быстрее, чем в K10 - 1 такт против 2.5.
PXOR: побитовое логическое исключающее ИЛИ в Zen осуществляется за 1 такт против 2 в K10.
ADDPS: параллельное сложение четырех пар чисел с плавающей точкой в Zen происходит за 3 такта, тогда как в K10 - 4, а в Bulldozer - 5-6.
Аналогично и с инструкциями сложения вещественных чисел (ADDSS), параллельного вычитания вещественных чисел (SUBPS) и параллельного умножения вещественных чисел (MULPS и MULSS).
DIVPS: параллельное деление вещественных чисел в Zen стало существенно быстрее, чем в K10 - 10 тактов против 18 (аналогично и с пропуском).
SQRTPS: извлечение квадратных корней из четырех чисел требует 9-10 тактов у Zen, в то время как у K10 - 21 такт, а у Bulldozer - 14-15.
ANDPS: операция побитового логического И в Zen осуществляется за 1 такт, а в в K10 и Bulldozer - за 2 такта.
Аналогично и с операциями побитового логического ИЛИ (ORPS) и побитового логического исключающего ИЛИ (XORPS).
Инструкции AVX Наша Редакция не включила по причине того, что они отсутствуют в K10, а следовательно, не получится проследить развитие микроархитектур.

Заключение

Как можно заметить, компания AMD основательно поработала над микроархитектурой Zen, изменив не только концепцию построения ядра, количество ИУ, декодеров и прочее, но и также сократила тайминги выполнения многих инструкций, что также положительно скажется на производительности в различных приложениях. При этом важно понимать, что «ускорились» далеко не все инструкции, так например, если классические инструкции Х86 в большей своей мере (из рассмотренных) стали выполняться в Zen быстрее по сравнению с предшественниками, то инструкции Х87 практически не получили какого-либо ускорения (что еще раз говорит о том, что набор инструкций Х87 устарел, хотя и остается необходимым для совместимости). Векторные инструкции (MMX и SSE) также стали выполняться быстрее. Таким образом, AMD не просто «скопировала» части K10 и Bulldozer в Zen, а существенно переработала ИУ, сделав их быстрее (интересно будет сравнить по таймингам Intel и AMD).

Остальные материалы по микроархитектуре Zen собраны здесь.

0 logo low

Copyright © by ServersTech.ru, 2015-2018. Копирование запрещено.
Коммерческие предложения, сотрудничество и реклама: cooperation@serverstech.ru
Предложения, вопросы и пожелания читателей: readership@serverstech.ru
Copyright © 2015-2018 ServersTech.ru. Все права сохранены
Copyright © 2015-2018 ServersTech.ru. All rights reserved