Vous êtes sur la page 1sur 52

Chapitre 2 :

Parallélismes et mécanismes
architecturaux avancées
1. Classification des architectures parallèles
2. Parallélisme niveau instruction : Pipeline,
Superscalaire et VLIW
3. Parallélisme de donnée : SIMD
4. Parallélisme des tâches : Architecture Multi-cœur et
Multi-thread

56
1. Classification des architectures parallèles

• Parallélisme d’instructions
– Parallélisme temporel : pipeline
– Parallélisme : VLIW et Superscalaire
– Débit d’instruction : vectoriel

• Parallélisme de données
– SIMD

• Parallélisme de tâches
– Multithread
– Multiprocesseur

57
1. Classification des architectures parallèles

58
2. Parallélisme niveau instruction
La technique du Pipeline

L'exécution complète d'une instruction dans un processeur met


en jeu plusieurs unités du processeur (unité d'adressage, unité
de décodage, unité d'exécution, etc...) qui ne sont pas toutes
utilisées simultanément.

La technique du pipeline consiste à améliorer les performances


du processeur en même temps que son rendement.

Le pipeline permet de superposer les sous-cycles d'exécution des


instructions.

59
Pipeline à 8 étages

Calcul AL Reg.
PC IR Reg. d’adresse
mémoire mémoire

WB
AC
IA

DI

MA
IS

EX
IF

Accès Instruction (IA)


2. Recherche Instruction (IF)
3. Stockage Instruction (IS)
Cycles du 4. Décodage opérandes (DI)
processeur 5. Calcul d'adresse (AC)
1. 6. Accès mémoire (MA)
7. Exécution (EX)
8. Ecriture résultat (WB)
60
IA IF SI DI AC MA EX WB

PC IR @ Calcul

Calcul
d’adresse Reg.
mémoire Reg.
mémoire

Insertion de registres d'étages


(les niveaux du pipeline)
Les données et tous les signaux de
contrôle sont mémorisés et
propagés à chaque niveau 61
IA IF SI DI AC MA EX WB

P IR @ Calcul
C

Calcul
PC IR Reg. d’adresse AL Reg.
mémoire mémoire

Instruction i IA

62
IA IF SI DI AC MA EX WB

P IR @ Calcul
C

Calcul
PC IR Reg. d’adresse AL Reg.
mémoire mémoire

Instruction i IA IF
Instruction i+1 IA

63
IA IF SI DI AC MA EX WB

P I @ Calcul
C R

Calcul
PC IR Reg. d’adresse AL Reg.
mémoire mémoire

Instruction i IA IF SI
Instruction i+1 IA IF
Instruction I+2 IA

64
IA IF SI DI AC MA EX WB

P I @ Calcul
C R

Calcul
PC IR Reg. d’adresse AL Reg.
mémoire mémoire

Instruction i IA IF SI DI
Instruction i+1 IA IF SI
Instruction i+2 IA IF
Instruction i+3 IA

65
IA IF SI DI AC MA EX WB

P I @ Calcul
C R

Calcul
PC IR Reg. AL Reg.
mémoire mémoire

Instruction i IA IF SI DI AC
Instruction i+1 IA IF SI DI
Instruction I+2 IA IF SI
Instruction i+3 IA IF
Instruction i+4 IA

66
IA IF SI DI AC MA EX WB

P I @ Calcul
C R

Calcul
PC IR Reg. d’adresse AL Reg.
mémoire mémoire

Instruction i IA IF SI DI AC MA
Instruction i+1 IA IF SI DI AC
Instruction I+2 IA IF SI DI
Instruction i+3 IA IF SI
Instruction i+4 IA IF
Instruction i+5 IA

67
IA IF SI DI AC MA EX WB

P I @ l
C R

Calcul
PC IR Reg. d’adresse AL Reg.
mémoire mémoire

Instruction i IA IF SI DI AC MA EX
Instruction i+1 IA IF SI DI AC MA
Instruction I+2 IA IF SI DI AC
Instruction i+3 IA IF SI DI
Instruction i+4 IA IF SI
Instruction i+5 IA IF
Instruction i+6 IA

68
IA IF SI DI AC MA EX WB

P I @
C R

Calcul
PC IR Reg. ALU. Reg.
mémoire mémoire

Instruction i IA IF SI DI AC MA EX WB
Instruction i+1 IA IF SI DI AC MA EX
Instruction I+2 IA IF SI DI AC MA
Instruction i+3 IA IF SI DI AC
Instruction i+4 IA IF SI DI
Instruction i+5 IA IF SI
Instruction i+6 IA IF
Instruction i+7 IA 69
2. Parallélisme niveau instruction
La technique du Pipeline
■ L’effet du pipe
 L'effet du pipeline rentabilise l'utilisation du silicium
=> Augmentation du rendement silicium (proche de 100%)

 Le pipeline augmente le débit des instructions sans modifier le


temps d'exécution des instructions
=> augmentation de la fréquence d'exécution des instructions
=> augmentation de la performance de la machine

• La présence du pipeline permet d'augmenter la fréquence apparente


d'exécution des instructions
=> plus de niveaux, niveaux plus «courts», donc plus rapides
• Exemple :
Pentium IV = 20 niveaux de pipeline !!
70
2. Parallélisme niveau instruction
La technique du Pipeline
■ Inconvénients du pipeline
1. Il est impossible d'assurer en permanence l'exécution d'une
instruction par cycle d'horloge
Le débit effectif est inférieur à 1 inst/c (IPC < 1)
2. Un pipeline doit être rempli et vidé en cas de rupture de
séquence
3. Il peut apparaître des dépendances entre les instructions dans le
pipeline (les aléas de pipeline) :
● Conflit d'accès à des ressources (aléas structurels)
● Dépendances de données entre instructions (aléas de données)
● Rupture de séquence (aléa de contrôle)

71
2. Parallélisme niveau instruction
La technique du Pipeline

La solution générale pour résoudre un aléa est de


bloquer l’instruction qui pose problème et toutes
celles qui suivent dans le pipe jusqu’à ce que le
problème se résolve. On voit alors apparaître des
bulles dans le pipeline. De manière pratique, la bulle
correspond à l’exécution de l’instruction NOP qui ne
fait rien

72
2. Parallélisme niveau instruction
La technique du Pipeline
■ Cas des conflits de ressources (aléas structurels)
• Un conflit de ressource se produit lorsque plusieurs instructions, dans des
étages différents du pipeline, requièrent la même ressource.
• C'est le cas systématique de l'accès à la mémoire :
IA IF SI DI AC MA EX WB

P I
R @ Calcul
C

Calcul
PC IR Reg. AL Reg.
mémoire d’adresse mémoire
Instruction i IA IF SI DI AC MA
Instruction i+1 IA IF SI DI AC
Instruction I+2 IA IF SI DI Conflit d’accès
Instruction i+3 IA IF SI mémoire
Instruction i+4 IA IF
Instruction i+5 IA 73
2. Parallélisme niveau instruction
La technique du Pipeline

■ Solutions aux conflits de ressources

1. Détecter les cas et introduire une «bulle» dans le pipeline :


• Diminution du IPC

2. Utiliser des ressources à accès multiples :


• mémoires double port (lecture/écriture)
• Mémoires caches distinctes (IC et DC) pour les conflits
MA/IF
• Utilisation d'une architecture Harvard (cas du DSP SHARC)

74
2. Parallélisme niveau instruction
La technique du Pipeline

■ Cas des conflits de données


Un conflit de données se produit lorsque plusieurs instructions
dans le pipeline ont une dépendance de registre.
Ex :
ADD R1, R2, #100
LOAD R3, R1

L'instruction LOAD nécessite la mise à jour de R1 avant de


s'exécuter... impossible tant que l'instruction ADD n'aura pas
terminé son cycle d'exécution (avant l'étape WB).
Un conflit de données peut se produire également lors de
l'exécution d'instructions multicyles dans le pipeline...

