Самые первые компьютеры не были конвейерными.Они получили инструкцию, выполнили все циклы, требуемые инструкциями, и передали следующую инструкцию.В среднем на инструкцию требуется 5-6 циклов.Такое поведение было справедливо для всех компьютеров вплоть до середины 80-х годов, включая 8086 (представленный в 78).
В конце семидесятых люди обнаружили, что конвейер является эффективным способом повышения эффективности.Первым коммерческим чипом была IBM 801, но успех конвейера был с Sun Sparc, Berkeley Risc и MIPS, в середине восьмидесятых.
Идея состоит в том, чтобы разделить все инструкции на одинаковые этапы и связать эти этапы с независимыми ресурсами HW таким образом, чтобы вы могли начать новую инструкцию, не дожидаясь завершения предыдущей, что позволяетначать новую инструкцию за цикл.Чтобы справиться с взаимодействием команд (опасностями), это больше 1 инструкции каждые ~ 1,5 цикла, но выигрыш по сравнению с предыдущим поколением огромен (производительность X3).
Проблема состоит в том, что конвейерная обработка требует определенных наборов команд, основанных нана простом перемещении данных (так называемые наборы команд RISC).Новые компьютеры были основаны на этой схеме, но наборы инструкций старых процессоров не были адаптированы (включая x86).
Чтобы получить выгоду от конвейерного преимущества, сохраняя совместимость с восходящей версией, Intel решила создать микроархитектуру на основе двух частей: первая получает инструкции x86 и переводит их в конвейерные (называемые μOps), а вторая -конвейерное выполнение этих μOps.Впервые он был представлен в Pentium Pro (выпущен в 1995 году) и присутствует во всех последующих версиях.
Код, который вы даете
lea 0x7 (% eax),% ecx
переведено на
add $ 0x7,% eax;
lea% eax,% ecx
является примером перевода µOps,Перевод особенно полезен, если преобразовать операции ALU с операндом в памяти в более простые операции, выполняющие одну задачу (передача памяти или операция ALU).
В настоящее время все компьютеры конвейерны (за исключением некоторых простых микроконтроллеров или некоторых процессоров, встроенных вFPGA).
Независимо от того, какую последовательность инструкций вы дадите, они будут выполняться по конвейеру, включая, конечно, те, которые заданы вами.Единственное ограничение заключается в том, что в зависимости от взаимодействия команд могут быть опасности, которые могут привести к замедлению (остановке) конвейера.
Я думаю, что приведенный выше пример соответствует определению конвейерной обработки Intel 8086
Конвейер является характеристикой микроархитектуры, а не набора команд.Таким образом, микроархитектура 8086 НЕ была конвейерной, но последующие архитектурные реализации ее набора команд (называемые x86 или IA32) таковы.
потому что он выполняет несколько инструкций в одном временном интервале
Вы на самом деле правы, и несколько инструкций могут быть запущены в одном временном интервале, но это еще один метод, отличный от конвейерного, позволяющийпараллельное выполнение на уровне команд и называется суперскалярным.