Это инструкция по конвейерной обработке Intel? - PullRequest
0 голосов
/ 19 января 2019

Насколько я знаю, intel 8086 pipelining это техника
что выбор следующей инструкции при выполнении настоящей инструкции.

В этой статье говорится, что одно из Преимущество конвейерной обработки равно
исключает время ожидания EU и ускоряет обработку .

Я думаю, инструкции типа lea 0x7(%eax), %ecx можно разбить на несколько инструкций
как add $0x7, %eax; lea %eax, %ecx.

Я думаю)
Итак, по определению
Я думаю, что приведенный выше пример соответствует определению intel 8086 pipelining
потому что он выполняет несколько инструкций в одном временном интервале и
поэтому операция ускоряет обработку .

Вопрос)
Мне любопытно, что нижеприведенные инструкции могут быть примером конвейерной обработки.

main:
 mov $0x2, %eax
 mov $0x3, %esi
 lea (%eax), %ecx           # result: 2. Pipeling?
 lea 0x7(%eax), %ecx        # result: 9. Pipeling?
 lea 0x7(%eax,%esi,), %ecx  # result: 12. Pipeling?
 lea 0x7(,%esi,4), %ecx     # result: 19. Pipeling?
 lea 0x7(%eax,%esi,4), %ecx # result: 21. Pipeling?

1 Ответ

0 голосов
/ 19 января 2019

Самые первые компьютеры не были конвейерными.Они получили инструкцию, выполнили все циклы, требуемые инструкциями, и передали следующую инструкцию.В среднем на инструкцию требуется 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) таковы.

потому что он выполняет несколько инструкций в одном временном интервале

Вы на самом деле правы, и несколько инструкций могут быть запущены в одном временном интервале, но это еще один метод, отличный от конвейерного, позволяющийпараллельное выполнение на уровне команд и называется суперскалярным.

...