Analizowanie harmonogramu wątków

Jest kilka rzeczy, które należy wziąć pod uwagę, aby ustalić, czy wątki procesów gry są odpowiednio wykorzystywane i planowane pod kątem maksymalnej wydajności.

  • Tempo wyświetlania klatek
  • Wielowątkowość i równoległość wątków
  • Koligacja rdzeni procesora

Wielowątkowość

Wiele gier i silników gier używa wielowątkowości do podziału pracy procesora na zadania logiczne, które mogą być uruchamiane w niezależny sposób. Jedna z typowych konfiguracji to wątek gry na potrzeby logiki wprowadzania i gry, wątek renderowania do przygotowywania i przesyłania obiektów do rysowania oraz wątki robocze do innych podzadań, takich jak animacje czy dźwięk.

Zalecamy korzystanie z równoległych wątków, ponieważ zwiększa wydajność wielowątkowości. Przykładem może być scenariusz, w którym gra i wątki renderowania działają częściowo lub w pełni jednocześnie w różnych rdzeniach. Nie zawsze jest to możliwe, na przykład w przypadku zależności od współdzielonych danych. Jeśli jednak jest to możliwe, może to skutkować krótszym czasem pracy procesora, a tym samym potencjalnie większą liczbą klatek.

Gra z dobrze równoległym wątkiem głównym i renderowanym oraz wątkiem instancji roboczej i wątkiem audio.
Rysunek 1. Gra z dobrze równoległym wątkiem głównym i renderowanym, a także wątkiem instancji roboczej i wątkiem audio

Koligacja rdzeni procesora

Jednym z czynników, które znacząco wpływają na wydajność zbiorów zadań procesora, jest sposób ich planowania w rdzeniach. Można go podzielić na 2 części:

  • Czy wątki gier działają na najlepszych rdzeniach pod kątem wydajności
  • Określa, czy wątki w grze często przełączają się między rdzeniami.

Działanie wątku procesora możesz sprawdzić w sekcji Wykorzystanie procesora, włączając opcję CPU w konfiguracji profilu podczas wykonywania logu czasu. Powiększając fragment logu czasu <200 ms, możesz wyświetlić poszczególne procesy działające w rdzeniach procesora Twojego urządzenia. Zazwyczaj małe rdzenie odpowiadają mniejszych indeksom (np. CPU 03), podczas gdy duże rdzenie odpowiadają wyższym indeksom (na przykład CPU 67).

Zasadniczo, gdy gra działa na pierwszym planie, wątki trwałe, takie jak wątek gry i wątek renderowania, powinny działać w dużych rdzeniach o wysokiej wydajności. Inne procesy i wątki robocze mogą być planowane w mniejszych rdzeniach.

Gra z wątkiem głównym i renderowanym działającym głównie na dużych rdzeniach (CPU 6–7), przedstawiona w kolorze jasnoniebieskim
Rysunek 2. Gra z wątkiem głównym i renderowanym działającym głównie na dużych rdzeniach (CPU 6–7), przedstawiony w kolorze jasnoniebieskim

Możesz też obserwować, czy wątki gry często przełączają się między rdzeniami, jeśli rdzenie głównego i renderowanego wątku zmieniają się w obrębie 1 klatki procesora lub między 2 kolejnymi klatkami procesora. Takie działanie procesora prawdopodobnie oznacza, że wątki gry nie są prawidłowo powiązane. Takie przełączniki rdzeni powodują pewne narzuty związane z przełącznikiem kontekstu i utratą stanu z pamięcią podręczną/rejestrami rdzenia, co skutkuje wzrostem długości ramki procesora.

Gra z głównym (Thread-7) i renderowanym wątkiem (Thread-8), które przełączają się między rdzeniami (kolor fioletowy).
Rysunek 3. Gra z wątkiem głównym (Thread-7) i renderowanym (Thread-8), które przełączają się między rdzeniami, kolor fioletowy