Здравствуйте, alpha21264, Вы писали:
A>Я участвовал в проектировании отечественного процессора, и знаю в подробностях, как это всё работает.
Какого? Скалярного или суперскалярного?
A>Так в чём разница между быстрыми и экономичными ядрами? Ведь всё это всё равно надо сделать.
Ладно, раз пошла такая пьянка, то пойдём в документацию, а именно в
Intel® 64 and IA-32 Architectures Optimization Reference Manual: Volume1, от 2024. Смотреть будем на 12 поколение: 13-е в плане архитектуры не имеет принципиальных отличий. Чтобы увидеть, что делать можно по-разному сразу же лезем в описание гибридной архитектуны. На странице 2-7 мы увидим довольно примечательный текст:
Additionally, different software threads see different performance ratios between the P-cores and
E-cores. For example, the performance ratio between the P-cores and E-cores for highly vectorized floating-point
code is higher than that for scalar integer code. So, when the operating system must make an optimal scheduling
decision, it must be aware of the characteristics of the software threads that are candidates for scheduling. Suppose
there are insufficient P-cores and a mix of software threads with different characteristics. In that case, the operating
system should schedule those threads that benefit most from the P-cores onto those cores and schedule the others
on the E-cores.
Т.е. для элементарного сложения двух целых чисел нет большой разницы, на чём его исполнять, но для кода активно использующего SIMD разница значительная.
Я уже писал, что делать можно по-разному — очень многое, на целую статью тянет, слишком круто для ответа на форуме. И оптимизировать можно разные операции. Например, можно оптимизировать операции с частями регистров. Это явно можно увидеть в сносках к таблице 2-3, указанного мануала:
. The Golden Cove microarchitecture implemented performance improvements requiring constraint of the microops which use *H partial registers (i.e. AH, BH, CH, DH). See Section 3.5.2.3 for more details.
Пойдём дальше и посмотрим, что именно произошло:
From Skylake to Ice Lake microarchitectures, operations that access *H registers (i.e., AH, BH, CH, DH) are executed
exclusively on ports 1 and 5.
The *H micro-ops are executed with one cycle latency; however, one cycle of *additional* delay is required for
ensuing UOPs because they depend on the results of the *H operation. This additional delay is required due to
potential data swapping. A swap might happen, for example, with the instruction "Add AH, BL", or "ADD AL, BH." The
pipeline functionality is illustrated in Figure 2-4.
Beginning with the Golden Cove Microarchitecture, the *H operations are limited to Port 1 (port1) with three cycles
of latency. This penalty on *H operations helped performance improvement and timing requirements of the Golden
Cove microarchitecture.
А ещё можно принципиально по-разному организовать выполнение AVX инструкций на энергоэффективных и неэнергоэффектинвых ядрах:
4.1.9 LEGACY INTEL® AVX1/INTEL® AVX2 INSTRUCTION SUPPORT
The Crestmont microarchitecture continues to support Intel® AVX and Intel® AVX2 instructions.
Most 256-bit Intel AVX and Intel AVX2 instructions are decoded as a single instruction and stored as a single μop in the
front-end pipeline. To execute 256-bit instructions on native 128-bit vector execution and load data paths, most
256-bit μops are further subdivided into two independent 128-bit μops at allocation before insertion into the MEC
and FPC reservation stations. These two independent μops are usually assigned to different execution ports, so both
may execute in parallel. In general, 256-bit μops consume twice the allocation, execution, and retirement resources
compared to 128-bit μops.
Для сравнения, что при этом происходит на производительных ядрах (страница 2-26):
Since port 0 and port 1 are 256-bits wide, Intel AVX-512 operations that will be dispatched to port 0 will execute on
port 0 and port 1; however, other operations such as LEA can still execute on port 1 in parallel. See the red block in
Figure 2-9 for the fusion of ports 0 and 1
Можно делать энергоэффективно, как в Атомах, или максимально быстро как в производительных ядрах. Тащемта микроархитектура Gracemont — наследница микроархитектуры атомов.
Я в предыдущем сообщении уже писал где отличия могут быть. Чтобы полностью описать разницу между Golden Cove и Gracemont, нужно сюда почти полностью скопировать документацию. Можно более кратко — посмотреть на блок-схему этих ядер. Предлагаю последнее:
| производительные ядра |
| |
| |
| энергоэффективные ядра |
| |
| |
Думаю заметно и без детального описания, что Golden Cove значительно проще. Также должно быть заметно, что ROB для первых 256, а для вторых — 512. Уже это довольно серьёзно влияет на энергопотребление. Также должно быть хорошо видно, что у первого диспатчер выдаёт 6 микроопераций за такт, а у второго 5.
A>Наш процессор в экономичном режиме не занимался переупорядочиванием инструкций (и всякой другой фигнёй),
A>а просто замирал до тех пор, пока данные не приходили из памяти.
А в неэкономичном? Он вообще этим занимался? Это был суперскалярный или скалярный процессор? Можно взглянуть на документацию?
Переупорядочивание инструкций используется для организации параллелизма на уровне инструкций. Т.е. у тебя могут быть заняты все юниты, которые могут прямо сейчас исполнить следующую микрооперацию. Например это может быть какая-то операция над числами с плавающей точкой. Однако могут быть свободны юниты, выполняющие целочисленные микроперации. В этом случае "THE OUT-OF-ORDER EXECUTION ENGINE" используя буфер(а) переупорядочивания (ROBs) может начать выполнение целочисленной микрооперации, хотя в исходном коде "целочисленный код" идёт после кода перемалывающего числа с плавающей точкой. Или ещё пример, т.к. в атомах (Crestmont, Gracemont, TREMONT) существуют отдельные сдвиговые исполнительные устройства, то вполне возможно, что следующий код выполнится в обратном порядке:
shl eax, cl
add edi, 64
Тебе по большому счёту всё равно в каком порядке он исполняется.
A>При этом не тратил ни одного лишнего такта на лишнюю работу.
Это что означает, как понимать? Причём тут лишняя работа? Как определить что она лишняя?