=> Réorganisation de l'ordre d'écriture des registres !


75
2. Parallélisme niveau instruction
La technique du Pipeline
Exemple :
ADD R1, R2, 100
LOAD R3, R1

instruction 0 1 2 3 4 5 6 7 8 9 10 11 12
ADD R1, R2, 100 IA 1F IS DI AC MA EX WB
LOAD R3, R1 IA IF SI ● ● ● ● DI AC MA EX WB

Sans ressources additionnelles, insertion


de «bulles» dans le pipeline :

l'étape de recherche des opérandes de


l'instruction LOAD est retardée

76
2. Parallélisme niveau instruction
La technique du Pipeline
Cependant, il est souvent inefficace d’attendre qu’une donnée ait été
écrite dans le banc de registres avant de l’utiliser. En effet, la donnée
est souvent disponible plutôt.

Ainsi, pour l’exemple ci-dessus, la donnée est disponible à la fin de


l’étage 7. L’instruction LOAD a réellement besoin de la donnée
(contenu de R1) au début de DI seulement. On peut donc réduire
l’impact des aléas de données en créant des chemins supplémentaires
entre les différents étages du pipeline afin de passer les données d’une
instruction à une autre. Ce mécanisme s’appelle le forwarding

77
2. Parallélisme niveau instruction
La technique du Pipeline
Chemin de données rajouter pour
l’exemple traiter pour implémenter le
forwarding

