Ci sono alcuni aspetti da considerare per stabilire se i thread del processo di gioco vengono utilizzati e programmati in modo appropriato per ottenere le prestazioni migliori.
- Pacing frame
- Multi-threading e parallelizzazione dei thread
- Affinità core della CPU
Multi-threading
Molti giochi e motori di gioco utilizzano il multithreading per suddividere il lavoro della CPU in attività logiche, che possono essere eseguite in modo indipendente. Una configurazione tipica è un thread di gioco per la logica di input e di gioco, un thread di rendering per la preparazione e l'invio di oggetti da disegnare e thread di lavoro per altre attività secondarie come animazioni o audio.
Consigliamo di eseguire il caricamento in contemporanea dei thread per sfruttare i miglioramenti delle prestazioni del multithreading. Un esempio è uno scenario in cui i thread di gioco e rendering vengono eseguiti contemporaneamente parzialmente o completamente su core diversi. Ciò non sempre sarà possibile, ad esempio in casi con dipendenze dati condivise; tuttavia, quando possibile, ciò potrebbe comportare tempi di CPU inferiori e quindi frequenze fotogrammi potenzialmente più elevate.
Affinità core della CPU
Un fattore che influisce in modo significativo sulle prestazioni dei carichi di lavoro della CPU è il modo in cui vengono pianificati sui core. Questa sezione può essere suddivisa in due componenti:
- Se i thread del tuo gioco vengono eseguiti sui core migliori per migliorare le prestazioni
- Se i thread di gioco passano spesso da un core all'altro
Puoi esaminare il comportamento del thread di CPU in Utilizzo CPU attivando la
CPU nella configurazione del profilo quando esegui un'analisi. Aumentando lo zoom su una sezione della traccia inferiore a 200 ms, puoi visualizzare i singoli processi in esecuzione sui core della CPU del tuo dispositivo. In genere, i core di piccole dimensioni corrispondono a indici più piccoli (ad esempio, CPU 0
-3
),
mentre i core di grandi dimensioni corrispondono a indici più elevati (ad esempio, CPU 6
-7
).
In genere, quando il gioco è in primo piano, i thread permanenti come il thread del gioco e il thread di rendering dovrebbero essere eseguiti su core di grandi dimensioni ad alte prestazioni, mentre altri thread di processi e worker potrebbero essere pianificati su core più piccoli.
Puoi anche osservare se i thread di gioco passano frequentemente da un core all'altro, nel caso in cui il thread principale e quello di rendering cambino i core all'interno di un singolo frame della CPU o tra due frame della CPU consecutivi. È probabile che questo comportamento della CPU indichi che i thread di gioco non sono affiniti correttamente. Queste switch core comportano un overhead dovuto alla modifica di contesto e la perdita di stato con i registri o la cache di un core, con un conseguente aumento della lunghezza del frame della CPU.