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:

  • Określa, czy wątki gry są uruchomione w rdzeniu odpowiednim do danego zadania.
  • Określa, czy wątki w grze często przełączają się między rdzeniami.

Nowoczesne urządzenia korzystają często z architektury nazywanej komputerami heterogenicznymi, w której rdzenie mają różne poziomy wydajności:

  • Jeden lub kilka rdzeni zapewnia najwyższą maksymalną wydajność, ale zużywa więcej energii. Czasami są nazywane „dużymi” rdzeniami.
  • Inne rdzenie mają niższą szczytową wydajność, ale są bardziej energooszczędne. Czasem są one nazywane „małymi” rdzeniami.
  • Opcjonalnie: co najmniej 1 rdzenie zapewnia równowagę między wydajnością a mocą. Czasem określa się to jako rdzenie „średnie”.

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. Mniejsze rdzenie odpowiadają zwykle mniejszym (np. CPU „0”–3), natomiast większe rdzenie odpowiadają wyższym indeksom (np. CPU „6”–„7”), a jeśli występują – rdzenie środkowe, zajmują indeksy pośrednie (np. procesory „5”–6). Jest to zgodne z powszechną konwencją, ale nie jest to gwarantowane.

Jeśli okaże się, że niektóre wątki są planowane na procesorach, które nie spełniają wymagań dotyczących wydajności lub mocy, rozważ ręczne ustawienie koligacji procesora dla tych wątków.

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 przełączają się między rdzeniami. Takie przełączniki podstawowe powodują pewne narzuty związane z przełącznikiem kontekstu i utratą stanu z pamięcią podręczną/rejestrami rdzenia.

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

Ustawienie koligacji procesora dla wątku nakazuje systemowi zaplanowanie tego procesu w danym rdzeniu, gdy gra działa na pierwszym planie. Należy wziąć pod uwagę kilka czynników:

  • Oprogramowanie platformy nie może dynamicznie dostosowywać położenia zadań pod kątem czynników związanych z czasem działania, takich jak obciążenie czy ograniczanie termiczne.
  • Testy wydajności na różnych urządzeniach mogą przynieść bardzo różne parametry wydajności, zwłaszcza jeśli urządzenia znacznie się różnią w zależności od pułapu cenowego lub daty premiery.

    Nowsze lub droższe urządzenia mogą sprawnie wykonać dany zadania na małym rdzeniu, ale starsze lub tańsze urządzenia mogą wymagać większego rdzenia, aby dotrzymać terminów związanych z tym samym obciążeniem.

  • Wymuszanie koligacji z dużymi rdzeniami może niepotrzebnie zwiększyć zużycie baterii i obciążenie termiczne.

Z tego powodu najlepiej unikać ręcznego ustawiania koligacji z CPU.