La fin du chemin pour les architectures uniprocesseurs : place au

publicité
CHRONIQUE
La fin du chemin pour les architectures
uniprocesseurs : place au parallélisme
de processus sur un seul composant
La domination des architectures uniprocesseurs
Cet article des Editions Lavoisier est disponible en acces libre et gratuit sur tsi.revuesonline.com
Les architectures de calculateurs parallèles ont fait l’objet de recherches depuis le
milieu des années 1960, et des systèmes multiprocesseurs parallèles ont été
commercialisés depuis la fin des années 1970. Cependant, force est de constater que
depuis les débuts de l’industrie informatique, l’essentiel des systèmes matériels
vendus a été des systèmes uniprocesseurs, à la fois en nombre, mais aussi en marché
global.
Au cours des 50 dernières années, les progrès de la miniaturisation des transistors
ont permis de passer des composants discrets à l’intégration sur un seul composant
d’un milliard de transistors. De plus, on est aujourd’hui capable de cadencer un
processeur à des fréquences de plusieurs gigahertz et on est capable de produire des
composants mémoire de plusieurs gigabits. La pseudo-loi de Moore (doublement du
nombre de transistors sur un composant, doublement de la taille mémoire et
doublement de la fréquence de fonctionnement tous les 18 mois) a été respectée
jusqu’ici. Un PDA d’aujourd’hui dispose de plus puissance de calcul et de plus de
mémoire qu’un PC d’il y a 10 ans qui lui même était aussi performant qu’un
superordinateur d’il y a 25 ans.
Des machines parallèles ont été construites à partir de toutes les générations de
processeurs depuis près de 20 ans. Par exemple, des multiprocesseurs à mémoire
partagée, que ce soit de petits multiprocesseurs (jusqu’à 8 processeurs), ou des
machines de gros projets à plusieurs milliers de nœuds dédiés à des applications
ciblées gros calcul scientifiques. Des systèmes à mémoires distribuées ont aussi été
réalisées (on se souvient par exemple de l’échec commercial des IPSC, CM5...) ;
elles sont remplacées aujourd’hui par les clusters de PCs et clusters de clusters.
Cependant, l’utilisation des machines parallèles généralistes est jusqu’à présent
restée marginale. Cet échec relatif est lié à deux facteurs conjugués. Tout d’abord, le
facteur économique. En premier lieu, le coût d’un multiprocesseur croît super
linéairement avec le nombre de processeurs. En second lieu, les performances étaient
jusqu’à présent décevantes : jusqu’à très récemment, les constructeurs étaient
incapables d’utiliser la dernière génération de processeurs. En troisième lieu, le
problème de passage à l’échelle n’a pas été résolu : la cohérence de cache par
948
RSTI - TSI – 25/2006. Architecture des ordinateurs
espionnage de bus ne permet pas de connecter efficacement plus de 4 ou 8
processeurs. Le second facteur de l’échec relatif des machines parallèles est la
pauvreté du catalogue des applications parallèles. Cette pauvreté est liée à la
difficulté d’écrire des applications parallèles, à l’échec relatif de la parallélisation
automatique et aussi au problème de la poule et de l’œuf du développement de
logiciel pour les machines parallèles.
La responsabilité des microarchitectes
Cet article des Editions Lavoisier est disponible en acces libre et gratuit sur tsi.revuesonline.com
Nous, les architectes de microprocesseur, avons aussi une grande responsabilité
ou plutôt un grand mérite dans cet échec relatif des machines parallèles. L’industrie
électronique a apporté les transistors et la fréquence de fonctionnement. Nous avons
trouvé comment transformer ces transistors en performance dans un
monoprocesseur. Les spécialistes de compilation ont aussi apporté une grande
contribution.
Alors que le temps d’accès à la mémoire principale reste de l’ordre de 100 ns,
que la sémantique du programme est séquentielle, et que la durée de la vie d’une
instruction (de son chargement à sa validation) est de l’ordre de 10 à 20 ns, un
processeur haute performance est capable d’exécuter jusqu’à 4 instructions par cycle
de 0,3 ns. Ceci a été rendu possible par l’utilisation de plusieurs techniques de
microarchitecture.
Ainsi, tous les processeurs utilisent l’exécution pipeline, c’est-à-dire le
recouvrement de l’exécution d’instructions successives. Le parallélisme d’instruction
est aussi utilisé systématiquement : plusieurs instructions sont chargées à chaque
cycle, puis décodées et exécutées dès lors que les instructions sont indépendantes.
Afin de permettre un débit maximum au processeur, l’exécution des instructions est
réalisée dans un ordre différent de celui du programme, mais en respectant les
dépendances des instructions.
Cependant, nourrir le cœur d’exécution en instructions impose de connaître ces
instructions, mais la cible et la direction d’un branchement ne sont connues que très
tardivement dans le pipeline. Les branchements sont donc prédits. Les instructions
sont chargées, décodées et souvent même exécutées de manière spéculative avant
même de savoir si elles seront réellement utiles. De la même manière, afin de briser
les chaînes de dépendances, les (in)dépendances entre accès mémoire sont prédites
et des formes simplifiées de prédiction de résultats d’opération sont utilisées.
Enfin, la plus grande partie des transistors du composant est utilisée pour
construire une hiérarchie de caches permettant de donner l’illusion que la mémoire
répond en quelques cycles. Des mécanismes de préchargement matériels et logiciels
sont utilisés pour encore améliorer ce comportement de la mémoire.
Chronique
949
La fin de la route des uniprocesseurs
Jusqu’au début des années 2000, les micro-architectes ont été capables de
proposer de nouvelles améliorations à tous ces mécanismes en utilisant les nouvelles
possibilités d´intégration. Cependant, nous nous heurtons aujourd’hui à plusieurs
difficultés qui limitent les gains de performance que les techniques traditionnelles de
micro-architecture apportent. Tout d’abord, le parallélisme d’instruction présent
dans les applications est limité : il existe peu d’applications où ce parallélisme
potentiel est supérieur à 10.
Cet article des Editions Lavoisier est disponible en acces libre et gratuit sur tsi.revuesonline.com
D’autre part, plusieurs chemins ou unités du processeur ont une complexité (plus
que) quadratique en nombre d’instructions exécutées en parallèle. Les distances
relatives entre les unités fonctionnelles d’un processeur augmentent si l’on augmente
ce nombre d’unités. Il n’est pas sûr qu’à technologie égale un processeur
supercalaire 8 voies soit plus efficace qu’un processeur supersaclaire 4 voies sur
toutes les applications, surtout depuis que la densité d’intégration oblige les
concepteurs à tenir compte des problèmes de consommation électrique et des points
critiques de température.
Enfin, le temps de conception et de mise au point d’un cœur de processeur
superscalaire 4 voies est déjà très long et le coût de la conception d’un processeur 8
voies serait prohibitif.
L’avènement du parallélisme de processus sur un composant
Pour les fondeurs de processeurs, la survie a toujours passé par l’augmentation
des fonctionnalités et des performances. Aujourd’hui, pour tous les fondeurs,
l’augmentation des performances des « processeurs » généralistes passe par le
parallélisme de processus. Deux voies sont utilisées : le multiflôt simultané (SMT) et
les multiprocesseurs sur un seul composant (CMP). Le SMT est particulièrement
attrayant pour les micro-architectes : il s’agit de profiter des unités sous-utilisées
d’un processeur superscalaire pour exécuter des processus concurrents quand de tels
processus sont disponibles. Le CMP consiste simplement à répliquer sur le
composant plusieurs cœurs d’exécution et à leur faire partager une partie de la
hiérarchie mémoire : il s’agit de mettre un petit multiprocesseur sur un seul
composant.
Aujourd’hui, Intel tente d’imposer sur le marché des processeurs dual-core SMT
à 2 processus. D’ici quelques années, on verra sans doute des processeurs à 4 ou 8
cœurs d’exécution SMT à 2 ou 4 processus.
950
RSTI - TSI – 25/2006. Architecture des ordinateurs
Est ce raisonnable ?
Pour construire de petits multiprocesseurs, l’approche CMP est très attrayante.
Cependant, force est de constater que pour le moment, peu d’applications
commerciales exploitent efficacement le parallélisme de processus sur un
composant : d’un point de vue fonctionnalités et performances, l’intérêt d’avoir un
processeur dual-core SMT sur son PC est pour l’instant négligeable pour la majorité
des utilisateurs. Cependant, les fondeurs (Intel et AMD) veulent maintenir le prix
moyen des processeurs qu’ils vendent : ils feront tout pour imposer au marché grand
public des composants CMP pour l’instant surdimensionnés par rapport à l’offre
logicielle.
Cet article des Editions Lavoisier est disponible en acces libre et gratuit sur tsi.revuesonline.com
Une opportunité pour l’industrie du logiciel parallèle
Une opportunité unique s’offre à l’industrie du logiciel parallèle. Le parallélisme
matériel de processus se généralise : l’industrie du logiciel se doit de l’exploiter.
L’écriture d’applications et l’optimisation de leurs performances pour les
processeurs multicœurs SMT représentent un challenge important : il faudra écrire
des applications parallèles avec un nombre modéré de processus (8 ? 32 ?), prendre
en compte plusieurs niveaux de partage (partage hiérarchique des processeurs, des
caches de premier niveau, puis de second niveau) et prendre en compte la
compétition de tous les processus pour la bande passante mémoire.
Et après ?
Le futur des « processeurs » dépendra beaucoup de la réussite du logiciel
parallèle pour les 2 ou 3 premières générations de ces processeurs multiprocessus.
Dans le cas relativement probable d’un échec relatif de l’industrie du logiciel
parallèle, les micro-architectes étudient quelques pistes pour exploiter le parallélisme
de processus sur une charge de travail séquentielle ou peu parallèle. Par exemple,
pour augmenter les performances, les cœurs inutilisés peuvent par être utilisés par
des processus spéculatifs. Pour permettre l’utilisation d’une fréquence de
fonctionnement plus élevée sur les charges monoprocessus, on peut utiliser la
migration de processus afin d’éviter les problèmes liés à la température. Enfin la
fiabilité des calculs peut être mieux garantie par la réplication des calculs sur deux
cœurs.
André Seznec
IRISA/INRIA, Rennes
[email protected]
Téléchargement