ALU
Reg.
mémoire

78
2. Parallélisme niveau instruction
La technique du Pipeline

Nouveau chemin de donnée avec court circuit du pipeline et accès mémoire


79
via 2 partie du cache
2. Parallélisme niveau instruction
La technique du Pipeline

■ Solutions aux conflits de données (résumé)


Solutions aux conflits de données :
1. Détecter les cas et introduire une «bulle» dans le pipeline :
 Diminution du IPC

2. Utiliser, lorsque c'est possible, des chemins de court-circuit


dans le pipeline : ajout d’un chemin de données
(forwarding)

80
2. Parallélisme niveau instruction
La technique du Pipeline
■ Cas des aléas de contrôle
Lors de l’exécution d’une instruction de branchement conditionnel, on dit
que le branchement est pris si la condition est vérifiée et que le programme
se poursuit effectivement à la nouvelle adresse. Un branchement sans
condition est toujours pris.
Lorsqu’un branchement est pris, l’adresse de celui-ci est calculée à l’étape
AC «Calcul Adresse » et rangée dans le registre PC à l’étape WB «écriture
du résultat ». Toutes les instructions qui suivent l’instruction de branchement
ne doivent pas être exécutées (le pipeline est vidé).
On constate que l’exécution d’un branchement dégrade notablement la
performance du pipe. Comme les branchements constituent en général 20 à
30% des instructions exécutées par un programme, il est primordial
d’améliorer leur exécution.
Une façon simple d’optimiser les branchements est de ne pas leur faire
suivre toutes les étapes du pipeline afin que la nouvelle adresse soit écrite le
plutôt possible dans le registre PC

81
2. Parallélisme niveau instruction
La technique du Pipeline
 Ex:
BEQ etiq
….
.…
etiq ADD R4, R1, R2

instruction 0 1 2 3 4 5 6 7 8 9 10 11 12
BEQ etiq IA 1F IS DI AC MA EX WB
… IA IF SI ● . . .
… IA IF
IA
IA
ADD R4, R1, R2 IA IF IS DI AC MA EX WB

82
2. Parallélisme niveau instruction
La technique du Pipeline
Pour les branchement conditionnels, la condition ne dépend que des
indicateurs n, z et p du code de l’instruction. Cette condition peut donc être
calculée à l’étape DI «décodage, lecture des opérandes ». De même l’adresse
du branchement est soit le contenu d’un registre soit la somme de PC et d’un
offset. Dans les deux cas, cette valeur peut être disponible à la fin de l’étape
AC. Le prix à payer est l’ajout d’un nouvel additionneur dédié à ce calcul.
La nouvelle adresse est écrite dans le registre PC à la fin de l’étape AC.
Exemple :
LOOP : LOAD R1,R0, #100
…..
JZ LOOP L’adresse de destination
du branchement est disponible
La condition (bits n,p,z)
à la fin de cette étape
est lue à la fin de cette étape
instruction 0 1 2 3 4 5 6 7 8 9 10 11 12
JZ LOOP IA IF IS DI AC MA EX WB
LOAD R1, R0, #100 ● ● ● ● IA IF SI DI AC MA EX WB
83
2. Parallélisme niveau instruction
La technique du Pipeline

■ La prédiction des branchements


La majorité des ruptures de séquences par branchements
inconditionnels se fait à des adresses constantes.
Pour éviter de vider/remplir les pipelines, on utilise la méthode
de la prédiction des branchements :
 Les adresses des branchements sont stockées dans une table,
 Une unité dédiée détecte les éventuels branchements et met à jour
