Vés al contingut

Multifil

De la Viquipèdia, l'enciclopèdia lliure

Les unitats centrals de processament amb capacitat de processament multifil són les que tenen maquinari específic per executar eficientment múltiples fils. Es distingeixen dels sistemes de multiprocessament (com els sistemes multi-core) en què els fils han de compartir els recursos d'un sol nucli: les unitats de computació, la memòria cau de la CPU i el Translation Lookaside Buffer (TLB). Mentre que els sistemes de multiprocessament inclouen múltiples unitats de processament completes, la tècnica de multifil té com a objectiu augmentar la utilització d'un sol nucli mitjançant paral·lelisme a nivell de fil així com a nivell d'instrucció. Com que les dues tècniques són complementàries, a voltes es combinen en sistemes amb múltiples CPUs multifil i en CPUs amb múltiples nuclis multifil.

Avantatges

[modifica]

Alguns dels avantatges inclouen:

  • Si un fil d'execució falla contínuament al tractar de trobar dades a la memòria cau, els altres fils poden continuar, prenent avantatge dels recursos no utilitzats, i tot això pot portar a una execució global més ràpida, ja que aquests recursos haurien estat inactius si s'hagués executat només un fil.
  • Si el fil no pot utilitzar tots els recursos de la CPU (perquè les instruccions depenen les unes de les altres), l'execució d'un altre fil pot evitar deixar-los inactius.
  • Si diversos fils treballen en el mateix conjunt de dades, poden compartir la seua memòria cau, resultant en un millor ús d'aquesta memòria o sincronització dels seus valors.

Tipus de multifil a nivell de maquinari

[modifica]

En arquitectura de computadors, s'han desenvolupat tres aproximacions principals al multifil a nivell de maquinari, que es diferencien per la granularitat del canvi de fil i pel moment en el qual es produeix.

Multifil de bloc

[modifica]

El tipus més simple es produeix quan un fil s'executa fins que és bloquejat per un esdeveniment que normalment causaria una aturada de llarga latència. Un exemple típic és un error de memòria cau que requereix accedir a la memòria externa al xip, operació que pot necessitar centenars de cicles de rellotge.[1] En comptes d'esperar que es resolgui l'aturada, el processador commuta l'execució a un altre fil que estigui llest per continuar. Quan les dades del primer fil retornen de la memòria, aquest torna a la cua de fils preparats.

Per aconseguir una commutació ràpida, el maquinari replica els registres visibles del programa i alguns registres de control del processador, com ara el comptador de programa. D'aquesta manera, canviar de fil implica simplement commutarr el conjunt de registres actiu, operació que pot completar-se en un sol cicle de rellotge. Conceptualment, s'assembla a la multitasca cooperativa emprada en els sistemes operatius en temps real, en la qual les tasques cedeixen voluntàriament el control quan han d'esperar un recurs extern.

Multifil de gra fi

[modifica]

L'objectiu del multifil de gra fi és eliminar totes les aturades per dependència de dades del pipeline d'execució. En lloc d'esperar que un fil quedi aturat, el processador commuta de fil en cada cicle de rellotge, de manera que la rodada de temps assignada a cada fil actiu equival a un únic cicle. Atès que els fils són relativament independents entre si, la probabilitat que una instrucció en curs necessiti el resultat d'una instrucció anterior pendent és molt menor que dins d'un sol fil.

Aquest enfocament va rebre originalment la denominació de barrel processing (processament en barril), on les doules del barril representen les etapes del pipeline i els fils que les executen. Les denominacions modernes inclouen multifil entrellaçat, preemptiu o de rodada de temps. A diferència del multifil de bloc, aquest tipus exigeix que cada etapa del pipeline mantingui l'identificador del fil al qual pertany la instrucció que processa. A més, els recursos compartits com les memòries cau i els TLB han de tenir una mida superior per evitar la hiperpaginació entre els fils en execució concurrent.

Multifil simultani

[modifica]

El tipus més avançat de multifil s'aplica als processadors superescalars. Mentre que un processador superescalar convencional emet múltiples instruccions d'un sol fil en cada cicle de rellotge, en el multifil simultani (SMT, de l'anglès Simultaneous Multithreading) el processador pot emetre instruccions de múltiples fils alhora en cada cicle. Com que qualsevol fil individual presenta una quantitat limitada de paral·lelisme a nivell d'instrucció, el SMT tracta d'explotar el paral·lelisme disponible entre fils per reduir el malbaratament associat als espais d'emissió no aprofitats.

Les implementacions més conegudes inclouen la tecnologia Intel Hyper-Threading, la família de processadors POWER d'IBM —des del POWER5 fins al POWER9—, els processadors de la sèrie z de la mateixa empresa i les microarquitectures Bulldozer i Zen d'AMD. Intel reporta millores de fins al 30 % en el rendiment global amb la seva implementació d'aquesta tecnologia.[2]

Consideracions de rendiment

[modifica]

L'eficiència del multifil varia considerablement en funció del cas d'ús. Múltiples fils poden interferir entre si quan comparteixen recursos de maquinari, com ara memòries cau o TLB, de manera que el temps d'execució d'un sol fil pot no millorar i fins i tot pot empitjorar respecte d'un processador sense multifil. Això es deu, en part, a les freqüències de rellotge lleugerament inferiors o a les etapes addicionals del pipeline que el maquinari de commutació de fils requereix.

Des del punt de vista del programari, el suport de maquinari per al multifil exigeix més canvis tant en les aplicacions com en els sistemes operatius que el multiprocessament, atès que la gestió i la planificació dels fils requereix una coordinació explícita. La fusió de resultats de processos paral·lels pot implicar costos notablement superiors als del processament seqüencial, a causa de la comunicació entre processos i dels mecanismes de sincronització necessaris, que en alguns casos arriben a superar en un o dos ordres de magnitud el cost del processament en un sol fil.[3]

  1. Patterson, David A.; Hennessy, John L. Computer Organization and Design: The Hardware/Software Interface. 5a. Waltham: Morgan Kaufmann, 2014. ISBN 978-0-12-407726-3.
  2. «What is Hyper-Threading?». Intel Corporation. [Consulta: 2025].
  3. «Multithreading (computer architecture)». Viquipèdia en anglès. [Consulta: 2025].