feat: narzedzia profilowania chapter

This commit is contained in:
Krzysztof kuhy Rudnicki 2026-01-26 14:16:27 +01:00
parent ef7072b5fd
commit 6ef11b36d5
4 changed files with 135 additions and 68 deletions

View File

@ -449,6 +449,113 @@
year = {2024} year = {2024}
} }
@misc{unity_profiler_cpu,
author = {{Unity Technologies}},
title = {CPU Usage Profiler module reference},
howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerCPU.html}},
year = {2024}
}
@misc{unity_profiler_gpu,
author = {{Unity Technologies}},
title = {GPU Usage Profiler module},
howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerGPU.html}},
year = {2024}
}
@misc{unity_profiler_memory,
author = {{Unity Technologies}},
title = {Memory Profiler module reference},
howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerMemory.html}},
year = {2024}
}
@misc{unity_profiler_audio,
author = {{Unity Technologies}},
title = {Audio Profiler module reference},
howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerAudio.html}},
year = {2024}
}
@misc{unity_profiler_physics,
author = {{Unity Technologies}},
title = {Physics Profiler module},
howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerPhysics.html}},
year = {2024}
}
@misc{unity_frame_debugger,
author = {{Unity Technologies}},
title = {Introduction to the Frame Debugger},
howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/FrameDebugger.html}},
year = {2024}
}
% Unreal Insights Modules
@misc{unreal_insights,
author = {{Epic Games}},
title = {Unreal Insights in Unreal Engine},
howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-insights-in-unreal-engine}},
year = {2024}
}
@misc{unreal_timing_insights,
author = {{Epic Games}},
title = {Timing Insights in Unreal Engine 5},
howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/timing-insights-in-unreal-engine-5}},
year = {2024}
}
@misc{unreal_memory_insights,
author = {{Epic Games}},
title = {Memory Insights in Unreal Engine},
howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/memory-insights-in-unreal-engine}},
year = {2024}
}
@misc{unreal_animation_insights,
author = {{Epic Games}},
title = {Animation Insights in Unreal Engine},
howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/animation-insights-in-unreal-engine}},
year = {2024}
}
@misc{unreal_network_insights,
author = {{Epic Games}},
title = {Networking Insights in Unreal Engine},
howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-insights-in-unreal-engine}},
year = {2024}
}
@misc{unreal_stat_commands,
author = {{Epic Games}},
title = {Stat Commands in Unreal Engine},
howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/stat-commands-in-unreal-engine}},
year = {2024}
}
% NVIDIA Nsight Graphics
@misc{nsight_graphics_features,
author = {{NVIDIA Corporation}},
title = {Nsight Graphics Features},
howpublished = {Dostęp zdalny: \url{https://developer.nvidia.com/nsight-graphics-features}},
year = {2024}
}
@misc{nsight_graphics_userguide,
author = {{NVIDIA Corporation}},
title = {NVIDIA Nsight Graphics User Guide},
howpublished = {Dostęp zdalny: \url{https://docs.nvidia.com/nsight-graphics/UserGuide/index.html}},
year = {2024}
}
@misc{nsight_gpu_trace,
author = {{NVIDIA Corporation}},
title = {GPU Trace Profiler Overview},
howpublished = {Dostęp zdalny: \url{https://docs.nvidia.com/nsight-graphics/UserGuide/gpu-trace-overview.html}},
year = {2024}
}
@misc{unity_hub, @misc{unity_hub,
author = {Unity Technologies}, author = {Unity Technologies},
title = {Unity Hub}, title = {Unity Hub},

Binary file not shown.

View File

@ -96,7 +96,7 @@ Over the past decade, the video game development market has been dominated by tw
\input{tex/4-metodologia} % Metodologia badań i kryteria porównania \input{tex/4-metodologia} % Metodologia badań i kryteria porównania
\input{tex/wywiady-analiza} \input{tex/wywiady-analiza}
\input{tex/implementacja-gry} % Analiza wywiadów z deweloperami gier \input{tex/implementacja-gry} % Analiza wywiadów z deweloperami gier
% \input{tex/narzedzia-profilowania} % Narzędzia profilowania wydajności \input{tex/narzedzia-profilowania} % Narzędzia profilowania wydajności
% \input{tex/5-testy-wydajnosci} % Testy wydajności % \input{tex/5-testy-wydajnosci} % Testy wydajności
% \input{tex/6-analiza-mozliwosci} % Analiza możliwości i funkcjonalności % \input{tex/6-analiza-mozliwosci} % Analiza możliwości i funkcjonalności
% \input{tex/7-porownanie-wynikow} % Porównanie wyników i analiza % \input{tex/7-porownanie-wynikow} % Porównanie wyników i analiza

View File

@ -11,32 +11,32 @@ Zarówno Unity, jak i~Unreal Engine oferują własne, wbudowane narzędzia do an
\subsubsection{Unity Profiler} \subsubsection{Unity Profiler}
Unity dostarcza rozbudowany profiler dostępny bezpośrednio w~edytorze (Window $\rightarrow$ Analysis $\rightarrow$ Profiler). Narzędzie to oferuje: Unity dostarcza rozbudowany profiler dostępny bezpośrednio w~edytorze (Window $\rightarrow$ Analysis $\rightarrow$ Profiler)~\cite{unity_profiler}. Narzędzie to oferuje:
\begin{itemize} \begin{itemize}
\item \textbf{CPU Profiler} -- analiza czasu wykonania poszczególnych funkcji, z~podziałem na kategorie (rendering, skrypty, fizyka, animacje) \item \textbf{CPU Profiler} -- analiza czasu wykonania poszczególnych funkcji, z~podziałem na kategorie (rendering, skrypty, fizyka, animacje)~\cite{unity_profiler_cpu}
\item \textbf{GPU Profiler} -- pomiar czasu renderowania na karcie graficznej \item \textbf{GPU Profiler} -- pomiar czasu renderowania na karcie graficznej~\cite{unity_profiler_gpu}
\item \textbf{Memory Profiler} -- szczegółowa analiza alokacji pamięci, wykrywanie wycieków \item \textbf{Memory Profiler} -- szczegółowa analiza alokacji pamięci, wykrywanie wycieków~\cite{unity_profiler_memory}
\item \textbf{Audio Profiler} -- monitorowanie obciążenia systemu dźwiękowego \item \textbf{Audio Profiler} -- monitorowanie obciążenia systemu dźwiękowego~\cite{unity_profiler_audio}
\item \textbf{Physics Profiler} -- analiza wydajności silnika fizyki \item \textbf{Physics Profiler} -- analiza wydajności silnika fizyki~\cite{unity_profiler_physics}
\item \textbf{Frame Debugger} -- krokowa analiza procesu renderowania pojedynczej klatki \item \textbf{Frame Debugger} -- krokowa analiza procesu renderowania pojedynczej klatki~\cite{unity_frame_debugger}
\end{itemize} \end{itemize}
Unity Profiler umożliwia również zdalne profilowanie aplikacji uruchomionej na urządzeniu docelowym (np.~smartfonie), co jest szczególnie przydatne przy optymalizacji gier mobilnych. Unity Profiler umożliwia również zdalne profilowanie aplikacji uruchomionej na urządzeniu docelowym (np.~smartfonie), co jest szczególnie przydatne przy optymalizacji gier mobilnych.
\subsubsection{Unreal Insights} \subsubsection{Unreal Insights}
Unreal Engine oferuje narzędzie Unreal Insights, które zastąpiło starszy system Session Frontend. Kluczowe funkcjonalności obejmują: Unreal Engine oferuje narzędzie Unreal Insights, które zastąpiło starszy system Session Frontend~\cite{unreal_insights}. Kluczowe funkcjonalności obejmują:
\begin{itemize} \begin{itemize}
\item \textbf{Timing Insights} -- precyzyjny pomiar czasu wykonania poszczególnych systemów silnika \item \textbf{Timing Insights} -- precyzyjny pomiar czasu wykonania poszczególnych systemów silnika~\cite{unreal_timing_insights}
\item \textbf{Asset Loading Insights} -- analiza czasu ładowania zasobów \item \textbf{Asset Loading Insights} -- analiza czasu ładowania zasobów~\cite{unreal_insights}
\item \textbf{Memory Insights} -- monitorowanie alokacji i~dealokacji pamięci \item \textbf{Memory Insights} -- monitorowanie alokacji i~dealokacji pamięci~\cite{unreal_memory_insights}
\item \textbf{Animation Insights} -- profilowanie systemu animacji \item \textbf{Animation Insights} -- profilowanie systemu animacji~\cite{unreal_animation_insights}
\item \textbf{Network Insights} -- analiza ruchu sieciowego w~grach multiplayer \item \textbf{Network Insights} -- analiza ruchu sieciowego w~grach multiplayer~\cite{unreal_network_insights}
\end{itemize} \end{itemize}
Dodatkowo Unreal Engine udostępnia komendy konsolowe (np.~\texttt{stat fps}, \texttt{stat unit}, \texttt{stat gpu}) pozwalające na szybki podgląd podstawowych metryk wydajności podczas rozgrywki. Dodatkowo Unreal Engine udostępnia komendy konsolowe (np.~\texttt{stat fps}, \texttt{stat unit}, \texttt{stat gpu}) pozwalające na szybki podgląd podstawowych metryk wydajności podczas rozgrywki~\cite{unreal_stat_commands}.
\subsubsection{Ograniczenia narzędzi wbudowanych} \subsubsection{Ograniczenia narzędzi wbudowanych}
@ -46,7 +46,6 @@ Pomimo rozbudowanych możliwości, wbudowane profilery silników posiadają isto
\item \textbf{Brak standaryzacji metryk} -- każdy silnik definiuje i~mierzy parametry w~odmienny sposób, co utrudnia bezpośrednie porównania \item \textbf{Brak standaryzacji metryk} -- każdy silnik definiuje i~mierzy parametry w~odmienny sposób, co utrudnia bezpośrednie porównania
\item \textbf{Różna granularność danych} -- poziom szczegółowości raportów różni się między silnikami \item \textbf{Różna granularność danych} -- poziom szczegółowości raportów różni się między silnikami
\item \textbf{Narzut profilowania} -- wbudowane profilery same generują obciążenie, które może być różne dla każdego silnika \item \textbf{Narzut profilowania} -- wbudowane profilery same generują obciążenie, które może być różne dla każdego silnika
\item \textbf{Brak dostępu do danych niskopoziomowych} -- profilery silnikowe operują na poziomie abstrakcji silnika, nie hardware'u
\item \textbf{Nieporównywalność formatów wyjściowych} -- dane eksportowane przez różne profilery mają odmienne struktury \item \textbf{Nieporównywalność formatów wyjściowych} -- dane eksportowane przez różne profilery mają odmienne struktury
\end{enumerate} \end{enumerate}
@ -55,11 +54,14 @@ Z~powyższych powodów zdecydowano się na zastosowanie zewnętrznego, niezależ
\subsection{NVIDIA Nsight Graphics} \subsection{NVIDIA Nsight Graphics}
\label{subsec:nvidia-nsight} \label{subsec:nvidia-nsight}
NVIDIA Nsight Graphics to profesjonalne narzędzie do profilowania i~debugowania aplikacji graficznych, oferujące głęboki wgląd w~działanie GPU niezależnie od używanego silnika czy API graficznego. NVIDIA Nsight Graphics to narzędzie do profilowania i~debugowania
aplikacji graficznych, oferujące wgląd w~działanie GPU
niezależnie od używanego silnika czy API graficznego~\cite{nvidia_nsight, nsight_graphics_userguide}.
\subsubsection{Uzasadnienie wyboru} \subsubsection{Uzasadnienie wyboru}
Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany był następującymi czynnikami: Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany
był następującymi czynnikami~\cite{nsight_graphics_features}:
\begin{itemize} \begin{itemize}
\item \textbf{Niezależność od silnika} -- Nsight analizuje aplikację na poziomie wywołań API graficznego (DirectX, Vulkan, OpenGL), co zapewnia porównywalność wyników między Unity a~Unreal Engine \item \textbf{Niezależność od silnika} -- Nsight analizuje aplikację na poziomie wywołań API graficznego (DirectX, Vulkan, OpenGL), co zapewnia porównywalność wyników między Unity a~Unreal Engine
@ -71,10 +73,10 @@ Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany był nas
\subsubsection{Możliwości narzędzia} \subsubsection{Możliwości narzędzia}
NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych: NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych~\cite{nsight_graphics_userguide}:
\paragraph{Frame Profiler} \paragraph{Frame Profiler}
Główny moduł analizy wydajności, umożliwiający: Główny moduł analizy wydajności, umożliwiający~\cite{nsight_graphics_features}:
\begin{itemize} \begin{itemize}
\item Przechwycenie i~analizę pojedynczej klatki (frame capture) \item Przechwycenie i~analizę pojedynczej klatki (frame capture)
\item Hierarchiczny widok wszystkich wywołań GPU \item Hierarchiczny widok wszystkich wywołań GPU
@ -84,7 +86,7 @@ Główny moduł analizy wydajności, umożliwiający:
\end{itemize} \end{itemize}
\paragraph{GPU Trace} \paragraph{GPU Trace}
Moduł do długoterminowej analizy wydajności: Moduł do długoterminowej analizy wydajności~\cite{nsight_gpu_trace}:
\begin{itemize} \begin{itemize}
\item Rejestrowanie metryk przez określony czas (nie tylko pojedyncza klatka) \item Rejestrowanie metryk przez określony czas (nie tylko pojedyncza klatka)
\item Wykrywanie spadków wydajności i~ich przyczyn \item Wykrywanie spadków wydajności i~ich przyczyn
@ -93,27 +95,13 @@ Moduł do długoterminowej analizy wydajności:
\end{itemize} \end{itemize}
\paragraph{Shader Profiler} \paragraph{Shader Profiler}
Narzędzie do optymalizacji shaderów: Narzędzie do optymalizacji shaderów~\cite{nsight_graphics_userguide}:
\begin{itemize} \begin{itemize}
\item Analiza wydajności poszczególnych shaderów \item Analiza wydajności poszczególnych shaderów
\item Identyfikacja nieefektywnych instrukcji \item Identyfikacja nieefektywnych instrukcji
\item Pomiar occupancy (wykorzystania jednostek obliczeniowych) \item Pomiar occupancy (wykorzystania jednostek obliczeniowych)
\item Sugestie optymalizacyjne
\end{itemize} \end{itemize}
\subsubsection{Konfiguracja środowiska pomiarowego}
Przed przeprowadzeniem pomiarów skonfigurowano środowisko w~następujący sposób:
\begin{enumerate}
\item Wyłączenie V-Sync w~obu silnikach (eliminacja sztucznego ograniczenia FPS)
\item Ustawienie identycznej rozdzielczości renderowania (1920$\times$1080)
\item Wyłączenie dynamicznego skalowania rozdzielczości
\item Ustawienie stałej częstotliwości zegara GPU (eliminacja power throttlingu)
\item Zamknięcie zbędnych procesów w~tle
\item Oczekiwanie na ustabilizowanie temperatury GPU przed pomiarem
\end{enumerate}
\subsection{Przetwarzanie danych z~Nsight} \subsection{Przetwarzanie danych z~Nsight}
\label{subsec:przetwarzanie-nsight} \label{subsec:przetwarzanie-nsight}
@ -121,11 +109,11 @@ Dane zebrane przez NVIDIA Nsight wymagają odpowiedniego przetworzenia w~celu uz
\subsubsection{Eksport danych} \subsubsection{Eksport danych}
Nsight umożliwia eksport danych w~kilku formatach: Nsight umożliwia eksport danych w~kilku formatach~\cite{nsight_graphics_userguide}:
\begin{itemize} \begin{itemize}
\item \textbf{CSV} -- tabularyczne dane liczbowe, idealne do dalszej analizy \item \textbf{CSV} -- tabularyczne dane liczbowe
\item \textbf{JSON} -- strukturalne dane z~pełną hierarchią wywołań \item \textbf{JSON} -- strukturalne dane z~pełną hierarchią wywołań
\item \textbf{HTML Report} -- czytelny raport z~wykresami (mniej przydatny do automatyzacji) \item \textbf{HTML Report} -- graficzny raport z~wykresami
\end{itemize} \end{itemize}
W~niniejszej pracy wykorzystano format CSV ze względu na łatwość importu do narzędzi analizy statystycznej. W~niniejszej pracy wykorzystano format CSV ze względu na łatwość importu do narzędzi analizy statystycznej.
@ -134,7 +122,7 @@ W~niniejszej pracy wykorzystano format CSV ze względu na łatwość importu do
Z~danych eksportowanych przez Nsight wyodrębniono następujące metryki: Z~danych eksportowanych przez Nsight wyodrębniono następujące metryki:
\begin{table}[htbp] \begin{table}[H]
\centering \centering
\caption{Kluczowe metryki wydajnościowe z~NVIDIA Nsight} \caption{Kluczowe metryki wydajnościowe z~NVIDIA Nsight}
\label{tab:metryki-nsight} \label{tab:metryki-nsight}
@ -159,32 +147,6 @@ Memory Bandwidth & GB/s & Przepustowość pamięci GPU \\
\end{tabular} \end{tabular}
\end{table} \end{table}
\subsubsection{Metodyka pomiarów}
Dla każdej konfiguracji testowej przeprowadzono serię pomiarów według następującego protokołu:
\begin{enumerate}
\item Uruchomienie aplikacji i~oczekiwanie 30 sekund na stabilizację
\item Rozpoczęcie rejestracji GPU Trace (czas trwania: 60 sekund)
\item Przechwycenie 10 pojedynczych klatek w~równych odstępach czasu
\item Zakończenie rejestracji i~eksport danych
\item Powtórzenie procedury 3 razy dla każdej konfiguracji
\end{enumerate}
Wyniki uśredniono, odrzucając wartości odstające (outliers) zidentyfikowane metodą IQR (InterQuartile Range).
\subsubsection{Automatyzacja analizy}
W~celu zapewnienia powtarzalności i~eliminacji błędów ludzkich, proces analizy danych został częściowo zautomatyzowany za pomocą skryptów Python. Główne etapy obejmowały:
\begin{itemize}
\item Parsowanie plików CSV eksportowanych z~Nsight
\item Agregację danych z~wielu sesji pomiarowych
\item Obliczanie statystyk opisowych (średnia, mediana, odchylenie standardowe)
\item Generowanie wykresów porównawczych
\item Eksport wyników do formatu LaTeX (tabele)
\end{itemize}
\subsection{Podsumowanie wyboru narzędzi} \subsection{Podsumowanie wyboru narzędzi}
\label{subsec:podsumowanie-narzedzi} \label{subsec:podsumowanie-narzedzi}
@ -193,8 +155,6 @@ Zastosowanie NVIDIA Nsight jako głównego narzędzia profilowania zapewnia:
\begin{enumerate} \begin{enumerate}
\item \textbf{Obiektywność} -- pomiary wykonywane na tym samym poziomie abstrakcji dla obu silników \item \textbf{Obiektywność} -- pomiary wykonywane na tym samym poziomie abstrakcji dla obu silników
\item \textbf{Porównywalność} -- identyczne metryki i~format danych \item \textbf{Porównywalność} -- identyczne metryki i~format danych
\item \textbf{Wiarygodność} -- niskopoziomowe pomiary eliminują artefakty wprowadzane przez profilery silnikowe
\item \textbf{Powtarzalność} -- standaryzowana procedura pomiarowa \item \textbf{Powtarzalność} -- standaryzowana procedura pomiarowa
\end{enumerate} \end{enumerate}
Wbudowane profilery Unity i~Unreal Engine pozostają cennym narzędziem podczas procesu optymalizacji, jednak do celów badawczych wymagających bezpośredniego porównania między silnikami, zewnętrzne narzędzie oferuje znaczące przewagi metodologiczne.