Simulateur de particules

MalaMala Membre, Modérateur
02:52 modifié dans API AppKit #1
Histoire de m'aérer les neurones, je me suis amusé à  faire un petit simulateur de particules. C'est un sujet assez intéressant pour bien cerner les optimisations de codage aussi bien en terme d'algorithmie que de parallélisation.

Dans la foulée, je me suis aussi fait les dents sur la vectorisation SSE. Le gain apporté est très intéressant. Avec 2048 particules, sur mon Core 2 Duo 2,16Ghz, au bout d'un moment on a l'impression d'observer un amas globulaires en mouvement. L'impression de "vie" qui en résulte est assez poétique je trouve... 
:fouf):

Je vous livre la petite application (Intel seulement) qui en résulte...
Galaxy.zip

Elle permet au passage d'estimer le nombre de GFLOPS de la machine. Cela peut s'avérer intéressant pour comparer la puissance de calcul entre deux machines.

Réponses

  • AntilogAntilog Membre
    02:52 modifié #2
    o:)
    Wow
  • Paisible.frPaisible.fr Membre
    02:52 modifié #3
    Splendide ! Et effectivement ça à  un coté poétique.

    Le top serait d'avoir la même chose en économiseur d'écran avec un peu de couleurs.
  • schlumschlum Membre
    02:52 modifié #4
    Fais gaffe, les accélère pas trop... Tu risques de créer un trou noir qui va aspirer objective-cocoa.org  :o :fouf):
  • FloFlo Membre
    02:52 modifié #5
    Les ralentissements commencent à  4096 chez moi...

    Mon mac ce fait vieux  :-\\

    En tout cas super ton simulateur, ça ferait un tabac comme fond d'écran dans le monde de la recherche avec toutes ces petites particules.  o:)
  • MalaMala Membre, Modérateur
    octobre 2008 modifié #6
    En même temps, un économiseur d'écran taillé pour faire brûler les ventillos je sais pas si il serait très économique!  :)
  • MalaMala Membre, Modérateur
    02:52 modifié #7
    Je continue mes investigations avec une nouvelle mouture intégrant une optimisation basée sur l'algorithme de l'arbre de Barnes-Hut.

    Galaxy1_1.zip

    Le principe consiste à  considérer qu'un groupe de particules éloignées est assimilable à  une force proportionnelle à  l'ensemble de leur masse au point de barycentre. On construit alors un arbre 3D ayant pour but de regrouper les particules en fonction de leur position.

    Un lien intéressant (mais à  extrapoler en 3D pour bien faire)  <3 <br />http://www.cs.princeton.edu/courses/archive/fall04/cos126/assignments/barnes-hut.html

    Ce calcul est néanmoins une approximation. Un coefficient permet de régler la précision/vitesse de calcul. Dans mon cas, j'ai figé le coef à  0.5 pour avoir un bon compromis. Sur un Octo, j'arrive à  une vitesse de calcul équivalente à  plus de 200 GFlops sur la base de l'algo de force brut de départ. Il faut néanmoins augmenter le nombre de particules pour creuser l'écart.

    En dégradant un peu plus la précision, on devrait pouvoir obtenir quelque chose de compatible pour un économiseur d'écran... ;)

    NB: pour le moment, la vectorisation n'est pas prise en compte par l'algo de Barnes & Hut. Le fonctionnement sur la base d'un arbre rend la vectorisation un peu plus délicate.
  • NseaProtectorNseaProtector Membre
    02:52 modifié #8
    Sur MacBook on la sent bien la différence, et c'est très beau. CHAPEAU !!!  o:)
  • MalaMala Membre, Modérateur
    02:52 modifié #9
    Ca y est, j'ai ajouté de la couleur.

    Galaxy1_2.zip

    Il me reste à  vectoriser pour voir ce que ça donne.
  • MalaMala Membre, Modérateur
    décembre 2008 modifié #10
    J'ai commencé à  mettre mes investigations au propre pour vous en faire quelques articles.

    http://www.particules.eliotis.com

    Pour le moment, seulement deux articles faute de temps mais c'est déjà  ça:
    - "Introduction" qui est plutôt de la vulgarisation.
    - "Premier projet" où l'on rentre dans le vif du sujet avec une première version du simulateur de particule.

    Dans le prochain article, je pense aborder les optimisations en mono-thread.  :brule:

    Edit: dans la foulée, ce serait sympa de faire aussi quelques benchs entre 32bits et 64bits.


  • MalaMala Membre, Modérateur
    02:52 modifié #11
    Ca y est j'ai enfin finalisé l'article sur l'optimisation "classique":

    - "Optimisation": Tests 32/64bits, tests sur la précision de calcul et optimisation sur la partie algorithme.

    Prochaine étape: optimisation par parallélisation (Vectorisation et Multi-threading).

    Et pour finir, j'ai prévu un portage iPhone avec Open GL ES pour voir ce que l'iPhone a dans le ventre...

      GalaxyiPhone.jpg ;)

  • Philippe49Philippe49 Membre
    février 2009 modifié #12
    Très intéressant ! 
  • wiskywisky Membre
    02:52 modifié #13
    Avec la GMA950 de mon mac mini, je peux monté en 2048 mais au dessus ça rame sec !
    Tu fait ça avec OpenGL ?
  • MalaMala Membre, Modérateur
    02:52 modifié #14
    dans 1243514274:

    Avec la GMA950 de mon mac mini, je peux monté en 2048 mais au dessus ça rame sec !
    Tu fait ça avec OpenGL ?

    Oui c'est normal. Ce n'est pas la partie graphique qui met ta machine à  genou mais les calculs gravitationnels.

    Il faut bien comprendre qu'il y a simulateur et simulateurs. Certains sont pensés pour faire du rendu pour les jeux et d'autres du calcul scientifique. La on est dans le deuxième cas de figure. Le programme simule les interactions gravitationnelles entre toutes les particules. Si tu es à  2048 sur ton Mac book, cela sous entend qu'à  chaque 'image' le programme fait un calcul de l'ordre de 2048^2 interactions soit plus de 4 millions de traitements. Sachant que pour chaque traitement entre deux particules, le programmes calcul la distance qui les sépares, puis en déduit la force exercée pour aboutir à  l'accélération et enfin la vitesse instantanée.

    Je t'invite à  regarder les sources et à  lire la présentation pour mieux comprendre ce qui se passe.




Connectez-vous ou Inscrivez-vous pour répondre.