Pour déterminer si les threads de processus de votre jeu sont utilisés et planifiés de manière appropriée pour optimiser les performances, vous devez tenir compte de plusieurs éléments.
- 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 la logique d'entrée et de 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 entièrement en même temps sur différents cœurs. Cela ne sera 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 potentiellement des fréquences d'images plus élevées.
Affinité des cœurs de processeur
La façon dont vos charges de travail de processeur sont planifiées sur les cœurs a un impact significatif sur leurs performances. Elle peut être divisée en deux composantes :
- Indique 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 changent fréquemment de cœur.
Les appareils modernes utilisent souvent une architecture appelée calcul hétérogène, où les cœurs ont différents niveaux de performances :
- Un ou plusieurs cœurs offrent des performances maximales, mais consomment plus d'énergie. Ils sont parfois appelés cœurs "grands".
- D'autres cœurs ont des performances de pointe plus faibles, mais sont plus économes en énergie. On parle parfois de cœurs "petits".
- Facultatif : un ou plusieurs cœurs offrent un équilibre entre performances et puissance. On parle parfois de cœurs "intermédiaires".
Vous pouvez examiner le comportement des threads du processeur sous Utilisation du processeur en activant Processeur dans la configuration du profil lors de la création d'une trace. En zoomant sur une section de votre trace de moins de 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 petits cœurs correspondent à des index plus petits (par exemple, les processeurs 0 à 3), tandis que les grands cœurs correspondent à des index plus élevés (par exemple, les processeurs 6 et 7). Les cœurs intermédiaires, le cas échéant, occupent des index intermédiaires (par exemple, les processeurs 5 et 6). Il s'agit d'une convention courante, mais cela n'est pas garanti.
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 commutateurs de cœur entraînent des frais généraux liés au changement de contexte et à la perte d'état avec le cache/les registres d'un cœur.
Définir 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 en fonction de facteurs d'exécution tels que la charge et la limitation thermique.
Les tests de performances sur différents appareils peuvent donner 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 confortablement 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 de processeur.