le PC par anticipation de l'adresse de destination

Valable aussi pour les branchements conditionnels, avec


l'exécution spéculative des instructions : les instructions du
branchement sont mises dans le pipeline avant de savoir si le
branchement doit être pris ou non => algorithmes complexes de
prédiction
84
2. Parallélisme niveau instruction
La technique du Pipeline
Unité
Unité de
Registres d’adress
calcul
age Mémoire
données

données

Unité de Unité
décodage d’exécution Mémoire
programme

instructions
PC
Branchement?

Adresse prédite

Table mise à jour automatiquement lors de


L’exécution des instructions de branchement:

Prédiction des adresses de branchement


Adresse de Adresse des instructions 85
destination de branchement
2. Parallélisme niveau instruction
La technique du Pipeline
 Exemple
Sans prédiction d’adresse
instruction 0 1 2 3 4 5 6 7 8 9 10 11 12
JMP IA IF IS DI AC MA EX WB
Inst1 ● ● ● ● IA IF IS DI AC MA EX WB

PC=adresse calculée

Avec prédiction d’adresse


instruction 0 1 2 3 4 5 6 7 8 9 10 11 12
JMP IA IF IS DI AC MA EX WB
Inst1 IA IF IS DI AC MA EX WB

PC=adresse destinataire prédite

86
2. Parallélisme niveau instruction
La technique du Pipeline
■ Exécution spéculative et prédiction
Dans le cas des branchements conditionnels, il n'est pas possible
d'anticiper le calcul de l'adresse du branchement (dépend d'une
condition à calculer).
Stratégie :
 Exécuter spéculativement les instructions en «pariant» sur la
valeur de la condition
✔ Si pari gagnant : OK, pas de cycles perdus
✔ Si pari perdu : insertion de bulles
 Différents algorithmes de prédiction qui dépendent des cas
(application, instructions)

87
2. Parallélisme niveau instruction
La technique du Pipeline
 BILAN
La présence du pipeline permet d'améliorer significativement les
performances d'une unité de calcul avec des conséquences pour les
architectures embarquées...
Sous étapes plus simples = plus de niveaux de pipeline
= fréquence de fonctionnement plus élevée
MAIS
puissance dissipée plus importante !

plus de niveaux de pipeline = plus d'aléas


ET
plus de ressources pour corriger les aléas

Compromis pour l'embarqué :


rarement plus de 3 à 5 niveaux de pipeline.....
88
2. Parallélisme niveau instruction
Processeurs Superscalaires
■ Une façon majeur de gagner en performance au-delà de l’exécution
pipelinée des instructions, est d’exécuter en parallèle plusieurs
instructions. La plupart des processeurs haute performance ont
aujourd’hui cette capacité, on parle de processeurs superscalaires.
■ Pour réaliser un processeur superscalaire, il faut :
 Assurer un flux d’instructions suffisant
 Déterminer quelles instructions peuvent s’exécuter en parallèle
 Résoudre les problèmes de dépendance  passer les données entre les
instructions, le résultat d’une instruction i est l’opérande d’une instruction j
 Disposer de plusieurs unités de calcul en parallèle

■ Cette technique superscalaire repose sur une unité interne


d’ordonnancement dynamique des instructions de façon à profiter
pleinement du parallélisme

89
2. Parallélisme niveau instruction
Processeurs Superscalaires
• n unités d’exécution
• n instructions délivrées par cycle
• ordonnancement dynamique en matériel

inst≠1 inst≠5 Fetch


inst≠1 inst≠5
inst≠1 inst≠5 Decode

inst≠2 inst≠6 Execute


inst≠2 inst≠6 Write back
inst≠2 inst≠6

inst≠3
n=3 inst≠3
inst≠3 P=4
inst≠4
inst≠4
inst≠4
Cycle

90
2. Parallélisme niveau instruction
Processeurs Superscalaires
AMD Opteron :
Mode 64 bits
Exécution dans le désordre
9 instructions/cycle max
3 calculs entiers
3 calculs d'@
3 calculs flottants

91
2. Parallélisme niveau instruction
Processeurs Superscalaires
 Superscalaire statique
