Bonjour,
Je me suis amusé à développer une petite appli qui affiche des particules interagissant entre elles par gravité. Le calcul des nouvelles positions est multithreadé.
J'ai testé l'appli sur une machine dual core sous Linux et sous windows avec la même machine, avec 1 ou 2 threads dans chaque cas :
-Sous Windows, avec 2 threads, j'ai un speed-up de 2, et les deux coeurs tournent à fond. Normal.
-Sous linux, avec 2 threads, pas de speed-up, et chaque coeur tourne à 50 %... (bref, il y a un process qui swappe d'un coeur à l'autre)
D'un coté comme de l'autre, c'est la version Sun de Java qui est installée.
La conclusion à laquelle j'arrive est que la version Linux de la machine virtuelle n'est pas multithreadés, mais, honnêtement, ça m'étonne.
quelqu'un a-t-il une explication à ce phénomène ?
-- Jamian
PS :
Mon appli consiste en une boucle infinie qui
-créé n threads de calcul de particules en assignant à chacun un sous ensemble de particules à traiter
-attends que les n threads soient morts (ceci est, j'en conviens, fort crade, mais c'était juste pour faire un test...)
-met à jour l'affichage (via un JFrame.repaint(), donc la fonction paint(Graphics g) appelée s'exécute elle aussi, me semble-t-il, sur un autre thread).
rien de bien fantastique, donc. Et ce sont les calculs de positions des particules qui prennent la majorité du temps (j'ai une complexité en nombre de particules au carré)
2.6.27.11 (celui fourni avec Ubuntu 8.10 version 64 bits).
Ce qui m'étonne, c'est de ne rien trouver à propos de ce problème. Je flaire une mauvaise configuration de la machine java, mais je l'ai pourtant installée "normalement" (depuis les dépots)