# Multiprocesseur

Un ordinateur multiprocesseur est doté de plusieurs processeurs, et est donc une forme d'architecture parallèle.

## But

Plusieurs formes de parallélismes sont exploitables dans les systèmes informatiques. Les ordinateurs multiprocesseurs permettent un parallélisme de tâches, où un processus peut être exécuté sur chaque processeur. On obtient ainsi une plus grande puissance de calcul qu'avec un ordinateur uniprocesseur, qui peut être utilisée soit pour plusieurs programmes qui disposeraient chacun d'un processeur, soit pour des programmes spécialement conçus, qui sont capables de répartir leurs calculs sur les différents processeurs.
Cette technologie a été utilisée pour des supercalculateurs, mais elle peut aussi l'être pour s'affranchir des limites de la montée en fréquence des processeurs : de nombreux processeurs actuels sont dits multicœurs, et embarquent en fait plusieurs uniprocesseurs sur une même puce.

## Topologie d'interconnexion

Un réseau permet la communication entre les différents processeurs et la mémoire. Sa topologie a une influence importante sur les propriétés du système. À peu près toutes les topologies ont été utilisées ; on peut néanmoins en illustrer quelques-unes :
* Bus, ou torique.
* Cube, hypercube.
* Complètement connecté.
* Chaînés.
* Étoile.
* Arbres, « fat trees ».
* Matrice de commutation (« crossbar »).

## Organisation de la mémoire

L'accès à la mémoire influence beaucoup les performances et la façon de programmer de telles architectures. En général, on distingue trois classes de multiprocesseurs selon la façon dont les processeurs accèdent à la mémoire :
* un accès symétrique (Symmetric MultiProcessing, ou SMP), qui correspond à une connexion de tous les processeurs à une unique mémoire partagée. Cette technique est beaucoup utilisée pour de petits systèmes (typiquement avec moins de 10 processeurs), comme les processeurs multicœurs ;
* un accès non uniforme (Non Uniform Memory Access, ou NUMA), où la mémoire est distribuée dans différents «nœuds». Le temps d'accès à la mémoire n'est alors plus constant, et dépend de l'endroit auquel le processeur tente d'accéder. De plus, chaque processeur peut disposer d'un cache : si les caches sont cohérents, on parle d'architecture ccNUMA (cache coherent NUMA) ; sinon, l'architecture est dite ncNUMA (No cache).

## Processeurs multicœurs

Les systèmes multiprocesseurs consomment beaucoup d'énergie et dégagent beaucoup de chaleur. Ces deux facteurs sont limitant dans les contextes où les processeurs sont étroitement confinés (serveurs lames par exemple), soit en très grand nombre (datacenter regroupant des milliers d'ordinateurs, ou superordinateurs massivement parallèles).
La technologie nommée multicœurs (multicore en anglais) permet d'assembler plusieurs cœurs de processeurs côte-à-côte sur le silicium : le support (connectique qui relie le processeur à la carte électronique) lui ne change pas. Certains éléments, comme l'antémémoire (la mémoire cache) peuvent être mis en commun.
Il est possible de remplacer, en utilisant exactement les mêmes supports, les deux processeurs précédents par leur équivalent multicœurs. Ceux-ci pourront par exemple fonctionner à la fréquence de 2,8 GHz. La machine résultante sera donc toujours dotée de deux processeurs, mais de quatre cœurs, toutefois la fréquence de calcul vaudra toujours 2,8 GHz (chaque cœur du processeur aura la même fréquence que les autres cœurs car la fréquence de calcul est propre au processeur et non pas à chaque cœur), seule la puissance du processeur (exprimée en FLO/s ou FLOPS) sera multipliée par le nombre de cœurs. Par exemple si un processeur unicœur cadencé à 1 GHz et ayant une puissance de 10 GFLOPS est remplacé par un processeur bicœur (à 2 cœurs) cadencé à 1 GHz et dont la puissance de chaque cœur vaut 10 GFLOPS alors la puissance totale du processeur dual-core vaudra 10 GFLOPS + 10 GFLOPS = 20 GFLOPS.
Associé à la technique de l'hyperthreading, cette technologie est en plein essor. Sun Microsystems étudie en 2008 la construction de multicœurs en trois dimensions, c’est-à-dire avec une zone de recouvrement des deux cœurs (donc superposés) permettant de mettre en place des canaux de communication entre eux.
Ces architectures ne sont intéressantes que pour les programmes qui se prêtent simultanément aux deux techniques précitées (multicœurs et hyperthreading).

## Historique

Parmi les premières machines multiprocesseurs, le Gamma 60 de Bull fut pionnier (1958), mais il ne disposait pas des langages de programmation adaptés.
Ensuite certains superordinateurs ont marqué leur époque, comme le C.mmp, l'ILLIAC IV et la Connection Machine (en) de Thinking Machines. Aujourd'hui, tous les superordinateurs sont multiprocesseurs, ils sont souvent composés de milliers d'unités de traitement.

## Exemples de systèmes multiprocesseurs

En novembre 2008, les systèmes d'exploitation des 500 plus puissants supercalculateurs de la planète (au TOP500) étaient :
* Linux, qui est le système équipant la très grande majorité (87,80 %) ;
* Unix, 4,60 % ;
* Windows, 0,8 % ;
* BSD et Mac OS, 0,2 % chacun.
Depuis novembre 2017, les supercalculateurs du TOP500 tournent tous sous Linux.