Re[8]: Аргумент в пользу Windows 11
От: Философ Ад http://vk.com/id10256428
Дата: 15.10.24 19:17
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Ну и как они его экономят-то? Просто медленно работают? Ну пусть нормальные ядра тоже медленно работают.

A>Чудес же не бывает. Если нужно сложить два числа, то их нужно сложить.


Твоё "сложить 2 числа" по огромному конвейеру проходит, пока наконец исполнится. От длинны и сложности этого конвейера, от блоков на этом конвейере и зависит то как быстро оно исполнится и сколько энергии потребует в конечном счёте.

Смотри:
Прежде чем сложить 2 числа, нужно сначала взять инструкцию из память (The Fetch/Decode Unit), потом распознать инструкцию задействовав там же Instruction Decoder или Simple Instruction Decoder, потом обратиться к таблице алиасов регистров (Register Alias Table), потом загнать эту инструкццию в Reorder Buffer, и только потом Retirement Unit может взять оттуда микрооперации и загнать их Integer Unit, который наконец-то сможет сложить два числа. А потом ещё вопрос, что с результатом делать — всё осложняет Register Alias Table.
Это самый-самый минимум, который я выдрал из спецификации к Pentium Pro, притом не всё оттуда переписал. Т.е. не просто так сложить. Это для тебя это выглядит как
add eax, ebx

под капотом всё немного сложнее.

Из того, что я намеренно пропустил в тут — Dispatch/Execute Unit. Это именно та штука, которая выбирает из буфера перестановок микрооперации. Он может быть очень сильно разным, как и колличество исполнительных блоков. Например, в NetBurst этот блок в мануале уже называется "The out-of-order execution core" и он уже содержит несколько буферов переупорядочивания . В Pentium Pro (во всей P6) 5 исполнительных блоков: 2 целочисленных юнита, 2 плавающей точки и один memory-interface юнит. NetBurst уже за так умеет 6 операций диспатчить, притом его 3 АЛУ работают на удвоенной частоте ядра.
Очевидно, что колличество исполнительных блоков может быть сильно разным и работать они могут очень по разному, и устроены могут быть по-разному: могут быть отдельно целочисленные юниты и юниты плавающей точки, а могут быть обобщённые ALU, которые в добавок элементарные целочисленные операции за половину такта выполняют.

А кроме есть, есть ещё много много всякого, в котором я до конца не разобрался и где подробностей не знаю, однако они тоже участвуют в исполнении, тоже влияют на скорость исполнения и в конечном счёте на сожранную в процессе энергию. Это например целевые буферы ветвлений (B ranch Target Buffers), кэши трассировки и блок предсказания переходов (в документации — branch prediction hardware). И ещё много-много чего, что пролетело мимо моего внимания, просто потому что я разбирался только с оптимизацией кода, а не процессор проектировал. Всё это учавствует в "сложить 2 числа".

ЗЫ: У меня слегка подгорает, когда прогер с оргомным опытом говорит про "просто ложить 2 числа"....
Всё сказанное выше — личное мнение, если не указано обратное.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.