Gérer le flot de contrôle dans les architectures de processeurs : de la machine analytique à des GPU à exécution dans le désordre

Dates
17/11/2021
Time

13h30

Location

Amphi B

Caroline Collange (Inria Rennes / IRISA)

Le modèle de calcul séquentiel, tel que proposé par Babbage et Lovelace à partir des années 1830 et formalisé par Turing un siècle plus tard, est généralement considéré comme représentatif des ordinateurs. Dans ce modèle, un programme se déroule (littéralement pour les enroulements de cartes perforées d'Ada Lovelace comme pour les rubans d'Alan Turing) en une suite d'instructions exécutées l'une après l'autre.

L'apparente simplicité de ce modèle cache la complexité des architectures matérielles modernes. Un cœur d'un processeur actuel maintient l'illusion d'une exécution séquentielle, mais traite en réalité plus de 350 instructions en vol, et les exécute dans le désordre. Cette prouesse d'équilibriste repose sur de nombreux mécanismes matériels, dont la prédiction de branchements et le renommage de registres.

D'une manière similaire, les processeurs graphiques ou GPU suivent un modèle de calcul dont le parallélisme est quasi-illimité, avec des centaines de milliers de threads indépendants. Un cœur de GPU maintient l'illusion d'un grand nombre de threads indépendants, mais les assemble en réalité en un plus petit nombre de convois de threads liés ensemble, ou warps, afin d'amortir le coût de leur gestion.

Ces deux mondes, processeurs généralistes et GPU, sont notoirement considérés comme incompatibles. En effet, ni la prédiction de branchement, ni le renommage de registres ne fonctionnent dans le contexte où plusieurs threads sont assemblés en warps. Nous verrons cependant qu'il est possible de lever cette incompatibilité en étendant les mécanismes de prédiction et de renommage, afin de concevoir des GPU à exécution dans le désordre qui combinent les avantages en calcul séquentiel et parallèle des deux architectures.