Canalització d'instruccionsEn enginyeria informàtica, la canalització d'instruccions és una tècnica per implementar el paral·lelisme a nivell d'instrucció dins d'un sol processador. La canalització intenta mantenir ocupada totes les parts del processador amb algunes instruccions dividint les instruccions entrants en una sèrie de passos seqüencials (el "pipeline" homònim) realitzats per diferents unitats de processador amb diferents parts d'instruccions processades en paral·lel.[1]
Concepte i motivacióEn un ordinador canalitzat, les instruccions flueixen a través de la unitat central de processament (CPU) per etapes. Per exemple, pot tenir una etapa per a cada pas del cicle de von Neumann: buscar la instrucció, buscar els operands, fer la instrucció, escriure els resultats. Un ordinador canalitzat normalment té "registres de canalització" després de cada etapa. Aquests emmagatzemen informació de la instrucció i els càlculs perquè les portes lògiques de la següent etapa puguin fer el següent pas.[2] Aquesta disposició permet a la CPU completar una instrucció a cada cicle de rellotge. És habitual que les etapes parells funcionin en una vora del rellotge d'ona quadrada, mentre que les etapes senars operen a l'altra vora. Això permet més rendiment de la CPU que un ordinador multicicle a una velocitat de rellotge determinada, però pot augmentar la latència a causa de la sobrecàrrega afegida del propi procés de canalització. A més, tot i que la lògica electrònica té una velocitat màxima fixa, un ordinador canalitzat es pot fer més ràpid o més lent variant el nombre d'etapes de la canonada. Amb més etapes, cada etapa fa menys treball, de manera que l'etapa té menys retards de les portes lògiques i podria funcionar a una velocitat de rellotge més alta. Un model d'ordinador canalitzat sovint és el més econòmic, quan el cost es mesura com a portes lògiques per instrucció per segon. En cada instant, una instrucció només es troba en una etapa de pipeline i, de mitjana, una etapa de pipeline és menys costosa que un ordinador multicicle. A més, quan es fa bé, la major part de la lògica de l'ordinador canalitzat s'utilitza la major part del temps. En canvi, els ordinadors fora de servei solen tenir grans quantitats de lògica inactiva en un moment determinat. Càlculs similars solen mostrar que un ordinador canalitzat utilitza menys energia per instrucció. Tanmateix, un ordinador canalitzat sol ser més complex i més costós que un ordinador multicicle comparable. Normalment té més portes lògiques, registres i una unitat de control més complexa. De la mateixa manera, pot utilitzar més energia total, mentre que utilitza menys energia per instrucció. Les CPU fora d'ordre solen fer més instruccions per segon perquè poden fer diverses instruccions alhora.[3] Nombre de passosEl nombre de passos dependents varia segons l'arquitectura de la màquina. Per exemple:
A mesura que el pipeline es fa "més profund" (amb un major nombre de passos dependents), un pas determinat es pot implementar amb un circuit més senzill, que pot permetre que el rellotge del processador funcioni més ràpid.[4] Aquestes canonades es poden anomenar superpipelines. [5] Es diu que un processador està completament canalitzat si pot obtenir una instrucció en cada cicle. Per tant, si algunes instruccions o condicions requereixen retards que impedeixen obtenir noves instruccions, el processador no està completament canalitzat. PerillsEl model d'execució seqüencial suposa que cada instrucció es completa abans que comenci la següent; aquesta hipòtesi no és certa en un processador canalitzat. Una situació on el resultat esperat és problemàtic es coneix com a perill. Imagineu les dues instruccions de registre següents a un processador hipotètic: 1: afegir 1 a R5 2: copieu R5 a R6 Si el processador té els 5 passos enumerats a la il·lustració inicial (el 'conducte bàsic de cinc etapes' a l'inici de l'article), la instrucció 1 s'obtindria a l'instant t 1 i la seva execució es completaria a t 5 . La instrucció 2 s'obtindria a t ₂ i es completaria a t 6 . La primera instrucció pot dipositar el número incrementat a R5 com a cinquè pas (registrar escriptura) a t 5 . Però la segona instrucció podria obtenir el número de R5 (per copiar a R6) en el seu segon pas (decodificació d'instruccions i recuperació de registre) en el moment t ₃ . Sembla que la primera instrucció no hauria incrementat el valor per llavors. El codi anterior invoca un perill. L'escriptura de programes informàtics en un llenguatge compilat pot no plantejar aquestes preocupacions, ja que el compilador podria estar dissenyat per generar codi màquina que eviti perills. SaltsUna bifurcació fora de la seqüència d'instruccions normal sovint implica un perill. A menys que el processador pugui donar efecte a la branca en un sol cicle de temps, la canalització continuarà obtenint instruccions seqüencialment. No es pot permetre que aquestes instruccions tinguin efecte perquè el programador ha desviat el control a una altra part del programa. Una branca condicional és encara més problemàtica. El processador es pot ramificar o no, depenent d'un càlcul que encara no s'hagi produït. Diversos processadors poden aturar-se, poden intentar la predicció de branques i poden començar a executar dues seqüències de programes diferents (execució ansiosa), cadascun assumint que la branca s'ha pres o no, descartant tot el treball relacionat amb la conjectura incorrecta. Exemple il·lustratA la dreta hi ha un pipeline genèric amb quatre etapes: buscar, descodificar, executar i escriure enrere. El quadre gris superior és la llista d'instruccions a l'espera d'executar-se, el quadre gris inferior és la llista d'instruccions que s'han acabat d'executar i el quadre blanc del mig és la canalització. L'execució és la següent:
Referències
|