Какво е тръбопровод с инструкции?

click fraud protection

Всяка инструкция на процесора има няколко етапа на своята работа. Всеки един от тези етапи отнема един цикъл на процесора, за да завърши. Тези етапи са извличане на инструкции, декодиране на инструкции, изпълнение, достъп до паметта и обратно записване. Съответно те получават инструкцията, която трябва да бъде изпълнена, отделете операцията от управляваните стойности на, изпълнете процеса, отворете регистъра, в който ще бъде записан резултатът, и запишете резултата в отворения регистрирам.

Исторически подредени процесори

В ранните компютри процесорът не е използвал конвейер за инструкции. В тези процесори всяка операция с един цикъл трябваше да се случи за всяка инструкция. Това означаваше, че са необходими пет тактови цикъла, за да бъде обработена цялата средна инструкция, преди да може да бъде стартирана следващата. Някои операции може да не се нуждаят от записване на резултат в регистър, което означава, че достъпът до паметта и етапите на обратно запис могат да бъдат пропуснати.

В субскаларен процесор без конвейер всяка част от всяка инструкция се изпълнява по ред.

Има обаче проблем, който се крие, когато изпълнявате пълна инструкция в ред, преди да можете да преминете към следващата инструкция. Проблемът е в пропуска на кеша. Процесорът съхранява данните, които активно обработва, в регистъра. Това може да бъде достъпно със закъснение от един цикъл. Проблемът е, че регистърът е малък, защото е вграден в ядрото на процесора. Процесорът трябва да премине към по-големия, но по-бавен L1 кеш, ако данните вече не са заредени. Ако не е там, трябва отново да премине към по-големия и по-бавен L2 кеш. Следващата стъпка е L3 кеша; последната опция е системната RAM памет. Всяка от тези опции отнема повече и повече процесорни цикли за проверка.

Сега тази допълнителна добавена латентност може да бъде голям проблем в система, която трябва да изпълни всяка инструкция по ред изцяло, преди да започне следващата инструкция. Това, което беше процесор с 5 цикъла на инструкция, може внезапно да се задържи на една инструкция за десетки или стотици тактови цикли. През цялото време нищо друго не може да се случи на компютъра. Технически това може да бъде облекчено донякъде чрез наличието на две независими ядра. Нищо обаче не ги спира и двамата да правят едно и също нещо, потенциално едновременно. Така че преминаването по многоядрения маршрут не коригира това.

Класическият RISC тръбопровод

RISC означава Компютър с намален набор от инструкции. Това е стил на дизайн на процесора, който оптимизира производителността, като улеснява декодирането на всяка инструкция. Това е в сравнение с CISC или Complex Instruction Set Computer, който проектира по-сложни набори от инструкции, позволявайки по-малко инструкции да бъдат необходими за изпълнение на същите задачи.

Класическият RISC дизайн включва тръбопровод с инструкции. Вместо да изпълнява който и да е от петте етапа на инструкции във всеки даден цикъл, тръбопроводът позволява да бъдат изпълнени всичките пет етапа. Разбира се, не можете да изпълнявате всичките пет етапа на една инструкция в цикъл. Но можете да поставите на опашка пет последователни инструкции с отместване от един етап всяка. По този начин може да се изпълнява нова инструкция за всеки такт. Предлага потенциално 5x увеличение на производителността за относително ниско увеличение на сложността на ядрото.

В скаларно конвейерния процесор всеки етап от изпълнението на инструкциите може да се извърши веднъж на тактов цикъл. Това позволява максимална производителност от една завършена инструкция на цикъл.

Процесорите, които нямат тръбопровод, могат да бъдат само подскаларни, тъй като не могат да изпълнят една пълна инструкция на цикъл. С този първичен петстепенен конвейер можете да създадете скаларен процесор, който може да изпълни инструкция за всеки процес. Чрез създаването на още по-обхватни тръбопроводи можете да създадете суперскаларни процесори, които могат да изпълняват повече от една инструкция на тактов цикъл. Разбира се, все още има потенциални проблеми.

Все още последователно

Нищо от това не решава проблема с изчакването на много цикли за отговор, когато трябва да се направи запитване към различните нива на кеш и RAM. Освен това въвежда нов проблем. Какво става, ако една инструкция разчита на резултата от предишната инструкция? Тези проблеми се решават самостоятелно с напреднал диспечер. Той внимателно планира реда на изпълнение, така че никакви инструкции, които разчитат на изхода на друг, да не са твърде близо една до друга. Той също така обработва пропуски в кеша, като паркира инструкция и я заменя в конвейера с друга инструкции, които са готови за изпълнение и не изискват своя резултат, възобновявайки инструкцията, когато е готова готов.

Тези решения могат да работят на неконвейерни процесори, но са необходими за суперскаларен процесор, който изпълнява повече от една инструкция на такт. Предсказателят на разклонения също е много полезен, тъй като може да се опита да предскаже резултата от инструкция с повече от един потенциален резултат и да продължи да приема, че е правилен, освен ако не се докаже противното.

Заключение

Конвейерът позволява всички отделни възможности на процесора да се използват във всеки цикъл. Той прави това, като изпълнява различни етапи на различни инструкции едновременно. Това дори не добавя много сложност към дизайна на процесора. Той също така проправя пътя за позволяване на повече от една инструкция за изпълнение на един етап на цикъл.