Vous devez prendre en compte plusieurs éléments pour déterminer si les threads de processus de votre jeu sont utilisés et planifiés de manière appropriée pour obtenir les meilleures performances.
- Frame Pacing
- Multithreading et parallélisation des threads
- Affinité des cœurs de processeur
Multithreading
De nombreux jeux et moteurs de jeu utilisent le multithreading pour diviser le travail du processeur en tâches logiques, qui peuvent être exécutées de manière plus ou moins indépendante. Une configuration typique consiste en un thread de jeu pour l'entrée et la logique du jeu, un thread de rendu pour la préparation et l'envoi des objets à dessiner, et des threads de travail pour d'autres sous-tâches telles que les animations ou l'audio.
Nous vous recommandons de paralléliser les threads pour profiter des gains de performances du multithreading. Par exemple, les threads de jeu et de rendu s'exécutent partiellement ou totalement en même temps sur différents cœurs. Cela n'est pas toujours possible, par exemple dans les cas de dépendances de données partagées. Toutefois, lorsque cela est possible, cela peut entraîner des temps de processeur plus faibles et donc des fréquences d'images potentiellement plus élevées.
Affinité des cœurs de processeur
Un facteur qui affecte considérablement les performances de vos charges de travail de processeur est la façon dont elles sont planifiées sur les cœurs. Cela peut être divisé en deux composants :
- Si les threads de votre jeu s'exécutent sur le cœur le plus adapté à leur charge de travail.
- Si les threads de votre jeu passent fréquemment d'un cœur à l'autre.
Les appareils modernes utilisent souvent une architecture appelée calcul hétérogène, dans laquelle les cœurs ont différents niveaux de performances :
- Un ou quelques cœurs offrent des performances maximales, mais consomment plus d'énergie. Ils sont parfois appelés "grands" cœurs.
- D'autres cœurs ont des performances maximales inférieures, mais sont plus économes en énergie. Ils sont parfois appelés "petits" cœurs.
- Facultatif : un ou plusieurs cœurs offrent un équilibre entre performances et puissance. Ils sont parfois appelés "cœurs moyens".
Vous pouvez examiner le comportement des threads de processeur sous Utilisation du processeur en activant le processeur dans la configuration du profil lors de la capture d'une trace. En effectuant un zoom sur une section de votre trace <200 ms, vous pouvez afficher les processus individuels s'exécutant sur les cœurs de processeur de votre appareil. En règle générale, les cœurs plus petits correspondent à des index plus petits (par exemple, les processeurs "0" à "3"), tandis que les cœurs plus grands correspondent à des index plus élevés (par exemple, les processeurs "6" à "7") et les cœurs moyens, le cas échéant, occupent des index intermédiaires (par exemple, les processeurs "5" à "6"). Il s'agit d'une convention courante, mais elle n'est pas garantie.
Si vous constatez que certains threads sont planifiés sur des processeurs qui ne répondent pas à leurs besoins en termes de performances ou de puissance, envisagez de définir manuellement l'affinité du processeur pour ces threads.
Vous pouvez également observer si vos threads passent d'un cœur à l'autre. Ces changements de cœur entraînent une surcharge due au changement de contexte et à la perte d'état avec le cache/les registres d'un cœur.
La définition de l'affinité du processeur pour un thread indique au système de le planifier sur le cœur donné lorsque votre jeu est au premier plan. Plusieurs facteurs sont à prendre en compte :
- Le logiciel de la plate-forme ne peut pas ajuster dynamiquement le placement des tâches pour les facteurs d'exécution tels que la charge et la limitation thermique.
Les tests de performances sur différents appareils peuvent générer des caractéristiques de performances très différentes, en particulier si les appareils varient considérablement en termes de prix ou de date de sortie.
Un appareil plus récent ou plus cher peut exécuter une charge de travail donnée sur un petit cœur, mais un appareil plus ancien ou plus abordable peut nécessiter un cœur plus grand pour respecter les délais de cette même charge de travail.
En forçant les affinités avec les grands cœurs, vous risquez d'augmenter inutilement la consommation de la batterie et la charge thermique.
Pour ces raisons, il est généralement préférable d'éviter de définir manuellement les affinités du processeur.