Adloun

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[] partiel des 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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →