Ce este o conductă de instrucțiuni?

click fraud protection

Orice instrucțiune de procesor are mai multe etape de funcționare. Fiecare dintre aceste etape durează un singur ciclu CPU pentru a se finaliza. Aceste etape sunt preluarea instrucțiunilor, decodificarea instrucțiunilor, executarea, accesul la memorie și scrierea înapoi. Respectiv, acestea primesc instrucțiunea care trebuie completată, separă operația de valorile operate on, executați procesul, deschideți registrul în care va fi scris rezultatul și scrieți rezultatul în opened Inregistreaza-te.

Procesoare istorice în ordine

La primele computere, CPU nu folosea o conductă de instrucțiuni. În aceste procesoare, fiecare operație cu un singur ciclu trebuia să aibă loc pentru fiecare instrucțiune. Aceasta a însemnat că au fost necesare cinci cicluri de ceas pentru ca instrucțiunea medie să fie procesată în întregime înainte ca următoarea să poată fi pornită. Este posibil ca unele operațiuni să nu fie nevoie să scrie niciun rezultat într-un registru, ceea ce înseamnă că etapele de acces la memorie și de scriere înapoi pot fi sărite.

Într-un procesor subscalar fără conductă, fiecare parte a fiecărei instrucțiuni este executată în ordine.

Există totuși o problemă care pândește atunci când rulați o instrucțiune completă în ordine înainte de a putea trece la instrucțiunea următoare. Problema este ratarea cache-ului. CPU stochează datele pe care le procesează activ în registru. Acesta poate fi accesat cu o latență de un ciclu. Problema este că registrul este mic, deoarece este încorporat în nucleul procesorului. CPU trebuie să treacă la memoria cache L1 mai mare, dar mai lent, dacă datele nu au fost deja încărcate. Dacă nu este acolo, trebuie să meargă din nou în memoria cache L2 mai mare și mai lent. Următorul pas este memoria cache L3; ultima opțiune este RAM-ul sistemului. Fiecare dintre aceste opțiuni necesită din ce în ce mai multe cicluri CPU pentru a verifica.

Acum, această latență suplimentară poate fi o mare problemă într-un sistem care trebuie să completeze fiecare instrucțiune în ordine înainte de a începe următoarea instrucțiune. Ceea ce a fost un procesor cu 5 cicluri per instrucțiune, poate fi blocat brusc de o instrucțiune pentru zeci sau sute de cicluri de ceas. În tot acest timp, nimic altceva nu se poate întâmpla pe computer. Din punct de vedere tehnic, acest lucru poate fi atenuat oarecum prin existența a două nuclee independente. Nimic, însă, nu îi împiedică pe amândoi să facă același lucru, potențial simultan. Deci, mersul pe traseul multi-core nu rezolvă acest lucru.

Conducta clasică RISC

RISC înseamnă Reduced Instruction Set Computer. Este un stil de design al procesorului care optimizează performanța facilitând decodarea fiecărei instrucțiuni. Acest lucru este în comparație cu CISC sau Complex Instruction Set Computer, care proiectează seturi de instrucțiuni mai complexe, permițând să fie necesare mai puține instrucțiuni pentru a efectua aceleași sarcini.

Designul clasic RISC include o conductă de instrucțiuni. În loc să ruleze oricare dintre cele cinci etape de instrucțiuni în orice ciclu dat, conducta permite efectuarea tuturor celor cinci etape. Desigur, nu puteți rula toate cele cinci etape ale unei instrucțiuni dintr-un ciclu. Dar puteți pune la coadă cinci instrucțiuni consecutive cu o compensare de câte o etapă fiecare. În acest fel, o nouă instrucțiune poate fi completată la fiecare ciclu de ceas. Oferind o potențială creștere a performanței de 5 ori pentru o creștere relativ scăzută a complexității de bază.

Într-un procesor scalar cu pipeline, fiecare etapă a execuției unei instrucțiuni poate fi efectuată o dată pe ciclu de ceas. Acest lucru permite un debit maxim de o instrucțiune finalizată pe ciclu.

Procesoarele care nu au o conductă pot fi întotdeauna sub-scalare, deoarece nu pot executa o instrucțiune completă pe ciclu. Cu această conductă primară în cinci etape, puteți crea un procesor scalar care poate finaliza o instrucțiune pentru fiecare proces. Prin crearea unor conducte și mai ample, puteți crea procesoare superscalare care pot executa mai mult de o instrucțiune pe ciclu de ceas. Desigur, există încă probleme potențiale.

Încă secvenţial

Nimic din toate acestea nu rezolvă problema așteptării mai multor cicluri pentru un răspuns atunci când trebuie să interogați diferitele niveluri de cache și RAM. De asemenea, introduce o nouă problemă. Ce se întâmplă dacă o instrucțiune se bazează pe rezultatul instrucțiunii anterioare? Aceste probleme sunt rezolvate independent cu un dispecer avansat. Planifică cu atenție ordinea de execuție, astfel încât nicio instrucțiune care se bazează pe rezultatul altuia să nu fie prea apropiată. De asemenea, gestionează pierderile de memorie cache, parcând o instrucțiune și înlocuind-o în conductă cu altele instrucțiuni care sunt gata de rulare și nu necesită rezultatul acestuia, reluând instrucțiunea atunci când este gata.

Aceste soluții pot funcționa pe procesoare nepipeline, dar sunt necesare pentru un procesor superscalar care rulează mai mult de o instrucțiune pe ceas. Un predictor de ramură este, de asemenea, foarte util, deoarece poate încerca să prezică rezultatul unei instrucțiuni cu mai mult de un rezultat potențial și să continue să presupună că este corect, dacă nu se dovedește altfel.

Concluzie

O conductă permite ca toate capabilitățile distincte ale procesorului să fie utilizate în fiecare ciclu. Face acest lucru rulând diferite etape ale diferitelor instrucțiuni simultan. Acest lucru nici măcar nu adaugă multă complexitate designului CPU. De asemenea, deschide calea pentru a permite mai multor instrucțiuni să execute o singură etapă pe ciclu.