CPU

Эволюция Intel Core: Nehalem, Sandy Bridge, Haswell, Skylake. Часть 5


В данном материале редакция ServersTech.ru детально разберет микроархитектуру Skylake, проследив как изменились задержка и пропуск инструкций с Nehalem.

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

Остальные материалы по микроархитектуре Skylake и эволюции Intel Core собраны здесь.

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

Инструкции X86

Инструкция

Nehalem

Sandy Bridge

Haswell

Skylake

MOV r64, m64

2 (1)

2 (0.5)

2 (0.5)

2 (0.5)

XCHG r, r

2 (2)

2 (1)

2 (1)

2 (1)

XCHG r, m

20

25

21

23

PUSH r

3 (1)

3 (1)

3 (1)

3 (1)

POP r

2 (1)

2 (0.5)

2 (0.5)

2 (0.5)

ADD r, r

1 (0.33)

1

1 (0.25)

1 (0.25)

SUB r, r

1 (0.33)

1

1 (0.25)

1 (0.25)

NEG r

1 (0.33)

1

1 (0.25)

1 (0.25)

INC r

1 (0.33)

1

1 (0.25)

1 (0.25)

DEC r

1 (0.33)

1

1 (0.25)

1 (0.25)

AND r, r

1 (0.33)

1

1 (0.25)

1 (0.25)

OR r, r

1 (0.33)

1

1 (0.25)

1 (0.25)

XOR r, r

1 (0.33)

1

1 (0.25)

1 (0.25)

MUL r64

3 (2)

3 (1)

3 (1)

3 (1)

IMUL r64, r64

3 (1)

3 (1)

3 (1)

3 (1)

DIV r64

28-90 (19-69)

30-94 (22-76)

32-96 (21-74)

35-88 (21-83)

IDIV r64

37-100 (26-86)

40-103 (25-84)

39-103 (24-81)

42-95 (24-90)

MOV: инструкция копирования из памяти в РОН с 2008 года (Nehalem) требует двух тактов (при этом переход с Nehalem на Sandy Bridge снизил пропуск с 1 такта до 0.5).
XCHG: инструкция обмена информацией между РОН также требует 2 такта, как и MOV (с пропуском ситуация аналогичная – переход Nehalem - Sandy Bridge снизил его вдвое).
PUSH: инструкция помещения числа в стек не претерпела каких-либо изменений с 2008 года и требует 3 такта.
POP: извлечение числа из вершины стека незначительно ускорилось – снизился пропуск с 1 до 0.5 такта.
Сложение (ADD) и вычитание (SUB) выполняются на Core за 1 такт (за годы развития Core изменился только пропуск – сократился с 0.33 до 0.25 такта). Аналогичная ситуация и с изменением знака числа (NEG), инкрементом (INC), декрементом (DEC), логическим И (AND), логическим ИЛИ (OR) и логическим исключающем ИЛИ (XOR).
MUL: беззнаковое умножение не ускорилось (разве что при переходе Nehalem-Sandy Bridge снизился пропуск с 2 до 1 такта).
IMUL: умножение не претерпело каких-либо изменений.
DIV: с беззнаковым делением ситуация неоднозначная – с одной стороны по минимальной задержке Skylake даже медленнее Nehalem – 35 тактов против 28; с другой стороны по максимальной – Skylake немного быстрее Nehalem. Одно можно сказать точно – минимальная задержка с каждым новым Core только растет (стоит заметить, что пропуск у Skylake больше, чем у Nehalem).
IDIV: с делением ситуация аналогичная DIV.

Инструкции X87

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

Инструкция

Nehalem

Sandy Bridge

Haswell

Skylake

FLD r

1 (1)

1 (1)

1 (0.5)

1 (0.5)

FST r

1 (1)

1 (1)

1 (0.5)

1 (0.5)

FSTP m80

5 (5)

5 (5)

1 (5)

4 (5)

FILD m

6 (1)

6 (1)

6 (1)

5 (1)

FIST m

7 (1)

7 (2)

7 (1)

7 (1)

FISTP m

7 (1)

7 (2)

7 (1)

7 (1)

FADD r

3 (1)

3 (1)

3 (1)

3 (1)

FSUB r

3 (1)

3 (1)

3 (1)

3 (1)

FMUL r

5 (1)

5 (1)

5 (1)

5 (1)

FDIV r

7-27 (7-27)

10-24 (10-24)

10-24 (8-18)

14-16 (4-5)

FSQRT

27

10-24

10-23 (8-17)

14-21 (4-7)

FXTRACT

13

10

15 (11)

11 (11)

FCOS

