Parallélisme des tâches - Task parallelism

Le parallélisme des tâches (également connu sous le nom de parallélisme de fonctions et de parallélisme de contrôle ) est une forme de parallélisation du code informatique sur plusieurs processeurs dans des environnements informatiques parallèles . Le parallélisme des tâches se concentre sur la répartition des tâches - exécutées simultanément par des processus ou des threads - entre différents processeurs. Contrairement au parallélisme des données qui implique l'exécution de la même tâche sur différents composants de données, le parallélisme des tâches se distingue par l'exécution de nombreuses tâches différentes en même temps sur les mêmes données. Un type courant de parallélisme de tâches est le pipelining qui consiste à déplacer un seul ensemble de données à travers une série de tâches distinctes où chaque tâche peut s'exécuter indépendamment des autres.

La description

Dans un système multiprocesseur, le parallélisme des tâches est obtenu lorsque chaque processeur exécute un thread (ou processus) différent sur des données identiques ou différentes. Les threads peuvent exécuter le même code ou un code différent. Dans le cas général, différents threads d'exécution communiquent entre eux pendant qu'ils fonctionnent, mais ce n'est pas une exigence. La communication a généralement lieu en passant des données d'un thread à l'autre dans le cadre d'un flux de travail .

A titre d'exemple simple, si un système exécute du code sur un système à 2 processeurs ( CPU "a" et "b") dans un environnement parallèle et que nous souhaitons effectuer les tâches "A" et "B", il est possible de dire CPU "a" pour effectuer la tâche "A" et CPU "b" pour exécuter la tâche "B" simultanément, réduisant ainsi le temps d'exécution de l'exécution. Les tâches peuvent être affectées à l'aide d' instructions conditionnelles comme décrit ci-dessous.

Le parallélisme des tâches met l'accent sur la nature distribuée (parallélisée) du traitement (c'est-à-dire les threads), par opposition aux données ( parallélisme des données ). La plupart des programmes réels se situent quelque part sur un continuum entre le parallélisme des tâches et le parallélisme des données.

Le parallélisme au niveau des threads ( TLP ) est le parallélisme inhérent à une application qui exécute plusieurs threads à la fois. Ce type de parallélisme se retrouve largement dans les applications écrites pour les serveurs commerciaux tels que les bases de données. En exécutant plusieurs threads à la fois, ces applications sont capables de tolérer les grandes quantités d'E / S et de latence du système de mémoire que leurs charges de travail peuvent entraîner - alors qu'un thread est retardé en attendant un accès à la mémoire ou au disque, d'autres threads peuvent faire un travail utile.

L'exploitation du parallélisme au niveau des threads a également commencé à faire des incursions sur le marché des ordinateurs de bureau avec l'avènement des microprocesseurs multicœurs . Cela s'est produit parce que, pour diverses raisons, il est devenu de plus en plus impossible d'augmenter la vitesse d'horloge ou les instructions par horloge d'un seul cœur. Si cette tendance se poursuit, de nouvelles applications devront être conçues pour utiliser plusieurs threads afin de bénéficier de l'augmentation de la puissance de calcul potentielle. Cela contraste avec les innovations de microprocesseurs précédentes dans lesquelles le code existant était automatiquement accéléré en l'exécutant sur un ordinateur plus récent / plus rapide.

Exemple

Le pseudo - code ci-dessous illustre le parallélisme des tâches:

program:
...
if CPU = "a" then
    do task "A"
else if CPU="b" then
    do task "B"
end if
...
end program

Le but du programme est de faire une tâche totale nette ("A + B"). Si nous écrivons le code comme ci-dessus et le lançons sur un système à 2 processeurs, alors l'environnement d'exécution l'exécutera comme suit.

  • Dans un système SPMD (programme unique, données multiples), les deux processeurs exécutent le code.
  • Dans un environnement parallèle, les deux auront accès aux mêmes données.
  • La clause "if" fait la différence entre les CPU. La CPU "a" lira true sur le "if" et la CPU "b" lira true sur le "else if", ayant ainsi leur propre tâche.
  • Désormais, les deux processeurs exécutent simultanément des blocs de code séparés, effectuant différentes tâches simultanément.

Code exécuté par la CPU "a":

program:
...
do task "A"
...
end program

Code exécuté par la CPU "b":

program:
...
do task "B"
...
end program

Ce concept peut maintenant être généralisé à n'importe quel nombre de processeurs.

Support linguistique

Le parallélisme des tâches peut être pris en charge dans des langages à usage général par des fonctionnalités intégrées ou des bibliothèques. Les exemples notables incluent:

Des exemples de langages parallèles aux tâches à granularité fine peuvent être trouvés dans le domaine des langages de description matérielle tels que Verilog et VHDL .

Voir également

Les références