Bonjour à tous. Je développe un programme c++ multithreadé calculant de grosses matrices en utilisant boost_thread.
Mon programme contient une variable global indiquant le nombre de thread à créer (je l'initialise en général avec le nombre de processeur de la machine où je teste le programme).
Le problème que j'ai est que je teste ce programme sur différentes machines, pour la plupart virtuelle (une machine virtuelle comme suit : host win7 quadcore ; guest debian 3 procs alloués; la seconde est une machine virtuelle linux avec 4 coeurs) Sur ces deux machines lorsque je demande à mon programme de s'exécuter avec plusieurs threads, le temps d'exécution est plus long que lorsque je demande au programme de s'exécuter avec un seul thread. Pourtant la charge CPU utilisée et totalement cohérente avec l'exécution prévue. Je passe de 23 minutes pour le cas multithreadé à 16 minutes environ pour le cas monothreadé.
Jusqu'à récemment je cherchais partout l'erreur qui était surement quelque part dans mon code. Mais à ma grande surprise, après avoir exécuter le même code sur une autre machine (une linux à deux coeurs, mais non virtuelle celle ci) le programme s'exécute comme prévu, et passe de 16 minutes en monothread vers 14 minute en doublethread.
Ma question est la suivante, est-il possible que l'architecture des machines virtuelle ne fasse pas bon ménage avec boost_thread ou que quelque chose empêche le bon fonctionnement de programme multithreadé dans le cas d'exécution de ces programmes sur des machines virtuelles?
En espérant avoir été clair, merci pour vos éventuelles réponses.
Partager