Parallélisation automatique

Un article de Wikipédia, l'encyclopédie libre.

La Parallélisation automatique est une étape de la compilation d'un programme qui consiste à transformer un code source écrit pour une machine séquentielle en un exécutable parallélisé pour ordinateur à Symmetric multiprocessing. L'objectif de la parallélisation automatique est de simplifier et de réduire la durée de développement des programmes parallèles, qui sont notablement plus compliqués à écrire que les programmes séquentiels mais permettent des gains de vitesse sur les machines parallèles.

Les compilateurs pour assurer cette parallélisation ne sont en 2010 pas opérationnel pour un grand nombre de types d'algorithmes séquentiels, bien que quelques techniques soit mises en place depuis les années 2000[1]. Les grandes différences entre architectures, notamment au niveau de la gestion de la mémoire, compliquent la faisabilité de tels compilateurs.

Technique mise en place[modifier | modifier le code]

La plus grande partie du temps d'exécution d'un programme se situe au niveau des boucles qui le composent. C'est donc sur cette partie que les compilateurs assurant la parallélisation automatique vont intervenir. Ils tentent de séparer les instructions d'une boucle de sorte que ses itérations puissent être exécutées sur des processeurs distincts simultanément.

Les langages de programmation à vocation parallèle disposent en outre d'instructions au mieux implicites, ou à défauts explicites qui facilitent le travail du processeur. Les langages comme SISAL, Haskell version parallèle, et Mitrion-C pour FPGA implémentent de telles instructions.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Références[modifier | modifier le code]

  1. Shen, John Paul and Mikko H. Lipasti (2005). Modern Processor Design: Fundamentals of Superscalar Processors. McGraw-Hill Professional. p. 561. (ISBN 0070570647). "However, the holy grail of such research - automated parallelization of serial programs - has yet to materialize. While automated parallelization of certain classes of algorithms has been demonstrated, such success has largely been limited to scientific and numeric applications with predictable flow control (e.g., nested loop structures with statically determined iteration counts) and statically analyzable memory access patterns. (e.g., walks over large multidimensional arrays of float-point data)."