[WIP] Simu Course réaliste + Map + Volant

Modérateur : Administrateurs Suppléants

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par djulio74 » 12 Nov 2018 08:50

au plaisir de t'avoir aidé :super:
qu'entend tu pas les job? tu veux dire les Thread?

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Twiixy
Messages : 178
Inscription : 04 Déc 2016 09:38

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Twiixy » 12 Nov 2018 10:41

Le "Unity Job System". C'est un système qui a été ajouté à la sortie de Unity 2017~ en même temps que l'ECS, ça permet d'utiliser les threads sans les problèmes qui vont généralement avec (thread pool, race condition, dépendance), un très bon ajout au moteur.

L'autre spécificité qui n'est pas des moindre c'est la possibilité de manipuler les composant Unity dans t'es thread (ou plutôt t'es Jobs), ce qui n'est pas possible avec l'utilisation des thread c# classique, par exemple tu peux appliquer des transform, tirer des raycast et autres en parallèle. La communauté attendait ça depuis plusieurs années.

Tu devrais te renseigner dessus, c'est peux être ce qui va te pousser à enfin upgrade à une version plus récente, comme j'ai cru comprendre que tu aimais la génération procédural en temps réel. Non seulement ça rend le multithread "safe" mais ça facilite le débugage de ton code en plus de l'aéré, hésite pas si tu a des questions un peu plus poussé dessus.

Juste une précision, il est encore considéré en développement du fait que Unity ajoute continuellement le support d'autres composant, je sait qu'il supporte déjà les transform, les raycast, raycasthit, et quelques truc lié à l'IA. L'API est très stable et ne change pas vraiment (juste des ajout, pas de changement sur l'api de base) donc on peux l'utiliser sans craindre de voir son code obsolète :-D .

Avatar de l’utilisateur
Liven
Messages : 267
Inscription : 30 Nov 2017 01:48

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Liven » 12 Nov 2018 13:17

Twiixy a écrit :
12 Nov 2018 10:41
Le "Unity Job System". C'est un système qui a été ajouté à la sortie de Unity 2017~ en même temps que l'ECS, ça permet d'utiliser les threads sans les problèmes qui vont généralement avec (thread pool, race condition, dépendance), un très bon ajout au moteur.

L'autre spécificité qui n'est pas des moindre c'est la possibilité de manipuler les composant Unity dans t'es thread (ou plutôt t'es Jobs), ce qui n'est pas possible avec l'utilisation des thread c# classique, par exemple tu peux appliquer des transform, tirer des raycast et autres en parallèle. La communauté attendait ça depuis plusieurs années.

Tu devrais te renseigner dessus, c'est peux être ce qui va te pousser à enfin upgrade à une version plus récente, comme j'ai cru comprendre que tu aimais la génération procédural en temps réel. Non seulement ça rend le multithread "safe" mais ça facilite le débugage de ton code en plus de l'aéré, hésite pas si tu a des questions un peu plus poussé dessus.

Juste une précision, il est encore considéré en développement du fait que Unity ajoute continuellement le support d'autres composant, je sait qu'il supporte déjà les transform, les raycast, raycasthit, et quelques truc lié à l'IA. L'API est très stable et ne change pas vraiment (juste des ajout, pas de changement sur l'api de base) donc on peux l'utiliser sans craindre de voir son code obsolète :-D .
Tu aurais des conseils sur des tutos ou documentation clair sur le sujet car j'ai essayé plusieurs fois de m'y penché, mais les patern m'ont toujours paru un peu obscures jusqu'à maintenant.
De plus comme tous les composants ne sont pas encore présents, est ce que ça se mixe bien avec le c# tradi?
Utilise tu aussi l'ECS? (et même questions)

Twiixy
Messages : 178
Inscription : 04 Déc 2016 09:38

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Twiixy » 12 Nov 2018 14:13

Salut Liven, je te conseille de regarder les unite talk et autres convention de Unity sur le sujet, sinon tu a la documentation officiel de Unity, ils ont déjà fait pas mal de doc dessus.

Sinon oui, le Job System se mixte très bien en POO ou en ECS, ça serrais un peu long a expliquer là d'autant que je n'ai plus l'api exact en tête mais c'est très rapide à mettre en place une fois que tu à compris. Le seul inconvénient c'est qu'ont doit utiliser des arrays spéciaux (NativeArray, TransformAccessArray) pour l'envoie des variables dont ont veux récupérer la valeur une fois le job effectué.
Alors si tu a une list et que tu fait un ToArray il faudra aussi récupérer l'array à la fin du job pour faire un ToList et actualiser la list principal.

Donc y'a quand même un peu de micro-optimisation à faire derrière si ont veux utiliser une list vue qu'ont traite souvent avec des milliers d'objets. Cependant Unity propose une NativeList mais qui ne peux être utiliser que dans 1 thread parallèle (ce qui potentiellement réduira la vitesse des proc multicoeurs).
Sa parait compliqué mais on parle seulement de 1 ou 2ms sur le main thread si on optimise pas, donc ça reste plus rapide que faire le calcul des jobs sur le main thread :lol: .

Sinon je n'utilise pas l'ECS, j'aime bien la programmation orienté objet et je pense que l'ECS est destiné à des jeux avec beaucoup d'entité qui voudrait garder un gameplay fluide, pour un jeu de stratégie en temps réel avec des milliers d'unité par exemple (hâte de voir ça).

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par djulio74 » 28 Nov 2018 12:44

Merci à vous deux pour tout ces renseignement, que j'ai potassé avec attention. :super:
Cela dit je suis sur un autre coup : Les Compute Shader, qui permettent d'utiliser le GPU pour les calculs par exemple.
Et après quelques tests, je serait presque sur, pour pas dire certains, que ce sera plus rapide ( et de loin ) que le Unity Job Systeme ou autres utilisation des threads du CPU.

Les test en question découle d'un post posté par un autre membre (ici) et qui dans mon cas consiste à
- avoir une sphere de 25159 vertex.
- avoir 1550 point (Vector3) choisis aléatoirement parmis les vertex du mesh , assigner à chaque point une couleur
- rechercher, pour chacun des vertex du mesh, lequel de 1550 points lui est le plus proche, et lui assigner sa couleur

Le différenciation CPU / GPU se fait juste sur la dernière étape ce qui fais quand même quasi 39 millions de calculs et condition.(if)

Le temps mis pour cette seule étape :
-Calcul avec CPU : environ 2.45s
-Calcul avec GPU : environ 0.01s
==> soit environ 240 fois plus rapide!! :|

De plus, les compute shader peuvent avoir un partage de donnée inter thread pour éviter les conflit d'écriture sur la même variable par exemple.

Si j'arrive a utiliser ça pour la génération de la Map, je serais refais!! ::d ::d

EDIT :
Suite a la suite de mes test, le gain est même largement suppérieur!!
au début je ne faisait qu'une fois le calcul pour chacun (CPU - GPU), et lançait autant de fois que voulu le playMode et faisais les calcul a la main, en faisant la moyenne de chaque résultat. Cette fois j'ai plutôt lancé un certain nombre d'itération via script : 1000 pour le GPU, 10 pour le CPU. que 10 car 2.5s par itération..
et le résultat est là, avec la solicitude en continue du GPU avec le script je tombe à :
- temps CPU : 2.4s
- temps GPU : 0.0024s
==> soit environ 1000 fois plus rapide!! :|

Ce qui semble logique car le GPU utilise 1024 threads en fait pour le shaderModel 5.0 ( 768 pour le SM 4.0)
je partage un petit UnityPackage pour ceux qui veulent tester

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Répondre

Revenir vers « Vos créations, jeux, démos... »