Déterminer si un jeu est CPU ou GPU limité

Qu'est-ce qu'un moyen fiable, mais pas trop long, de déterminer si un certain jeu est limité par la carte graphique ou par la vitesse du processeur?

J'ai des idées préconçues quant à savoir si je suis principalement GPU ou CPU limité, mais j'aimerais vérifier si j'ai raison. J'ai des idées sur la façon dont je voudrais faire le tour, mais faire des benchmarks précis est notoirement délicat et je n'ai pas beaucoup d'expérience.

Je me demande donc quel serait un moyen simple de déterminer le goulot d'étranglement, n'ayant qu'un seul ordinateur avec une certaine configuration disponible? Quels outils utiliserais-je à cette fin?

Il serait également intéressant de déterminer si le montant de VRAM sur ma carte graphique est un facteur limitant.

    Deux règles d'utilisation que j'avais l'habitude d'utiliser:

    Si l'augmentation de la résolution entraînait une forte baisse de la fréquence d'images, cela pourrait indiquer que le jeu était lié au GPU, car la résolution accrue rend la carte vidéo beaucoup plus difficile et, par conséquent, prend plus de temps pour obtenir chaque image porte.

    D'autre part, si l'augmentation de la résolution ne provoquait qu'une baisse négligeable de la fréquence d'images (ou aucune diminution du tout), il s'agissait d'un indicateur que le jeu était lié à la CPU, car la complexité vidéo supplémentaire était facilement traitée par la vidéo de rechange La capacité de traitement de la carte alors que la logique de traitement du jeu principal a déjà rattrapé la CPU. Dans cette situation, le moteur du jeu est trop occupé pour pouvoir donner suffisamment de travail au sous-système vidéo.

    Cependant, je ne pense pas que les jeux aujourd'hui soient si simples que les performances sont facilement limitées comme ça. Depuis de nombreuses années, les GPU sont devenus plus complexes et les développeurs trouvent des moyens de décharger plus de travail, donc il y a beaucoup de travail qui pourrait être fait de chaque côté … C'est pourquoi je n'utilise pas ces règles. Beaucoup plus – ils ne s'appliquent pas vraiment. L'hypothèse était que l'augmentation de la résolution ne provoquait pas de travail supplémentaire sur la CPU.

    Si vous avez suivi les repères de la carte vidéo depuis Tom's Hardware Guide de façon religieuse au début des années 2000, vous pouvez voir cela parfois – en exécutant, par exemple, Quake 3 en utilisant une carte vidéo "moderne" et vous obtiendrez tellement de graphiques à barres qui ont été simplifiés.

    Si vous pouvez mesurer la fréquence d'images de votre jeu, essayez et voyez ce qui se passe.

    Comme la réduction de la résolution de l'écran et / ou des options de détails de texture est à peu près garantie pour améliorer les performances de n'importe quel jeu, cela ne peut pas être utilisé pour déterminer s'il est lié par le GPU ou non. Vous pouvez regarder pour voir quel niveau de résolution / texture le plus élevé est disponible pour votre système.

    Si vous pouviez réduire les performances de votre CPU (underclocking?), Cela pourrait vous donner une indication si le jeu était lié à la CPU, mais je ne pense pas qu'il soit 100% fiable.

    Il y a aussi un flou de ce qui est fait par le moteur de jeu (CPU) et ce qui est fait par le moteur de rendu (GPU). À la fin des années 1990 / début des années 200, la physique des jeux était utilisée par la CPU, mais les cartes graphiques ont commencé à être en mesure d'effectuer ces calculs sur un matériel dédié, ce qui les accélère et améliore les performances. Cela signifie que le fait de voir combien d'objets se déplacent sur l'écran (par exemple) ne peut pas être utilisé comme un guide de la puissance d'une CPU que vous avez, car beaucoup du mouvement pourrait être contrôlé par le moteur de physique basé sur GPU.

    Une chose à garder à l'esprit est que, en raison de la large gamme de matériel que les jeux PC doivent exécuter sur les développeurs de jeux seront à l'affût de tous les trucs qui peuvent améliorer les performances et aussi le jeu (nous l'espérons) se dégrader de manière à ce qu'il soit Jouable sur les machines de bas de gamme. Cela signifie que si vous disposez du matériel disponible, il sera utilisé, sinon au maximum, puis très proche.

    D'un point de vue purement observatoire (ne vérifie pas d'autres applications, etc.) Je crois que si vous êtes connecté au CPU, vous constaterez qu'il y a beaucoup plus de bégai de trame que le GPU attend sur la CPU, où, comme si vous apparteniez à un GPU, Être une expérience plus cohérente, bien que lente et lâche.

    Cela pourrait tous être héroïque.

    Si vous êtes à la recherche d'une estimation de balle "rapide et sale", voici deux tests que vous pouvez exécuter:

    1. Utilisez un moniteur de système ou un outil de profilage pour comparer l'utilisation du processeur et le GPU et voir si l'on est significativement sous-utilisé. Ma suggestion est GPUView .
    2. Effectuez tous les tests de goulot d'étranglement GPU en même temps et vérifiez si les performances s'améliorent:
      • Réduisez les profondeurs de bits du tampon de couleur / profondeur.
      • Utilisez les textures les plus élevées de niveau mip (résolution la plus basse).
      • Réduire la résolution.
      • Simplifiez le shader de sommet.
      • Réduisez la taille du format de sommet.

    Ce qu'ils veulent dire:

    • Une plus petite profondeur de bits signifie moins de ressources utilisées par pixel, révélant des goulets d'étranglement au niveau du framebuffer. Corrections possibles:
      • Profitez d'abord en profondeur
      • Utilisez moins de mélange alpha
      • Désactiver les écritures de profondeur dans la mesure du possible
      • Évitez le tampon inutile
      • Optimisez skybox (rendez-vous avec z-out tôt ou premier sans r / w de profondeur)
      • Utilisez des tampons avec des profondeurs de bits plus petites
    • Des textures plus petites impliquent moins de ressources et moins d'accès, révélant des goulets d'étranglement dans la bande passante de texture. Corrections possibles:
      • Utilisez des textures plus petites
      • Utilisez des profondeurs de bit de texture plus petites
      • Comprimer des textures
      • Utiliser mipmapping
    • La résolution réduite signifie moins de pixels à traiter, ce qui révèle des goulets d'étranglement à la fois le framebuffer et fragment shader. Corrections possibles:
      • Profitez d'abord en profondeur
      • Déplacer le travail de fragment shader vers vertex shader
      • Évitez une normalisation excessive
      • Évitez le filtrage de texture coûteux excessif
      • Réduire la complexité du fragment de fragments 🙁
    • Le shader de sommet plus petit signifie moins de traitement par sommet, révélant des goulets d'étranglement au stade de traitement des sommets. Corrections possibles:
      • Réduisez le nombre de sommets traités!
      • Déplacer les calculs par objet au côté CPU
      • Utiliser LOD
      • Faire moins de transformations en commençant par des espaces de coordonnées correctes
    • Les formats de sommets plus petits signifient moins de données à transférer, révélant des goulots d'étranglement au niveau de transfert de sommet / index. Corrections possibles:
      • Utilisez des formats de sommets plus petits (si le vôtre est inutilement gras)
      • Utilisez des formats de sommets plus petits (en dérivant des attributs de petits types au lieu de stocker les plus gros)
      • Utilisez des types d'index plus petits
      • Accéder séquentiellement aux données de vertex / index

    Si tout cela est fait et que vous ne voyez pas l'amélioration de la performance, il est probablement sûr de dire que vous êtes lié au CPU. Corrections possibles:

    • Plus de dosage
    • Moins de verrouillage
    • Travailler plus loin dans le tuyau
    • Obtenez plus de réalisme sur votre projet

    Si cette quantité de test GPU est encore trop étendue pour vous, vous pouvez choisir les plus simples modifications (réduisant la résolution) et espérons que cela vous indique quelque chose, mais vos résultats seront évidemment moins concluants, car cela ne révélera pas les goulets d'étranglement À certaines étapes du pipeline GPU.

    Si vous êtes lié à un GPU, pour isoler davantage les goulets d'étranglement du côté GPU, vous voudrez effectuer ces tests un à la fois, en commençant par le bas (fin de la pipeline) et en faisant progresser votre chemin (framebuffer -> texture – > Fragment d'ombrage -> traitement de vertex -> transfert de sommet).

    REMARQUE: cela suppose évidemment que vous avez accès à des paramètres qui vous permettent de faire ces modifications, ou que vous êtes un développeur et c'est un jeu pour lequel vous avez accès au code source.

    Vous pouvez ouvrir le Gestionnaire des tâches de Windows (celui que vous pouvez faire passer par Contrôle + Alt + Supprimer), puis le minimiser et jouer votre jeu pour un peu. Ensuite, quittez votre jeu et regardez l'utilisation de la CPU dans l'onglet performance (vous pouvez redimensionner le moniteur pour en savoir plus sur la tendance). Vérifiez si l'utilisation de votre CPU semble rester autour de 100% ou beaucoup moins.

    Je sais qu'il existe d'autres utilitaires qui vous permettent de visualiser l'utilisation du processeur, ainsi que l'utilisation de RAM et les IO de disque que vous pourriez essayer. Je ne sais pas s'il y en a un pour surveiller la performance de la carte graphique.

    Il y a quelques années, je le dirais définitivement en jouant avec la résolution: si la performance varie en relation directe avec la résolution, elle est liée au GPU, sinon c'est CPU, mais c'est une histoire différente maintenant, car les shaders sont en jeu. Certains des effets de shader ne peuvent être simplement atténués en abaissant la résolution, ils saisissent simplement la même quantité de ressources, peu importe le cas.

    Certaines options graphiques concernent uniquement la CPU, certaines seulement le GPU, et un mélange des deux (les effets de fumée sont un exemple commun).

    L'abaissement de la résolution est toujours une règle, mais ça ne fonctionne pas aussi bien qu'avant.

    Mais si j'avais l'argent, j'investirais sur un meilleur GPU qu'un CPU plus rapide, car il y a des extras que vous n'obtiendrez jamais sans plus de puissance GPU, comme Anti-Aliasing et Anisotropic Filtering.