Les premiers microprocesseurs utilisaient un lancement
statique des instructions. Le principe consiste à lire un groupe
d’instructions (quatre dans la plupart des cas) et a essayer de
les exécuter simultanément. Si c’est possible, alors elles
s’exécutent en un cycle. Si c’est impossible, il faut attendre le
cycle suivant pour exécuter le reste des instructions du groupe.
Un nouveau groupe ne peut être traité que lorsque le groupe
précédent l’a été.
Avec cette approche, le compilateur joue un rôle essentiel,
car il a la responsabilité de générer le code de manière à ce
que le maximum de groupes d’instructions puissent être
exécutés en un cycle
L’approche statique a pour limitation essentielle d’exécuter les
groupes d’instructions dans l’ordre. Or, des instructions d’un
groupe peuvent attendre des résultats d’instructions
précédentes alors que les instructions de groupes suivants
93
2. Parallélisme niveau instruction
Processeurs Superscalaires
pourraient s’exécuter, parce que leurs opérandes sont déjà
disponibles
 Superscalaire dynamique
Dans l’approche dynamique, le processeur est capable
d’exécuter les instructions de manière non ordonnée, par
rapport à l’ordre normal des instructions du programme
Les instructions du programme sont lues et décodées dans
l’ordre et placées dans un tampon de lancement. Quand leurs
opérandes sont disponibles, elles sont exécutées dans les unités
fonctionnelles. Comme il faut en même temps gérer les
exceptions et les interruptions, un dispositif spécial appelé
tampon de ré-ordonnancement assure la terminaison dans
l’ordre des instructions

Exemple : tous les microprocesseurs superscalaires existants


(sauf l’UltraSparc de Sun) utilisent l’approche « non ordonnée »
PowerPC, Pentium II, III et IV (Intel) K7 AMD, …
94
2. Parallélisme niveau instruction
Processeurs Superscalaires

Principe de l’exécution
non ordonnée

95
2. Parallélisme niveau instruction
Architecture VLIW (Very Large Instruction Word)

• Limites des superscalaires


les techniques superscalaires seules ne peuvent permettre
simplement de garantir la poursuite d’un gain de performances de
60% par an. S’il est relativement simple d’acquérir et de traiter quatre
instructions par cycle, on ne peut de manière trivial passer à huit,
seize, etc.
Il faut d’abord qu’il y ait suffisamment de parallélisme d’instructions
dans les programmes.
Le nombre d’instructions entre deux branchements est en moyenne
de quatre ou cinq dans les programmes travaillant sur les nombres
entiers, ce qui signifie qu’il faut prédire environ deux branchements
successifs par cycle avec plus de quatre instructions par cycle.
Les progrès des prédicateurs de branchement sont de plus en plus
limité
La complexité de la partie contrôle des microprocesseurs à exécution
non ordonnée augmente de manière à limiter l’utilisation de
96
fréquences d’horloge élevées.
2. Parallélisme niveau instruction
Architecture VLIW (Very Large Instruction Word)
Ce que limite la performance dans les systèmes superscalaires
:
- Les branchements
o les mauvaises prédictions limitent les performances
o Les petites branchements ont peu de codes à exécuter ce qui limite le
parallélisme
- L’accès mémoire
o Utilise plus d’un top d’horloge
o Souvent on doit faire un load juste après le branchement
- L’extraction du parallélisme
o Le compilateur « sérialise » le code, dont le parallélisme intrinsèque
doit être redécouvert dynamiquement
Code Code par le processeur
Matériel
source machine
Compilateur
original séquentiel

97
2. Parallélisme niveau instruction
Architecture VLIW (Very Large Instruction Word)

• Approche VLIW
Alors que le superscalaire réalise par matériel en dynamique
l’exécution en parallèle des instructions, l’approche VLIW
demande au compilateur de générer un mot constitué de
plusieurs instructions qui sont exécutées directement par
le matériel.

Comme le compilateur gère les dépendances de données et


le flot de contrôle, la partie contrôle du processeur est simple
et permet d’utiliser des fréquences d’horloge plus élevées

97
2. Parallélisme niveau instruction
Architecture VLIW (Very Large Instruction Word)
• Parallélisme Explicite (EPIC)
Le compilateur expose, améliore et exploite le parallélisme du
programme source et le rend explicite dans le code machine

