AXT>> В 486 появился конвейер для микрокоманд, раньше его не было. Mishka> Дык, я и удивился — зачем её включать в классификацию, если все они были такие. Вот конвеер — уже интереснее, но не пренципиально новее, т.к. обсуждалось, ИМХО, достаточно давно — всё-таки микропрограммы тоже программы. ИМХО, ещё IBM со своими 370 что-то подобное делала.
Ну, я классифицировал только x86, т.е. "первый" - "первый среди x86". Кто первым придумал выполнять
микрокод на конвейере, я не знаю.
Вообще, информацию об истории потрохов ЭВМ как-то трудно оказывается накопать. В основном попадается всякий PR про быстродействие и битность, а хотя бы блок-схемы верхнего уровня есть только для широко распространённых машин (потому как входили в документацию от производителя).
Иногда доходит до смешного: вот тут у нас "Элвис" хвалится своим чипом "Мультикор", и некоторые участники проекта (а конкретно некто Fozzi
) утверждают, что у них самая передовая, уникальная и вообще впервые реализованная архитектура DSP-блока.
Где-то с полгода назад я накачал несколько книжек про цифровую электронику, и с некоторым удивлением обнаружил описание совершенно аналогичной конструкции 1970-х годов. Разве что, она занимала несколько шкафов, а не помещалась в одном кристалле.
Mishka> А зачем ты вообще о нём упомянул-то?
Про пул что ли? Только для уточнения классификации x86 от Интела.
Mishka> Вот с пулом надо будет потрясти наши контакты с IBM — мож чего скажут.
Интересно было бы услышать. Для истории. А то сначала оно всё - "коммерческая тайна", а потом как-то забывается нафиг всеми, уже и не узнать ничего.
AXT>> В смысле, исполняет обе ветки условного перехода? Такой слух действительно ходил в своё время, но - нет. Всегда исполняется только одна трасса, это проверено.Mishka> Мне казалось, что даже не только реклама была. Кстати, а как проверено-то?
Через Performance Counters. Фишка в том, что они считают
в том числе и те события, что произошли в сброшенных трассах (есть и исключения - конечно, событие Instruction Retired не может произойти в сброшенной трассе
). Достаточно вставить чтение из памяти в начале трассы (то есть, одно после команды перехода, другое в точке назначения перехода), включить счёт события L1 Data Cache Access - и мы знаем, сколько всего трасс процессор пытался исполнить.
Если тестировать хорошо предсказуемый код, скажем - цикл на много итераций с математикой внутри - то количество замеренных таким образом трасс превышает количество итераций цикла всего на несколько штук. Т.е. объясняется обучением предсказателя переходов. Попытка исполнять обе ветки привела бы к двукратному увеличению.
Другое дело, что разработчики вполне могли пытаться это сделать. Шутка ли - 20 тактов штрафа за неправильно предсказанный переход!
Mishka> Когда у Терехова делали Самсон
А что это такое? Я не в курсе.
Mishka> — притаскивали интересные статьи про оценки длин конвееров и связи со средними неветвящимися последовательностями и предсказанием переходов. Заодно ещё и влияние компиляторов оценивалось. Там водопровод в 14 команд назыали не очень хорошими словами.
Понятно почему. Мне пришлось немного иметь дело с Blackfin от Analog Devices. Предсказатель переходов у него статический, штраф в худшем случае - 9 тактов плюс выборка. Ну и другие его длинноконвейерные заморочки. На управляющем коде (где, как известно, каждая пятая команда - условный переход) 533 МГц Blackfin еле догоняет 200 МГц ARM9, да и то не всегда.
... так пускай наступает на нас холодным рассветом новый день ...