40-100

47-115

112

50-130

FSIN

40-100

47-110

47-106

50-120

Из рассмотренных инструкций большая часть не претерпела существенных изменений (FIST, FISTP, FLD, FST, FADD, FSUB, FMUL, FILD). Деление вещественных чисел (FDIV) по минимальной задержке в Skylake выполняется дольше, чем в Nehalem, но по максимальной – быстрее (при этом пропуск существенно сократился). Извлечение квадратного корня (FSQRT) определенно ускорилось – Nehalem требовалось 27 тактов на выполнение, а Skylake – 14-21 такт. Извлечение экспоненты и мантиссы (FXTRACT) в Skylake требует чуть меньше тактов, чем у Nehalem – 11 тактов против 13. Вычисление косинуса (FCOS) и синуса (FSIN) замедлилось – Nehalem требовалось 40-100 тактов, а Skylake – 50-130. Но как отмечалось ранее и в том числе в материалах по микроархитектре Zen, Х87 устарел и Интел не желает «ускорять» инструкции данного набора.

Инструкции MMX

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

Инструкция

Nehalem

Sandy Bridge

Haswell

Skylake

MOVD r32, mm

2 (0.33)

1

1 (1)

2 (1)

MOVD mm, r32

2 (0.33)

1

1 (1)

2 (1)

MOVD mm, m32

2 (1)

3 (0.5)

3 (0.5)

2 (0.5)

MOVQ mm, mm

1 (0.33)

1

1 (0.33)

1 (0.5)

MOVQ mm, m64

2 (1)

3 (0.5)

3 (0.5)

2 (0.5)

PXOR mm, mm

1 (0.33)

1

1 (0.33)

1 (0.5)

POR

1 (0.33)

1

1 (0.33)

1 (0.5)

PAND

1 (0.33)

1

1 (0.33)

1 (0.5)

PANDN

1 (0.33)

1

1 (0.33)

1 (0.5)

PMADDWD mm, mm

3 (2)

5 (1)

5 (1)

5 (0.5)

PCMPEQB mm, mm

1 (0.5)

1 (0.5)

1 (0.5)

1 (1)

С MMX-инструкциями ситуация аналогична X87 – Интел не развивает его, поэтому тайминги команд почти не изменились (некоторые команды в Skylake стали выполняться даже медленнее, чем в Nehalem).

Инструкции SSE

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

Инструкция

Nehalem

Sandy Bridge

Haswell

Skylake

MOVD r32, xmm

2 (0.33)

1

1 (1)

2 (1)

MOVD xmm, r32

2 (0.33)

1

1 (1)

2 (1)

MOVQ xmm, xmm

1 (0.33)

1

1 (0.33)

1 (0.33)

MOVQ xmm, m64

2 (1)

3 (0.5)

3 (0.5)

2 (0.5)

PXOR xmm, xmm

1 (0.33)

1

1 (0.33)

1 (0.33)

ADDPS xmm, xmm

3 (1)

3 (1)

3 (1)

4 (0.5)

ADDSS xmm, xmm

3 (1)

3 (1)

3 (1)

4 (0.5)

SUBPS xmm, xmm

3 (1)

3 (1)

3 (1)

4 (0.5)

MULPS xmm, xmm

4 (1)

5 (1)

5 (0.5)

4 (0.5)

MULSS xmm, xmm

4 (1)

5 (1)

5 (0.5)

4 (0.5)

DIVPS xmm, xmm

7-14 (7-14)

10-14 (10-14)

10-13 (7)

11 (3)

SQRTPS xmm, xmm

7-18 (7-18)

10-14 (10-14)

11 (7)

12 (3)

ANDPS xmm, xmm

1 (1)

1 (1)

1 (1)

1 (0.33)

ORPS xmm, xmm

1 (1)

1 (1)

1 (1)

1 (0.33)

XORPS xmm, xmm

1 (1)

1 (1)

1 (1)

1 (0.33)

Большая часть из рассмотренных инструкций SSE осталась без изменений. Наибольшее ускорение получили инструкции: параллельное деление четырех пар чисел (DIVPS) на Skylake выполняется за 11 тактов (пропуск - 3 такта), в то время как у Nehalem – 7-14 тактов (пропуск – 7-14 тактов); извлечение квадратных корней четырех чисел (SQRTPS) выполняется на Skylake за 12 тактов (пропуск - 3 такта), а на Nehalem – 7-18 тактов (пропуск 7-18 тактов).

Инструкции AVX

