Bonjour à tous,
Une présentation succincte :
TYPE : Bibliothèque générique de distribution de calculs. La première application concernera un moteur de physique pour le jeu vidéo.
NOM : 4D Game Engine Library.
TECHNO : C++ standard.
SITE : Désolé pour l'instant c'est en cours.
EQUIPE : Nous sommes trois
- Lsong 32 ans : moi même, je suis dans le développement Java(première version) et C++ (deuxième version, et troisième dont on commence le refactoring)
- fraggy 34 ans : architecture logicielle (analyse, conception, refactoring) et recherche de partenaires et de clients.
- ??? n'est pas inscrite sur le forum 33 ans : gestion et administration d'entreprise.
Nous avons bien quelques idées de scénarios mais le but de ce post n'est pas de monter une équipe amateur pour faire un jeu vidéo, cela dit, ça reste une option s'il y a des personnes suffisamment motivées.
L'avenir est aux processeurs multicores
On peut dire aujourd'hui que le processeur le plus performant sera celui qui aura le plus de coeurs. Intel a déjà mis sur le marché des Quad-core et dispose d'un processeur de laboratoire de 80 coeurs (http://www.pcinpact.com/actu/news/34...s-teraflop.htm). De même AMD prévoit ses Opterons quadricoeurs pour le milieu de cette année et travaille certainement sur des architectures plus musclées. Dans le domaine des consoles de jeu vidéo, le PowerPC tricoeurs hyperthreading équipe la XBox 360 de microsoft, le processeur 16 coeurs "the Rock" de Sun pourrait très bien convenir à la prochaine génération de console de jeu vidéo :p.
L'exploitation de ces architectures processeurs ne peut passer que par le développement multithread et le but de ce projet est d'apporter une solution pérenne à ce type de développement.
L'objectif de ce projet :
Il s'agit de proposer une bibliothèque permettant le calcul parallèle dans des domaines où les informations sont très liées, comme le moteur de physique d'un jeu vidéo.
Nous disposons actuellement d'un moteur de physique très basique en 2D basé sur des algorithmes gérant des cercles, des murs, la gravité ainsi que les collisions cercle-cercle et cercle-mur. Un démonstrateur est opérationnel et montre une augmentation de puissance de l'ordre de 300% sur un Quad-Core (il reste des parties non parallélisées).
La programmation parallèle :
Avant d'aller plus loin je vais vous présenter brièvement les principales méthodes de programmation parallèle, pour que chacun comprenne de quoi il en retourne car le sujet est assez vaste et complexe.
Il existe deux grands modèles pour paralléliser des calculs dans le cadre d'un jeu vidéo (http://www.gamasutra.com/features/20...onen_03.shtml).
- La décomposition fonctionnelle Le plus évident et le plus utilisé actuellement
Il s'agit de découper le jeu en fonctions (l'affichage, Physique, IA, son etc ...) et de les mettre sur des threads séparés, un exemple récent :C'est un système qui a fait ses preuves et qui exploite parfaitement un dual core. Ce type d'architecture se repartit très bien sur 2, 3 voir 4 coeurs (3 dans cas de Supreme commander), mais qu'adviendra-t-il quand les processeurs auront 8 cores ou plus ?Supreme Commander
Afin de tirer au mieux parti des derniers processeurs disponibles, les ingénieurs de GPG ont fait de Supreme Commander un jeu multithread, c'est-à-dire qu’il est capable de tirer parti des processeurs dotés de 1, 2 et même 4 core. Pour ce faire, ils ont opté pour une gestion du threading « relativement » simple, c'est-à-dire que chaque grande partie du jeu est un thread. Il y en a notamment un pour la partie graphique, un autre pour la partie simulation, et d’autres annexes moins gourmands pour le son notamment.
- La décomposition basée sur les données
Il s'agit de séparer les données en blocs distinct et de traiter ces blocs en parallèle. Ce type de programmation est très simple quand il s'agit de groupe de données indépendants, comme un rendu 3D (chaque mesh peut être préparée séparément), de la compression audio/vidéo, etc ...
L'avantage de ce modèle, c'est qu'il fonctionnera très bien sur une architecture 4-8-cores ou plus, ou sur un super calculateur comme BleuGene/L "65 536 processeurs double-coeurs, soit 131 072 coeurs de PowerPC 440 à 700 Mhz" (Ok personne n'a ça à la maison, mais ça viendra peut être).
Dans le cas du monde virtuel d'un jeu vidéo, les données sont intimement liées entre elles (le déplacement d'un objet peut perturber potentiellement l'ensemble de tous les autres objets). Si on découpe ce monde virtuel en zones contiguës indépendante et que l'on traite chaque zone en parallèle, il faudra prendre le temps de synchroniser chaque zone pour maintenir la cohérence dans le monde virtuel. Cette synchronisation est particulièrement couteuse en temps. C'est pour cela que les jeux vidéo actuels n'exploitent pas ce type de découpage, les gains obtenus par ce modèle sont éclipsés par le temps consacré à la synchronisation.
Une autre limite de ce modèle concerne le non déterminisme de l'ordre d'exécution, c'est à dire que rien ne peut prédire dans quel ordre vont se lancer les threads, ce qui entraine des problèmes de cohérence (en particulier pour les jeux en réseau).
Notre choix :
Nous avons pris le parti de travailler sur le modèle par répartition de donnée, les algorithmes que nous avons développé permettent de :
- synchroniser le monde avec des performances compatibles avec la réalisation d'un jeu vidéo.
- résoudre les problèmes liés au non déterminisme du modèle et faire des moteurs utilisable pour des jeux en réseau.
En forçant l'affinité du programme sur un seul coeur, notre démonstrateur gère environ 4000 cercles en mouvement et en collision.
Avec les 4 coeurs actif (Sur un Quad-core Q6600), le moteur gère jusqu'a 12000 cercles...
On obtient un gain de performance de l'ordre de 300% sur les calculs de physique, la perte est due en partie à l'affichage des 12000 cercles qui finissent par monopoliser un core entier.
Nos besoins :
- Rencontrer des partenaires industriels intéressés par le co-développement d'un moteur de jeu vidéo avec l'aide de cette bibliothèque. Donc si vous travaillez dans l'industrie du jeu vidéo ou si vous connaissez quelqu'un qui y travaille, pensez à nous !
- On aimerais aussi tester notre démonstrateur sur une machine comportant 8 coeurs ou plus (genre un bi ou quadri processeur quadricore)
- On aimerais rencontrer un développeur de moteur de physique qui connaitrait bien ODE (idéalement).
LSong
Partager