Bonjour,
J'ai multi threadé certaines parties d'un programme d'astronomie que je maintiens et dont certaines boucles de calculs étaient faciles à paralléliser. (simple grosse boucle for avec à l'intérieur des calculs indépendants) J'ai donc utilisé un thread pool pour cela, adapté à mon processeur et c'est génial, la partie que j'ai threadé va plus vite càd qu'il faut moins de temps d'exécution pour réaliser la tache demandée. (sur un 4 core, je gagne entre 30% et 40% de temps d'exécution) Et j'en suis très content car c'était le but initial de mon travail.
avant:
Pour chaque frame
- Fonction1
- Fonction2
- Fonction3
- Fonction4
- Fonction5
- Fonction6
- Fonction7
- Fonction8
- Fonction9
- Fonction10
Fin pour
maintenant:
Pour chaque frame
- Fonction1
- Fonction2 threadée
--- un thread
--- un thread
--- un thread
--- un thread
- Fonction3
- Fonction4
- Fonction5
- Fonction6 threadée
--- un thread
--- un thread
--- un thread
--- un thread
- Fonction7
- Fonction8
- Fonction9 threadée
--- un thread
--- un thread
--- un thread
--- un thread
- Fonction10
Fin pour
J'ai environ 50 grosses fonctions et j'en ai parallélisé 4. (forcément les plus gourmandes en temps)
Sauf que j'ai remarqué après que tout le reste de mon programme mettait plus de temps à s'exécuter. Je veux dire par la que les parties non threadées, qui ne sont pas pas du tout liées à ma partie threadée s'exécutent entre 5% à 60% moins vite...
J'ai fais de nombreux tests de comparaison (50x, chacun, dans des conditions strict identiques) avant de vous écrire ce message. J'ai utilisé pour cela std::chrono afin de déterminer le temps mis à l'exécution de toutes mes fonctions, threadées ou non.
Aussi je suis perdu. Je ne vous ait pas mis de code car il y en a trop à lire pour rentrer dans le projet.
Est ce que ce que je vous décris peut exister (thread rapide mais reste devient plus lent) ou c'est moi qui ait fait une implémentation bancale ?
Ce symptôme, s'il existe, a-t-il un nom ? (que je puisse demander à Google de m'aider !)
Merci pour votre aide !
Cordialement
Partager