Multithreading

Schéma d'un process multithread

Un processeur est dit multithread s'il est capable d'exécuter efficacement plusieurs threads simultanément. Contrairement aux systèmes multiprocesseurs (tels les systèmes multi-cœur), les threads doivent partager les ressources d'un unique cœur[1] : les unités de traitement, le cache processeur et le translation lookaside buffer ; certaines parties sont néanmoins dupliquées : chaque thread dispose de ses propres registres et de son propre pointeur d'instruction. Là où les systèmes multiprocesseurs incluent plusieurs unités de traitement complètes, le multithreading a pour but d'augmenter l'utilisation d'un seul cœur en tirant profit des propriétés des threads et du parallélisme au niveau des instructions. Comme les deux techniques sont complémentaires, elles sont parfois combinées dans des systèmes comprenant de multiples processeurs multithreads ou des processeurs avec de multiples cœurs multithreads.

Types de multithreading[modifier | modifier le code]

Il existe différents moyens d'exécuter plusieurs threads sur un même cœur de processeur, selon la façon dont leurs temps d'exécution respectifs sont répartis.

Les threads peuvent s'exécuter à des moments différents (temporal multithreading), soit en changeant de thread à chaque cycle d'horloge (interleaved multithreading), soit lors d'un événement comme un défaut de cache (block multithreading). Ils peuvent aussi s'exécuter simultanément en partageant les unités d'exécution d'un processeur superscalaire (simultaneous multithreading).

Multithreading temporel[modifier | modifier le code]

Le multithreading temporel tire parti du fait que le processeur est souvent inactif. Le multithreading par bloc permet d'exécuter un autre thread lorsqu'un événement arrête l'un d'eux pour une longue période, par exemple un défaut de cache qui nécessite d'attendre un accès à la mémoire. L'interleaved multithreading exécute quant à lui une instruction de chaque thread à tour de rôle, ce qui diminue les chances de devoir attendre le résultat d'une instruction en cours d'exécution et permet à d'autres threads de s'exécuter si l'un d'eux est inactif.

Notes et références[modifier | modifier le code]

  1. David A. Patterson, John L. Hennessy, Computer Organization and Design ARM Edition: The Hardware Software Interface, Morgan Kaufmann, (lire en ligne).

Source[modifier | modifier le code]

Voir aussi[modifier | modifier le code]

Article connexe[modifier | modifier le code]