Aby sprawdzić, czy wątki procesu gry są odpowiednio wykorzystywane i planowane pod kątem optymalnej wydajności, musisz wziąć pod uwagę kilka kwestii.
- Tempo klatek
- Wielowątkowość i paralelizacja wątków
- Powiązanie z rdzeniem procesora
Wielowątkowość
Wiele gier i silników gier korzysta z wielowątkowości, aby dzielić pracę procesora na logiczne zadania, które mogą być wykonywane w pewnym stopniu niezależnie. Typowa konfiguracja obejmuje wątek gry do obsługi danych wejściowych i logiki gry, wątek renderowania do przygotowywania i przesyłania obiektów do narysowania oraz wątki robocze do innych zadań, takich jak animacje czy dźwięk.
Aby wykorzystać wzrost wydajności wynikający z wielowątkowości, zalecamy paralelizację wątków. Przykładem może być sytuacja, w której wątki gry i renderowania działają częściowo lub całkowicie równolegle na różnych rdzeniach. Nie zawsze będzie to możliwe, np. w przypadku zależności od udostępnionych danych. Jeśli jednak jest to możliwe, może to skrócić czas pracy procesora, a tym samym zwiększyć liczbę klatek na sekundę.
Powiązanie z rdzeniem procesora
Jednym z czynników, który znacząco wpływa na wydajność zbiorów zadań procesora, jest sposób ich planowania na rdzeniach. Można to podzielić na 2 komponenty:
- Czy wątki gry działają na rdzeniu najbardziej odpowiednim do ich zbioru zadań.
- Czy wątki gry często przełączają się między rdzeniami.
Nowoczesne urządzenia często korzystają z architektury zwanej heterogenicznym przetwarzaniem, w której rdzenie mają różne poziomy wydajności:
- Jeden lub kilka rdzeni oferuje najwyższą wydajność szczytową, ale zużywa więcej energii. Są one czasami nazywane „dużymi” rdzeniami.
- Inne rdzenie mają niższą wydajność szczytową, ale są bardziej energooszczędne. Są one czasami nazywane „małymi” rdzeniami.
- Opcjonalnie: jeden lub więcej rdzeni zapewnia równowagę między wydajnością a zużyciem energii. Są one czasami nazywane „średnimi” rdzeniami.
Możesz sprawdzić zachowanie wątków procesora w sekcji Wykorzystanie procesora , włączając Procesor w konfiguracji profilu podczas tworzenia śladu. Powiększając sekcję śladu o długości <200 ms, możesz wyświetlić poszczególne procesy działające na rdzeniach procesora urządzenia. Zwykle mniejsze rdzenie odpowiadają mniejszym indeksom (np. procesory „0”–„3”), a większe rdzenie – większym indeksom (np. procesory „6”–„7”). Jeśli są dostępne rdzenie średnie, będą one zajmować indeksy pomiędzy (np. procesory „5”–„6”). Jest to powszechna konwencja, ale nie jest to gwarantowane.
Jeśli zauważysz, że niektóre wątki są planowane na procesorach, które nie spełniają ich wymagań dotyczących wydajności lub zużycia energii, rozważ ręczne ustawienie powiązania z procesorem dla tych wątków.
Możesz też sprawdzić, czy wątki przełączają się między rdzeniami. Takie przełączanie rdzeni wiąże się z pewnym narzutem wynikającym z przełączania kontekstu i utraty stanu w pamięci podręcznej/rejestrach rdzenia.
Ustawienie powiązania z procesorem dla wątku powoduje, że system planuje go na danym rdzeniu, gdy gra jest na pierwszym planie. Podczas wykonywania tej czynności należy wziąć pod uwagę kilka czynników:
- Oprogramowanie platformy nie może dynamicznie dostosowywać umieszczania zadań do czynników środowiska wykonawczego, takich jak obciążenie i ograniczanie termiczne.
Testy wydajności na różnych urządzeniach mogą wykazywać bardzo różne charakterystyki wydajności, zwłaszcza jeśli urządzenia znacznie różnią się ceną lub datą premiery.
Nowsze lub droższe urządzenie może wygodnie wykonywać dane obciążenie na małym rdzeniu, ale starsze lub tańsze urządzenie może wymagać większego rdzenia, aby dotrzymać terminów wykonania tego samego obciążenia.
Wymuszanie powiązań z dużymi rdzeniami może niepotrzebnie zwiększyć zużycie baterii i obciążenie termiczne.
Z tych powodów na ogół najlepiej jest unikać ręcznego ustawiania powiązań z procesorem.