Le multithreading simultané, acronyme SMT, est une technique permettant d'améliorer l'efficacité globale des processeurs superscalaires grâce au multithreading matériel. Le SMT permet d'exécuter plusieurs threads indépendants afin de mieux utiliser les ressources fournies par les architectures informatiques modernes.

Le concept de multithreading est similaire à celui du multitâche, mais il est mis en œuvre au niveau de l'exécution du fil dans les processeurs superscalaires modernes.

Dans la conception des processeurs, il existe deux façons d'augmenter le parallélisme sur la puce avec moins de ressources nécessaires :

  1. Technique superscalaire : qui tente d'augmenter le parallélisme du niveau d'instruction (ILP) en exécutant plusieurs instructions en même temps (appelé : simultanément) ; en envoyant "simultanément" des instructions (appelé : dispatching d'instructions) à plusieurs unités d'exécution redondantes construites à l'intérieur du processeur.
  2. Technique CMT (Chip-level multithreading) : utilisation du parallélisme au niveau des fils (TLP) afin d'exécuter simultanément les instructions de plusieurs fils dans une même puce de processeur.

Il existe de nombreuses façons de soutenir plus d'un fil à l'intérieur d'une puce, à savoir :

  1. Multithreading entrelacé (IMT) : émission entrelacée d'instructions multiples provenant de différents threads, également appelée Multithreading temporel. Il peut être subdivisé en multithreading à grain fin ou à grain grossier en fonction de la fréquence des problèmes d'entrelacement. Le multithreading à grain fin émet des instructions pour différents threads après chaque cycle, tandis que le multithreading à grain grossier ne passe à l'émission d'instructions à partir d'un autre thread que lorsque le thread en cours d'exécution provoque de longs événements de latence (comme un défaut de page, etc.). Le multithreading à gros grain est plus courant pour les changements de contexte moins fréquents entre les threads. Pour les processeurs avec un pipeline par noyau, le multithreading entrelacé est la seule solution possible, car il ne peut émettre qu'une seule instruction par cycle.
  2. Multithreading simultané (SMT) : Émettre plusieurs instructions à partir de plusieurs fils en un seul cycle. Pour ce faire, le processeur doit être superscalaire.
  3. Multiprocesseur au niveau de la puce (CMP ou Multi-core processor) : intègre deux ou plusieurs processeurs superscalaires dans une puce, chacun exécutant des threads indépendamment.
  4. Toute combinaison d'IMT/SMT/CMP

Le facteur clé pour les distinguer est d'examiner combien d'instructions le processeur peut émettre en un cycle et combien de threads d'où proviennent les instructions.