Набор 256-битных инструкций AVX появился в 2011 году в процессорах Sandy Bridge. Для работы с новым набором инструкций регистры XMM расширили с 128 до 256 бит (16 регистров YMM). В 2013 году в процессорах Haswell был реализован новый набор инструкций AVX 2.0, добавивший новые инструкции. На сегодняшний день компания Интел активно развивает AVX, добавляя новые инструкции и регистры (так например, набор инструкций AVX-512 предоставляет 32 512-битных регистра ZMM).
Инструкции AVX Nehalem не поддерживает, поэтому он исключен из таблицы.

Инструкция

Sandy Bridge

Haswell

Skylake

VMOVAPS ymm, ymm

1 (1)

0-1 (1)

0-1 (0.25)

VMOVUPS ymm, m256

4 (1)

3 (0.5)

3 (0.5)

VMOVUPS m256, ymm

3 (1)

4 (1)

3 (1)

VADDPS ymm, ymm, ymm

3 (1)

3 (1)

4 (0.5)

VHSUBPS ymm, ymm, ymm

5 (2)

5 (2)

6 (2)

VMULPS ymm, ymm, ymm

5 (1)

5 (0.5)

4 (0.5)

VMULPD ymm, ymm, ymm

5 (1)

5 (0.5)

4 (0.5)

VDIVPS ymm, ymm, ymm

21-29 (20-28)

18-21 (14)

11 (5)

VDIVPD ymm, ymm, ymm

21-45 (20-44)

19-35 (16-28)

13-14 (8)

VSQRTPS ymm, ymm

21-28 (21-28)

19 (14)

12 (6)

VSQRTPD ymm, ymm

21-43 (21-43)

28-29 (16-28)

15-16 (9-12)

VAND ymm, ymm, ymm

1 (1)

1 (1)

1 (0.33)

Как можно заметить существенное ускорение получили следующие инструкции: деление (VDIVPS) в Skylake осуществляется за 11 тактов (пропуск 5 тактов), а в Sandy Bridge – за 21-29 тактов (пропуск 20-28 тактов). Также «ускорилось» и деление упакованных чисел (VDIVPD) - Skylake осуществляет за 13-14 тактов (пропуск 8 тактов), а в Sandy Bridge – 21-45 (пропуск 20-44); извлечение корня (VSQRTPS) в Skylake осуществляется за 12 тактов (пропуск 6), а в Sandy Bridge – за 21-28 (пропуск 21-28); извлечение корней из упакованных чисел (VSQRTPD) в Skylake осуществляется за 15-16 тактов (пропуск 9-12), а в Sandy Bridge – за 21-43 (пропуск 21-43).

Заключение

Классические наборы инструкций (X86, X87, MMX) не получили существенного ускорения за годы развития Core (так как морально устарели и оставлены в процессорах для совместимости). Наборы инструкций SSE получили незначительные изменения (вероятно, только по причине того, что используют младшую половину регистров YMM). Инструкции AVX за годы развития Core получили существенное ускорение – в некоторых случаях тайминги сократились вдвое, что доказывает их приоритетность.
Постоянное увеличение разрядности инструкций и регистров - до 80 бит в X87, до 64 бит в MMX, до 128 бит в SSE, до 256 бит в AVX (до 512 бит в AVX-512) - обусловленно несколькими факторами:
- тактовая частота процессоров за последние годы практически не выросла, то есть наиболее простой способ повышения производительности стал фактически недоступным;
- увеличение количества вычислительных потоков упирается не только в оптимизацию программного обеспечения под многопоточные процессоры, но и в размер кристалла и тепловыделение (а ведь с увеличением кристалла растет не только стоимость, но и сложность изготовления);
- эффективность увеличения разрядности инструкций доказана еще в конце 90х, когда после оптимизации существующих программ под MMX и SSE удалось существенно повысить их скорость работы.
Стремление Intel и AMD к увеличению разрядности регистров и инструкций вполне очевидно, так например, одна инструкция AVX способна перемножить 4 пары чисел за практически тоже самое время, что и классическая инструкция умножения одной пары чисел из набора Х86/Х87. Именно поэтому, Intel представила новые 512-битные инструкции AVX-512 в процессорах Skylake-SP, что позволяет одной инструкцией обрабатывать уже 8 пар чисел.
Здесь важно понимать, что современные Х86-процессоры по сути движутся к VLIW-архитектуре, где инструкции могут быть больше 256 бит, поэтому увеличение разрядности до 1024 бит вполне вероятно и обусловленно тем, что увеличение разрядности ИУ требует меньше «транзисторов», чем увеличение количества ядер, что особенно актуально на фоне трудностей, связанных с осовением «тонких» тех.процессов в последние годы.

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