9
8
2. Parallélisme niveau instruction
Architecture VLIW (Very Large Instruction Word)
Une autre technique consiste à disposer d’unités d’exécution en parallèle mais d’agencer les
Instructions respectives au niveau du compilateur de telle sorte qu’une longue instruction
correspondant à plusieurs instructions concaténées soit présentée au processeur.
Cet agencement statique à la compilation permet en théorie d’atteindre des performances
élevées par rapport au superscalaire. Cependant l’écriture de tels compilateurs demeure
difficile.
• Une seule unité de contrôle, une instruction très longue par cycle
Exec≠1
inst≠1 Exec≠2 inst≠5 Fetch
Exec≠3
Decode
Exec≠1 Execute
inst≠2 Exec≠2 inst≠6
Exec≠3 Write back

P=4
Exec≠1
inst≠3 Exec≠2
n=3
Exec≠3

Exec≠1
inst≠4 Exec≠2
Exec≠3

Cycle 99
Chapitre 2 :
Parallélismes et mécanismes
architecturaux avancées
1. Classification des architectures parallèles
2. Parallélisme niveau instruction : Pipeline,
Superscalaire et VLIW
3. Parallélisme de donnée : SIMD
4. Parallélisme des tâches : Architecture Multi-cœur et
Multi-thread
100
3. Parallélisme de données
Architecture SIMD

• Principe
Single Instruction on Multiple Data
(SIMD) est une des quatre
catégories d’architecture définie par
la taxinomie de Flynn et désigne un
mode de fonctionnement des
ordinateurs dotés de plusieurs
unités de calcul fonctionnant en
parallèle.

Dans ce mode, la même


instruction est appliquée
simultanément à plusieurs
données pour produire plusieurs
résultats
101
3. Parallélisme de données
Architecture SIMD
Le mode SIMD convient particulièrement bien aux traitements dont
la structure est très régulière, comme c’est le cas pour le calcul
matriciel et le traitement multimédia.
Exemple : un mot de 64 bits peut être découpé en 2X32bits,
4X16bits ou 8X8bits et une instruction multimédia effectue la même
opération sur chacune des parties considérées comme des données
distinctes.
Les instructions SIMD ont été ajoutées aux processeurs modernes
(superscalaire ou VLIW) pour pouvoir améliorer le traitement sur les
calculs impliquant des nombres en virgule flottant. Ces instructions
ont un nom particulier dans chaque jeu d’instructions :
Exemples : MMX puis SSD (Intel), 3Dnow (AMD), VIS (Sun), Altivec
(Motorola).

102
Chapitre 2 :
Parallélismes et mécanismes
architecturaux avancées
1. Classification des architectures parallèles
2. Parallélisme niveau instruction : Pipeline, Superscalaire et
VLIW
3. Parallélisme de donnée : SIMD
4. Parallélisme des tâches : Architecture Multi-cœur et Multi-

103
4. Parallélisme des tâches
Architecture Multi-cœur (Multi-core)

les multiprocesseurs, constitués de plusieurs microprocesseurs avec


leur cache primaire, connectés via un bus à un cache secondaire et à
la mémoire principale existent depuis longtemps sur les stations de
travail utilisées comme des serveurs.
Depuis le milieu des années 1995, ils sont apparus les PC haut de
gamme, avec deux CPU par PC.

Ce qui est nouveau depuis 2000 est la


réalisation de multiprocesseur dans
un seul circuit  architecture multi-
core
Exemple : le microprocesseur
Power4, utilisé par IBM pour ses
machines haut de gamme, a deux
CPU en un seul circuit
105
4. Parallélisme des tâches
Architecture Multi-cœur (Multi-core)
• Les processeurs Multi-core sont des architectures de type MIMD
(Multiple instructions Multiple Données) : différents cores exécutent
différents threads (Multiples Instructions) opérant sur des données
indépendantes (Multiples Data)

Machines MIMD à mémoires partagés Machines MIMD à mémoires


distribuées

• Les processeurs Multi-core sont des machines à mémoires partagés


(MIMD)
106
4. Parallélisme des tâches
Architecture Multi-threads
le fonctionnement idéal d’un processeur
superscalaire peut être suspendu par
certain nombre de causes : dépendances
de données, mauvaise prédiction de
branchement, défauts de cache, etc. Les
processeurs multi-threads
acquièrent leurs instructions à partir de
plusieurs flots d’exécution (threads),
provenant soient de programmes
indépendants s’exécutant en multitâches, soit
d’un programme qui a été parallélisé en
plusieurs threads.

Vous aimerez peut-être aussi