# Instrucció única, múltiples fils

Instrucció única, múltiples fils (amb acrònim anglès SIMT) és un model d'execució utilitzat en informàtica paral·lela on una instrucció única, múltiples dades (SIMD) es combina amb multithreading. És diferent de SPMD perquè totes les instruccions de tots els "fils" s'executen en un pas de bloqueig. El model d'execució SIMT s'ha implementat en diverses GPU i és rellevant per a la computació de propòsit general en unitats de processament gràfic (GPGPU), per exemple, alguns superordinadors combinen CPU amb GPU.
Els processadors, per exemple un nombre p d'ells, semblen executar moltes més tasques que p. Això s'aconsegueix perquè cada processador té múltiples "fils" (o "elements de treball" o "Seqüència d'operacions de carril SIMD"), que s'executen en pas de bloqueig i són anàlegs als carrils SIMD.
La manera més senzilla d'entendre SIMT és imaginar un sistema multinúcli, on cada nucli té el seu propi fitxer de registre, les seves pròpies ALU (tant SIMD com Scalar) i la seva pròpia memòria cau de dades, però això a diferència d'un sistema multinucli estàndard que té múltiples cachés i descodificadors d'instruccions independents, així com diversos registres independents de comptadors de programes, les instruccions s'emeten de manera sincrònica a tots els nuclis SIMT des d'una sola unitat amb una única memòria cau d'instruccions i un descodificador d'instruccions únic que llegeix instruccions mitjançant un sol comptador de programes.
La diferència clau entre els carrils SIMT i SIMD és que cadascun dels nuclis SIMT pot tenir un punter de pila completament diferent (i, per tant, realitzar càlculs en conjunts de dades completament diferents), mentre que els carrils SIMD són simplement part d'una ALU que no sap res de memòria per si mateix.
SIMT pretén limitar la sobrecàrrega d'obtenció d'instruccions, és a dir, la latència que comporta l'accés a la memòria, i s'utilitza a les GPU modernes (com les de Nvidia i AMD) en combinació amb l'"amagat de latència" per permetre una execució d'alt rendiment malgrat latència considerable en les operacions d'accés a la memòria. Aquí és on el processador està sobresubscriptor amb tasques de càlcul i és capaç de canviar ràpidament entre tasques quan, d'altra manera, hauria d'esperar a la memòria. Aquesta estratègia és comparable al multithreading a les CPU (no s'ha de confondre amb multi-core). Igual que amb SIMD, un altre avantatge important és la compartició de la lògica de control per molts carrils de dades, que comporta un augment de la densitat computacional. Un bloc de lògica de control pot gestionar N carrils de dades, en lloc de replicar la lògica de control N vegades.

## Referències

* ↑ Areej. «SIMD vs SIMT vs SMT: What's the Difference Between Parallel Processing Models?» (en anglès). https://www.hardwaretimes.com,+21-06-2020.+[Consulta: 8 març 2023].
* ↑ Michael McCool. Structured Parallel Programming: Patterns for Efficient Computation. Elsevier, 2013, p. 52.
* ↑ "An experimental study on performance portability of OpenCL kernels" a Symp. Application Accelerators in High Performance Computing (SAAHPC).
* ↑ «Advanced Topics in CUDA» (en anglès). cc.gatech.edu, 2011. Arxivat de l'original el 2015-09-23. [Consulta: 28 agost 2014].
* ↑ Michael McCool; James Reinders; Arch Robison Structured Parallel Programming: Patterns for Efficient Computation. Elsevier, 2013, p. 209 ff.