L'introduction du multithread dans les jeu vidéos est vraiment le nerf de la guerre aujourd'hui.
Microsoft écrit de nouveaux langages, "multi purpose parallel language" (https://channel9.msdn.com/shows/Goin...f-Parallelism/). Intel développe des bibliothèques comme Threading Building Blocks et met à disposition des tonnes de papiers, du code source comme SMOKE (http://software.intel.com/en-us/arti...chnology-demo/). Bref tous le monde ou presque fait de la R&D sur la parallélisation de logiciels.
Je vous invite d'ailleurs à lire le fil suivant, qui est une bonne introduction à la problématique du multithread dans le jeu vidéo : http://www.developpez.net/forums/d60...oppement-jeux/
Ca fait pas mal d'année que je travaille sur le problème en collaboration avec lsong et je propose aujourd'hui notre solution. Notez que cette solution ne fonctionne que dans un cas très particulier, dont le jeu vidéo 3D temps réel fait parti. Ce n'est pas une solution pour toutes les applications !!!
La bibliothèque de calculs multithread en question est utilisable dans les moteurs de physique et les moteurs d'affichage 3D.
Je poste ici les résultats de mes tests de performances : j'obtiens des gains de performances de l'ordre de x1,9 pour 2 coeurs (je peux gérer x1,9 plus d'objets 3D sur deux coeurs que sur un seul, à fréquence égale), de x2,4 pour 3 coeurs et x2,55 sur 4 coeurs. Je compte sur ces résultats pour trouver des partenaires pour une démo de jeu vidéo.
Voir le détails des tests concernant la montée en charge sur QuadCoeur :
http://www.acclib.com/2009/01/perfor...balancing.html
Nouvelle démo :
http://www.acclib.com/2009/01/load-b...-23012009.html avec x1.6, x2.1 et x2.5 gain de performance pour 2 3 et 4 threads.
Voir le test sur Sur Corei7 (Quadcoeur HT), le gain maximum est de x4 pour 8 threads :
http://www.acclib.com/2009/01/load-b...-27012009.html
Pour les curieux, J'utilise un système de répartition des calculs basés sur les données, le monde 3D est divisé en zones géographiques calculable en parallèle. Le point clé (la plus grosse difficulté) à été de trouver un moyen de synchroniser en temps réel les zones entre elles quand les objets passent d'une zone à l'autre.
De fait, on n'utilise pas du tout la parallélisation fonctionnelle, celle ou les fonctions du jeu vidéo sont placées dans des threads séparés.
Vincent
Partager