programmation Java (école d'ingénieur) · Chapitre 15 · Exercice de TD
Mesurer l'accélération
Threads · niveau 3 (difficile)
Énoncé
On calcule pour avec fils, chacun sur une tranche.
- Écrire le programme, et mesurer le temps pour . Calculer l'accélération .
- Pourquoi l'accélération n'atteint-elle pas ?
- Pourquoi faut-il faire tourner le calcul une première fois avant de mesurer ?
Corrigé
- Le découpage est celui de l'exercice 15.3, avec un tableau
double[] partieldes sommes partielles. Sur la machine de l'auteur (14 cœurs) :
1 fil(s) : 0.291 s, accélération 1.00 (somme 5.333333e+12)
2 fil(s) : 0.158 s, accélération 1.84 (somme 5.333333e+12)
4 fil(s) : 0.105 s, accélération 2.77 (somme 5.333333e+12)
8 fil(s) : 0.050 s, accélération 5.79 (somme 5.333333e+12)
(La somme vaut environ .)
- Créer et attendre les fils a un coût ; tous les cœurs ne sont pas identiques ni toujours libres (le système et d'autres programmes tournent) ; la mémoire est partagée ; enfin le fil le plus lent détermine la durée totale. L'accélération idéale n'est jamais atteinte, et elle plafonne au nombre de cœurs.
- Au début, la JVM interprète le code ; elle ne le compile en code machine (compilation « à la volée ») qu'après l'avoir vu tourner. La première mesure serait donc faussée. On « échauffe » la JVM par un premier calcul non mesuré.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.