Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Moteur CW / C++] GZE - GroundZero Engine

Un moteur, Zéro dépendance, du vrai multiplateforme PC/Mobile/MCU

    1 juin 2016 à 11:44:04

    D’accord, malgré tout les questions sont pertinentes

    Lynix a écrit:

    Je ne l'oublie pas, mais toi tu ne devrais pas oublier que jusqu'ici, le JIT n'a jamais battu l'AOT (sinon on serait beaucoup plus nombreux à l'utiliser).

    Lynix a écrit:

    C'est le principe du JIT oui, d'optimiser au runtime en fonction de ce qui prend le plus de temps, mais je le répète, ça ne vaut rien jusqu'ici pour un moteur de jeu.

    Le désavantage que tu énonce, qui semble être le seul, est un long temps de compilation au lancement qui rendrait le tout inutilisable.

    Bon, j'ai poster pour monter mes premiers avancement, donc ils est un peu tôt pour dire que je n'ai pas ce problème. Mais je peux donner les vrai chiffres que j'ai en se moment et j'en suis assez satisfait.

    C'est un premier jet et je suis certain que je peux améliorer le tout bien d'avantage.

    Alors pour mon moteur entier, (je suis conscient qu'il n'est pas 100% complet, mais il n'en sera pas beaucoup plus lourd une fois fini), il prend 1 minute 39 en AOT



    Ensuite pour la version JIT, avec exactement les même options de compilation (incluant l'optimisation -O2 ).
    Ça prend 6 secondes.

    J'ai un rapport 16 fois plus rapide.

    Le lancement peu être encore bien plus rapide sans activer les optimisations, je vais tester lorsque j'aurais 2 minutes.

    Ça me semble utilisable pour plusieurs milliers de lignes de codes, et quand on y pense un jeu ne va prendre qu'une fraction de cela.
    J'ai aussi pensé à rendre le moteur comme une lib déjà chargé à l'avance , on peut voir ça comme une dll et les jeux s'y connectent.

    Lynix a écrit:

    Donc bonne continuation, appelle-moi le jour où tu veux faire un benchmark entre nos moteurs respectifs.


    Si on parle de JIT et non de rendu GPU, tu va pouvoir tester toi même, je conçois une VM qui va accepter pratiquement tout code C++ sans trop de dépendances. Au niveau des performances, et bien elles seront exactement les mêmes que si tu compile en AOT (Façon non portable, dernière version SEE, x64, etc).
    La différence est lorsque tu distribue ton programme, il va pouvoir être compiler différemment selon l’architecture.

    -
    Edité par Maeiky 1 juin 2016 à 11:58:35

    • Partager sur Facebook
    • Partager sur Twitter
    CWC, pour compiler facilement du C++. CW un nouveau langage intuitif. GZE - Un moteur C++/Cw
      1 juin 2016 à 12:48:04

      Maeiky a écrit:

      Au niveau des performances, et bien elles seront exactement les mêmes que si tu compile en AOT (Façon non portable, dernière version SEE, x64, etc).
      La différence est lorsque tu distribue ton programme, il va pouvoir être compiler différemment selon l’architecture.

      Ça encore une fois, c'est la théorie du JIT, en pratique seuls les "hotspots" sont jités, et bien moins que s'ils étaient compilés en AOT -msse4 -O3 -fvectorize etc.

      Je ne veux pas parler de chiffres, mais plutôt de faits:

      -l'AOT est très majoritairement utilisé dans les applications performantes.

      -Android, qui utilisait le JIT, est passé à l'AOT (c'est ça le fameux "Optimisation des applications" au lancement), avec pour mention que ça allait "améliorer les performances" (note: les applications sont compilées sur la plateforme même, donnant l'avantage du JIT à l'AOT, cependant la compilation est elle-même plutôt longue, j'utilise cet exemple pour indiquer que le JIT manque clairement de temps par rapport à l'AOT et ne peut donc atteindre les mêmes performances).

      Comment tu expliques ces deux faits ? Tu es plus malin que les ingénieurs de Google et les développeurs de moteurs de jeux ?

      -
      Edité par Lynix 1 juin 2016 à 13:10:40

      • Partager sur Facebook
      • Partager sur Twitter
      Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
        1 juin 2016 à 14:04:03

        Pas plus malin, je procèdes différemment depuis longtemps, je sort des chantiers battu, tu devrais le savoir ;)

        Lynix a écrit:

        Ça encore une fois, c'est la théorie du JIT, en pratique seuls les "hotspots" sont jités, et bien moins que s'ils étaient compilés en AOT -msse4 -O3 -fvectorize etc.

        Nonon, LLVM applique les optimisations sur l'ensemble. Par contre si je veux me compliquer la vie, je peux séparer mes modules et appliquer des optimisations différentes.
        L'idée des "hotspots" est de séparer les "classes" qui sont gourmandes, mais je ne suis même pas certains que ce sera nécessaire.

        J'ai déjà un bon résultat 6 secondes en full optimisé avec le moteur complet.

        Ce que je vais faire surtout est d'enlever tout ce qui est lourd à compiler et qui ne risque pas trop de changer avec le temps et de l'inclure dans la VM.

        Je vais inclure le plus de chose dans la VM, du genre Freetype, lecture Audio, etc.

        Ensuite le reste sera très léger à compiler et exécuter.

        J'ai pas essayer la nouvelle API "orc" non plus, qui améliore peut-être les performances, à voir.

        • Partager sur Facebook
        • Partager sur Twitter
        CWC, pour compiler facilement du C++. CW un nouveau langage intuitif. GZE - Un moteur C++/Cw
          5 juin 2016 à 20:58:12

          Une vidéo qui explique un peu mieux le truc :

          Kernel Cpcdos OSx + LLVM

          Je suis conscient que l'AOT a des avantages, c'est pour cela que je vais probablement combiner les 2 méthodes.
          En fait on peut optimiser un code LLVM IR pour donner un autre LLVM IR, l'optimisation peut se faire à n'importe quel étape, donc on peut imaginer une phase d'installation pour la première exécution, ensuite le LLVM IR sera plus rapide à démarrer.
          • Partager sur Facebook
          • Partager sur Twitter
          CWC, pour compiler facilement du C++. CW un nouveau langage intuitif. GZE - Un moteur C++/Cw

          [Moteur CW / C++] GZE - GroundZero Engine

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown