Multithreading simultané

Le Pentium 4 d’Intel a été le premier processeur de bureau moderne à mettre en œuvre le multithreading simultané, à partir du modèle à 3,06 GHz sorti en 2002, et introduit depuis dans un certain nombre de leurs processeurs. Intel appelle cette fonctionnalité Hyper-Threading Technology, et fournit un moteur SMT de base à deux threads. Intel revendique jusqu’à 30 % d’amélioration de la vitesse par rapport à un Pentium 4 identique, non SMT. L’amélioration des performances est très dépendante de l’application ; cependant, lorsque l’on exécute deux programmes qui requièrent toute l’attention du processeur, on peut avoir l’impression que l’un ou les deux programmes ralentissent légèrement lorsque l’Hyper-Threading est activé. Ceci est dû au système de relecture du Pentium 4 qui utilise des ressources d’exécution précieuses, augmentant la contention pour des ressources telles que la bande passante, les caches, les TLB, les entrées de tampon de réorganisation, égalisant les ressources du processeur entre les deux programmes, ce qui ajoute une quantité variable de temps d’exécution. Le cœur Prescott du Pentium 4 a gagné une file d’attente de relecture, ce qui réduit le temps d’exécution nécessaire au système de relecture. Ceci est suffisant pour surmonter complètement cette baisse de performance.

Les dernières conceptions de l’architecture MIPS d’Imagination Technologies incluent un système SMT connu sous le nom de « MIPS MT ». MIPS MT prévoit à la fois des éléments de traitement virtuels lourds et des microthreads matériels plus légers. RMI, une start-up basée à Cupertino, est le premier fournisseur MIPS à proposer un processeur SOC basé sur huit cœurs, chacun d’entre eux exécutant quatre threads. Les threads peuvent être exécutés en mode « fine-grain », où un thread différent peut être exécuté à chaque cycle. Des priorités peuvent également être attribuées aux threads. Les CPU MIPS d’Imagination Technologies ont deux threads SMT par cœur.

Le Blue Gene/Q d’IBM a un SMT à 4 voies.

Le POWER5 d’IBM, annoncé en mai 2004, se présente sous la forme d’un module double cœur à double puce (DCM), ou d’un module multi puce (MCM) à quatre ou huit cœurs, chaque cœur comprenant un moteur SMT à deux threads. L’implémentation d’IBM est plus sophistiquée que les précédentes, car elle peut attribuer une priorité différente aux différents threads, elle est plus fine et le moteur SMT peut être activé et désactivé dynamiquement, afin de mieux exécuter les charges de travail pour lesquelles un processeur SMT n’augmenterait pas les performances. Il s’agit de la deuxième mise en œuvre par IBM du multithreading matériel généralement disponible. En 2010, IBM a mis sur le marché des systèmes basés sur le processeur POWER7 avec huit cœurs ayant chacun quatre Simultaneous Intelligent Threads. Cela permet de basculer le mode de threading entre un thread, deux threads ou quatre threads en fonction du nombre de threads de processus programmés à ce moment-là. Cela permet d’optimiser l’utilisation du cœur pour un temps de réponse minimal ou un débit maximal. IBM POWER8 a 8 threads simultanés intelligents par cœur (SMT8).

IBM z13 a deux threads par cœur (SMT-2).

Bien que de nombreuses personnes aient rapporté que l’UltraSPARC T1 de Sun Microsystems (connu sous le nom de « Niagara » jusqu’à sa sortie le 14 novembre 2005) et le processeur aujourd’hui disparu portant le nom de code « Rock » (initialement annoncé en 2005, mais après de nombreux retards annulé en 2010) sont des implémentations de SPARC axées presque entièrement sur l’exploitation des techniques SMT et CMP, Niagara n’utilise pas réellement le SMT. Sun appelle ces approches combinées « CMT », et le concept global « Throughput Computing ». Le Niagara possède huit cœurs, mais chaque cœur n’a qu’un seul pipeline, de sorte qu’il utilise en fait le multithreading à grain fin. Contrairement au SMT, où les instructions de plusieurs threads partagent la fenêtre d’émission à chaque cycle, le processeur utilise une politique de round robin pour émettre les instructions du prochain thread actif à chaque cycle. Cela le rend plus proche d’un processeur barillet. Le processeur Rock de Sun Microsystems est différent, il a des cœurs plus complexes qui ont plus d’un pipeline.

Le SPARC T3 d’Oracle Corporation a huit threads à grain fin par cœur, le SPARC T4, le SPARC T5, le SPARC M5, M6 et M7 ont huit threads à grain fin par cœur dont deux peuvent être exécutés simultanément.

Fujitsu SPARC64 VI a un multithreading vertical à grain grossier (VMT) SPARC VII et plus récents ont un SMT à 2 voies.

Intel Itanium Montecito utilisait un multithreading à grain grossier et Tukwila et plus récents utilisent un SMT à 2 voies (avec multithreading à double domaine).

L’Intel Xeon Phi a un SMT à 4 voies (avec multithreading multiplexé dans le temps) avec des threads basés sur le matériel qui ne peuvent pas être désactivés contrairement à l’Hyperthreading ordinaire. L’Intel Atom, sorti en 2008, est le premier produit Intel à proposer le SMT 2 voies (commercialisé sous le nom d’Hyper-Threading) sans prendre en charge le réordonnancement des instructions, l’exécution spéculative ou le renommage des registres. Intel a réintroduit l’Hyper-Threading avec la microarchitecture Nehalem, après son absence sur la microarchitecture Core.

La microarchitecture Bulldozer d’AMD FlexFPU et le cache L2 partagé sont multithreadés mais les cœurs entiers du module sont mono threadés, il ne s’agit donc que d’une implémentation SMT partielle.

La microarchitecture Zen d’AMD possède un SMT à 2 voies.

L’architecture VISC utilise la couche logicielle virtuelle (couche de traduction) pour dispatcher un seul fil d’instructions au Global Front End qui divise les instructions en threadlets matériels virtuels qui sont ensuite dispatchés vers des cœurs virtuels séparés. Ces cœurs virtuels peuvent ensuite les envoyer aux ressources disponibles sur n’importe lequel des cœurs physiques. Plusieurs cœurs virtuels peuvent pousser des threadlets dans le tampon de réorganisation d’un seul cœur physique, qui peut diviser les instructions partielles et les données de plusieurs threadlets par les ports d’exécution en même temps. Chaque cœur virtuel garde la trace de la position de la sortie relative. Cette forme de multithreading peut augmenter les performances du single thread en permettant à un seul thread d’utiliser toutes les ressources du CPU.L’allocation des ressources est dynamique à un niveau de latence proche du cycle unique (1 à 4 cycles selon le changement d’allocation en fonction des besoins de l’application individuelle. Par conséquent, si deux cœurs virtuels sont en concurrence pour les ressources, des algorithmes appropriés sont en place pour déterminer quelles ressources doivent être allouées à quel endroit.