Je viens de commencer à programmer avec des threads POSIX sur un système Linux dual-core x86_64. Il semble que 256 threads est l'optimum pour les performances avec la façon dont je l'ai fait. Je me demande comment cela pourrait être? Et si cela peut signifier que mon approche est mauvaise et qu'une meilleure approche nécessiterait beaucoup moins de threads et serait tout aussi rapide ou plus rapide?Si 256 threads donnent de meilleures performances que 8 j'ai probablement eu la mauvaise approche?
Pour des informations plus (le programme en question est un squelette pour un générateur d'image réglée M-multi-thread) voir les questions suivantes, je l'ai déjà demandé:
Using threads, how should I deal with something which ideally should happen in sequential order?
How can my threaded image generating app get it’s data to the gui?
Je devrais peut-être mentionner que le squelette (dans lequel j'ai reproduit des fonctionnalités minimales pour les tests et la comparaison) affiche maintenant l'image, et les calculs réels sont effectués presque deux fois plus vite que le programme non-threaded. Par conséquent, si 256 threads s'exécutant plus vite que 8 threads n'indiquent pas une mauvaise approche de l'enfilage, pourquoi 256 threads surpassent-ils 8 threads?
Le cas de test de vitesse est une partie de la Mandelbrot Set situé à:
xmin -0.76243636067708333333333328
xmax -0.7624335575810185185185186
ymax 0.077996663411458333333333929
calculé à un maximum de 30000 itérations.
Sur le non-threaded version le temps de rendu sur mon système est d'environ 15 secondes. Sur la version filetée, la vitesse moyenne pour 8 threads est de 7,8 secondes, alors que 256 threads est de 7,6 secondes.
Comment fonctionne 2 threads? –
2 fils sont plus lents encore. La différence entre 8 et 256 threads est d'environ 150 ms, avec un temps global de 7,7 secondes - ce qui n'est pas un gros problème, mais si ça grossit avec des images beaucoup plus grandes, ce serait sympa :) –