20 lines
2 KiB
Markdown
20 lines
2 KiB
Markdown
|
## Efficacité de la parallélisation
|
||
|
|
||
|
1. On peut espérer que avec N threads le programme ira N fois plus vite (accélération linéaire).
|
||
|
2. On trace l'exécution réelle en fonction de N
|
||
|
1. La différence s'explique du fait que le processeur passe du temps à changer d'états (stacks) plutôt que de passer du temps à réelement calculer (ici incrémenter un compteur)
|
||
|
2. L'accélération est nettement visible pour un nombre faible de threads, celle-ci semble ensuite redevenir linéaire. On peut supposer que le mode synchronisé deviendrait plus lent que le mode séquentiel pour un très grand nombre de threads. (cf fig.png)
|
||
|
|
||
|
## Coût de la cohérence
|
||
|
|
||
|
1. Pour chaque le thread n°i on a alors "part de : NB_IT x NB_IT_INTERNES x i", "finit à NB_IT x NB_IT_INTERNES x (i+1)".
|
||
|
2. Si les thread sont commutés lors de leur exécution, alors il est peu probable d'obtenir les résultats de la questions précédente, surtout si le quanta est d'une durée inférieur à l'execution complète du thread. (On obtient des résultat ~proche de la question précédente, mais qui empirent avec le nombre de threads)
|
||
|
3. La deuxième solution semble être celle utilisée par Java.
|
||
|
4. La valeur finale diverge légèrement de la valeur théorique de NB_IT x NB_IT_INTERNES x nbActivités puisque, pour contourner les optimisations du compilateur on ajoute à chaque itération j/j à cpt au lieu de j. Cela introduit parfois des erreurs de calculs qui s'accumulent lors de l'execution globale du programme.
|
||
|
5. On essaie de rajouter synchronised à plusieurs endroits du code
|
||
|
1. on obtient de résultat escompté mais le temps d'execution du programme est décuplé.
|
||
|
2. on n'obtient pas le résultat escompté, les valeurs finales sont toujours différentes.
|
||
|
6. en utilisant AtomicLong les différences entre les départs et les arrivés des compteurs sont réduites mais subsistent toujours
|
||
|
7. Tout comme l'utilsation de synchronised sur l'incrémentation, déclarer la variable servant de compteur comme volatile permet d'obtenir un résultat correcte.
|
||
|
8. It Depends ™
|