![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Développement 2D, 3D et Jeux Forum développement 2D, 3D et Jeux. Avant de poster : Les FAQs Programmation 2D, 3D et Jeux |
| Affichage des résultats du sondage: Pour ou contre le multithreading dans les moteurs 3D ? | |||
| Pour |
|
72 | 96,00% |
| Contre |
|
3 | 4,00% |
| Votants: 75. Vous ne pouvez pas participer à ce sondage. | |||
![]() |
|
|
Outils de la discussion |
|
|
#16 (permalink) |
|
Membre émérite
![]() |
Ce qui est important n'est pas l'algorithme utilisé mais le pixel que tu sors et à quelle vitesse tu le sors.
Les gens qui se sont concentré sur l'algorithme (Videologic avec Powervr, Microsoft avec Talisman) se sont cassé les dents, parce qu'il a au final toujours été plus facile (historiquement) d'adapter le problème à l'outil qui peut le traiter le plus rapidement (un millions de marteaux à la recherche de clous). Bien entendu, *l'algorithme* est important, mais pas cet algorithme-là en particulier à l'exclusion des autres. Pour le processeur task parallel, c'est difficile, mais le task parallelism et data parallelism ont souvent été orthogonaux. Donc on n'oppose pas l'un à l'autre. Le GPU est toujours fortement pipeliné par exemple. Bien entendu comme depuis peu (shaders unifiés) ce sont les mêmes parties qui traitent les pixels et les sommets, les tâches qui étaient auparavant vraiment parallèles deviennent concurrentes. Mais au fond c'est tant mieux parce que ça garantit une meilleure utilisation.
__________________
LeGreg | Bezier | Raytracer | Voxel | Zbuffer | D3D10 | Animation mentor | Mes articles | Mon blog |
|
|
|
|
|
#18 (permalink) |
![]() Date d'inscription: juillet 2005
Localisation: Pau
Âge: 27
Messages: 8 218
|
Il y a de bonnes références : Sutter, Eckel, Intel, ...
Tu as un problème à résoudre, et tu as un algorithme task-parallel uniquement (pas le problème, je me suis trompé dans mon premier post, j'ai rattrapé sur le second), ben c'est comme ça. Ce n'est pas parce que tu vas le mettre sur un processeur avec plus de cores que ce que tu as de tâche que ça va transformer la solution task-parallel en data-parallel. L'utopie, c'ets bien, mais la réalité c'est tout de même mieux.
__________________
Je ne réponds pas aux questions par MP Lorsque vous avez la solution, n'oubliez pas de marquer le sujet résolu Tutos et critiques de livres : http://matthieu-brucher.developpez.com/ Tutos Boost : http://matthieu-brucher.developpez.c...els/cpp/boost/ Mes blogs : français et anglais Le blog de ma femme : http://www.eifelle.com/ Jeu : Battez-vous pour moi Dernière modification par raptor70 ; 10/09/2008 à 22h48 Motif: mise en forme |
|
|
|
|
|
#20 (permalink) | |
|
Membre émérite
![]() |
Citation:
__________________
LeGreg | Bezier | Raytracer | Voxel | Zbuffer | D3D10 | Animation mentor | Mes articles | Mon blog Dernière modification par raptor70 ; 10/09/2008 à 22h50 Motif: mise en forme |
|
|
|
|
|
|
#21 (permalink) | |
![]() Date d'inscription: juillet 2005
Localisation: Pau
Âge: 27
Messages: 8 218
|
Un processeur n'est pas plus data-parallel qu'un autre, c'est l'algorithme qui sera data-parallel ou task-parallel ou rien du tout. Et la majorité des algorithmes, c'est task-parallel ou rien du tout.
Citation:
__________________
Je ne réponds pas aux questions par MP Lorsque vous avez la solution, n'oubliez pas de marquer le sujet résolu Tutos et critiques de livres : http://matthieu-brucher.developpez.com/ Tutos Boost : http://matthieu-brucher.developpez.c...els/cpp/boost/ Mes blogs : français et anglais Le blog de ma femme : http://www.eifelle.com/ Jeu : Battez-vous pour moi Dernière modification par raptor70 ; 10/09/2008 à 22h51 Motif: mise en forme |
|
|
|
|
|
|
#22 (permalink) |
|
Membre émérite
![]() Date d'inscription: août 2007
Messages: 738
|
est ce vraiment une question de data parallelisme ? ce n'est pas plutot une question de localité (c'est a dire, faire deux choses simultanément sans qu'elles interfèrent ?) il me emble que le data-aprallelisme est uniquement sur un algorithme ou une partie de code, alors qu'un logiciel a une architecture bien plus large que cela.
Le GPU n'effectue pour ainsi dire qu'une tache, les cartes dediees sont donc adaptées a un pipeline graphique a plusieurs etapes et du data parallelisme, cependant il n'est pas necessaire de diviser un logiciel ni en "taches" ni en "data" parallelisme, tu peux faire un peu d'IA et un peu de physique ant qu'elles n'entrent pas en conflit. Et ces taches ne sont pas "data paralleles", elles sont independantes. On peut augmenter l'independance en utilisant des copies privées sur lesquelles chaque "worker" peut travailler sans voir son resultat detruit par un autre trhead, et ainsi de suite. |
|
|
|
|
|
#23 (permalink) | ||
![]() Date d'inscription: juillet 2005
Localisation: Pau
Âge: 27
Messages: 8 218
|
Citation:
En général, seule une partie du code a cette propriété. Le principe est de l'agrandir au maximum, mais comme c'est un sous-ensemble très restreint des algorithmes existants, c'est difficile à mettre en oeuvre. L'avantage du parallélisme de données n'est pas vraiment de traiter plus vite les mêmes données avec un processeur plus rapide (justement parce qu'ona une partie non parallélisable, et donc on atteint rapidement les limites de la parallélisation), mais de traiter plus de donénes dan sle même temps. Par exemple, on fait sauter la limitation du nombre d'unités dans un jeu. Citation:
__________________
Je ne réponds pas aux questions par MP Lorsque vous avez la solution, n'oubliez pas de marquer le sujet résolu Tutos et critiques de livres : http://matthieu-brucher.developpez.com/ Tutos Boost : http://matthieu-brucher.developpez.c...els/cpp/boost/ Mes blogs : français et anglais Le blog de ma femme : http://www.eifelle.com/ Jeu : Battez-vous pour moi |
||
|
|
|
|
|
#24 (permalink) | |
|
Membre émérite
![]() Date d'inscription: août 2007
Messages: 738
|
Citation:
c'est dur de faire du parallelisme avec le C++ car il n'a pas été prévu pour au debut, mais tu divises quand meme ton logiciel en 4 et je pense que tu peux faire mieux. en articulier, tu parles de taches qui sont toutes continues (la physique, l'IA, etc) Moi je te parle de taches ponctuelles, comme "lancer un missile", "avancer de deux pas", que tu englobes allegrement dans "IA" (ou dans "Gameplay"). En gros je pense que tu parles de theorie mais que tu es trop loin de la pratique. Les micro-taches ci-dessus ne sont pas data ou task ou quoi que ce soit, elles sont indépendantes, ou locales, ne necessittent pas d'etre ordonnancées. Toi tu parles plutot de la resolution generique de programmes, ce qui me parait tres eloigné de la réalité mais bon pour un article de wikipedia. |
|
|
|
|
|
|
#25 (permalink) | ||
|
Membre émérite
![]() |
Citation:
Par ailleurs, je n'oppose pas Data parallelism et task parallelism. Je dis qu'on doit exploiter les deux (ce que les GPUs actuels font pour le domaine du graphisme mais feront demain dans beaucoup d'autres domaines). Le danger c'est le code "serial". Mais on y travaille. Citation:
Je cite une étude d'Intel : "D3D Runtime and Driver account for 25-40% of CPU cycles per frame" et c'est sans compter les cycles CPU "administratifs" que l'application doit dépenser de son coté pour garder le GPU busy. La tâche "affichage" est celle qui est coûte le plus sur un jeu moderne. -> avec une nouvelle API, et un GPU qui est capable de générer ses propres tâches, tu réduis ce coût d'un ordre de magnitude. Et du coup l'importance du CPU faiblement threadé et du code serial décline. Cela va arriver : 2009/2010 : Direct3D11 introduit le data parallelism dans son API (programmation multithread). 2012 (?) : Direct3D12, le GPU est suffisamment flexible pour être programmable en langage proche du C++ (ou une variante d'un langage fonctionnel pour les amateurs) et pouvoir générer ses propres tâches (rester occupé sans s'appuyer sur des cycles du processeur serial). Je cite Tim Sweeney (Epic games et Unreal engine) en 2005 : "2009 Next console generation. Unification of the CPU, GPU. Massive multi-core, data parallelism, etc" "By 2009, game developers will face… - CPU’s with: – 20+ cores – 80+ hardware threads – >1 TFLOP of computing power - GPU’s with general computing capabilities. - Game developers will be at the forefront." Pour être safe, remplace 2009 par 2012 (En 2005 il était encore optimiste Tim Sweeney). LeGreg
__________________
LeGreg | Bezier | Raytracer | Voxel | Zbuffer | D3D10 | Animation mentor | Mes articles | Mon blog Dernière modification par raptor70 ; 10/09/2008 à 22h56 Motif: mise en forme |
||
|
|
|
|
|
#26 (permalink) | |||||
![]() Date d'inscription: juillet 2005
Localisation: Pau
Âge: 27
Messages: 8 218
|
Citation:
Citation:
Citation:
Citation:
Citation:
Exemple avec la PS3. Avec Folding@Home, elle explose en terme de Tflops la contribution des PCs. C'est bien, mais si on regarde mieux les chiffres, dans les applications non massivement parallèlisables, elle reste très loin du PC. Quand dans une application, on a souvent des branchement et des prises de décision, elle s'écroule face à un processeur mono-thread actuel.
__________________
Je ne réponds pas aux questions par MP Lorsque vous avez la solution, n'oubliez pas de marquer le sujet résolu Tutos et critiques de livres : http://matthieu-brucher.developpez.com/ Tutos Boost : http://matthieu-brucher.developpez.c...els/cpp/boost/ Mes blogs : français et anglais Le blog de ma femme : http://www.eifelle.com/ Jeu : Battez-vous pour moi Dernière modification par raptor70 ; 10/09/2008 à 23h03 Motif: mise en forme |
|||||
|
|
|
|
|
#27 (permalink) |
|
Candidat au titre de Membre du Club
![]() |
Donc pour bien faire, il faudrait différencier les tâches pouvant être parallélisées de celles qui ne le peuvent pas (ou plutôt que l'intérêt n'y est pas).
Si je suis ton raisonnement, une IA c'est de la pise de décision donc pas d'intérêt à être multi-threadé ? Ou devrait-elle avoir son propre thread ? Je dois avouer que je m'y perd un peu... En tout cas, c'est un débat très intéressant. |
|
|
|
|
|
#28 (permalink) |
|
Membre émérite
![]() Date d'inscription: août 2007
Messages: 738
|
Un jeu n'est pas qu'un algorithme, c'est beaucoup. si certains sont divisibles en taches car "data parallels" tant mieux pour eux. si d'autres ne le sont pas, il reste la possibilité de faire tourner les bouts de codes independants en parallele, sans que ca soit le MEME bout de code. Tu est calé sur une boucle for, mais dans un jeu, y'en a pas qu'une de boucle for......
Dernière modification par raptor70 ; 10/09/2008 à 23h05 Motif: mise en forme |
|
|
|
|
|
#29 (permalink) | |
![]() Date d'inscription: juillet 2005
Localisation: Pau
Âge: 27
Messages: 8 218
|
Citation:
Je n'ai pas dit qu'un jeu n'était qu'un algorithme. Il y a plusieurs entités qui tournent ensemble et communiquent ensemble. Ce nombre sera quasiment fixe dans les années à venir. Ces tâches diverses peuvent elles-même être séparées en d'autres tâches (des bouts de code différents). Certaines pourront scaler, pas d'autres. Mais il y a une limite à ce parallélisme qui est inhérent à la phrase que tu as dite, à savoir "sans que ce soit le MEME bout de code". Ces différents bouts sont en nombre finis, donc il y a un nombre fini qui sera rapidement atteint de tâches différentes (et toutes ne peuvent pas être exécutées en même temps). Par exemple dans un RTS, la sous-tâche de gestion de chaque entité sur le terrain pourra scaler dans une certaine limite. En revanche, la gestion du graphisme sera, avec l'architecture actuelle, bien plus difficile à scaler. Et même dans l'IA, il y a la gestion du path-finding qui aura elle aussi du mal à scaler car pour déplacer une unité, il faut tenir compte des autres unités, donc même là, il faudra faire attention.
__________________
Je ne réponds pas aux questions par MP Lorsque vous avez la solution, n'oubliez pas de marquer le sujet résolu Tutos et critiques de livres : http://matthieu-brucher.developpez.com/ Tutos Boost : http://matthieu-brucher.developpez.c...els/cpp/boost/ Mes blogs : français et anglais Le blog de ma femme : http://www.eifelle.com/ Jeu : Battez-vous pour moi Dernière modification par raptor70 ; 10/09/2008 à 23h06 Motif: mise en forme |
|
|
|
|
|
|
#30 (permalink) |
|
Membre Expert
![]() Date d'inscription: février 2005
Messages: 1 195
|
Personnellement je me demande pourquoi c'est pas le compilo qui gère cela. En théorie rien qu'en parcourant le code il devrait être capable de dire quelles tâches et groupes de tâches peuvent être exécutés parallèlement ou non (ou du moins en déduire une bonne partie), est-ce qu'il existe déjà des approches de ce type ?
|
|
|
|
|
![]() |
![]() |
||
Que peut apporter le multithread au développement de jeux ?
|
||
| Outils de la discussion | |
|