mirror of
https://github.com/kuhyx/praca_magisterska.git
synced 2026-07-04 13:43:05 +02:00
feat: narzedzia profilowania chapter
This commit is contained in:
parent
ef7072b5fd
commit
6ef11b36d5
@ -449,6 +449,113 @@
|
||||
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,
|
||||
author = {Unity Technologies},
|
||||
title = {Unity Hub},
|
||||
|
||||
BIN
latex/main.pdf
BIN
latex/main.pdf
Binary file not shown.
@ -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/wywiady-analiza}
|
||||
\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/6-analiza-mozliwosci} % Analiza możliwości i funkcjonalności
|
||||
% \input{tex/7-porownanie-wynikow} % Porównanie wyników i analiza
|
||||
|
||||
@ -11,32 +11,32 @@ Zarówno Unity, jak i~Unreal Engine oferują własne, wbudowane narzędzia do an
|
||||
|
||||
\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}
|
||||
\item \textbf{CPU Profiler} -- analiza czasu wykonania poszczególnych funkcji, z~podziałem na kategorie (rendering, skrypty, fizyka, animacje)
|
||||
\item \textbf{GPU Profiler} -- pomiar czasu renderowania na karcie graficznej
|
||||
\item \textbf{Memory Profiler} -- szczegółowa analiza alokacji pamięci, wykrywanie wycieków
|
||||
\item \textbf{Audio Profiler} -- monitorowanie obciążenia systemu dźwiękowego
|
||||
\item \textbf{Physics Profiler} -- analiza wydajności silnika fizyki
|
||||
\item \textbf{Frame Debugger} -- krokowa analiza procesu renderowania pojedynczej klatki
|
||||
\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~\cite{unity_profiler_gpu}
|
||||
\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~\cite{unity_profiler_audio}
|
||||
\item \textbf{Physics Profiler} -- analiza wydajności silnika fizyki~\cite{unity_profiler_physics}
|
||||
\item \textbf{Frame Debugger} -- krokowa analiza procesu renderowania pojedynczej klatki~\cite{unity_frame_debugger}
|
||||
\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.
|
||||
|
||||
\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}
|
||||
\item \textbf{Timing Insights} -- precyzyjny pomiar czasu wykonania poszczególnych systemów silnika
|
||||
\item \textbf{Asset Loading Insights} -- analiza czasu ładowania zasobów
|
||||
\item \textbf{Memory Insights} -- monitorowanie alokacji i~dealokacji pamięci
|
||||
\item \textbf{Animation Insights} -- profilowanie systemu animacji
|
||||
\item \textbf{Network Insights} -- analiza ruchu sieciowego w~grach multiplayer
|
||||
\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~\cite{unreal_insights}
|
||||
\item \textbf{Memory Insights} -- monitorowanie alokacji i~dealokacji pamięci~\cite{unreal_memory_insights}
|
||||
\item \textbf{Animation Insights} -- profilowanie systemu animacji~\cite{unreal_animation_insights}
|
||||
\item \textbf{Network Insights} -- analiza ruchu sieciowego w~grach multiplayer~\cite{unreal_network_insights}
|
||||
\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}
|
||||
|
||||
@ -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{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{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
|
||||
\end{enumerate}
|
||||
|
||||
@ -55,11 +54,14 @@ Z~powyższych powodów zdecydowano się na zastosowanie zewnętrznego, niezależ
|
||||
\subsection{NVIDIA Nsight Graphics}
|
||||
\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}
|
||||
|
||||
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}
|
||||
\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}
|
||||
|
||||
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}
|
||||
Główny moduł analizy wydajności, umożliwiający:
|
||||
Główny moduł analizy wydajności, umożliwiający~\cite{nsight_graphics_features}:
|
||||
\begin{itemize}
|
||||
\item Przechwycenie i~analizę pojedynczej klatki (frame capture)
|
||||
\item Hierarchiczny widok wszystkich wywołań GPU
|
||||
@ -84,7 +86,7 @@ Główny moduł analizy wydajności, umożliwiający:
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{GPU Trace}
|
||||
Moduł do długoterminowej analizy wydajności:
|
||||
Moduł do długoterminowej analizy wydajności~\cite{nsight_gpu_trace}:
|
||||
\begin{itemize}
|
||||
\item Rejestrowanie metryk przez określony czas (nie tylko pojedyncza klatka)
|
||||
\item Wykrywanie spadków wydajności i~ich przyczyn
|
||||
@ -93,27 +95,13 @@ Moduł do długoterminowej analizy wydajności:
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{Shader Profiler}
|
||||
Narzędzie do optymalizacji shaderów:
|
||||
Narzędzie do optymalizacji shaderów~\cite{nsight_graphics_userguide}:
|
||||
\begin{itemize}
|
||||
\item Analiza wydajności poszczególnych shaderów
|
||||
\item Identyfikacja nieefektywnych instrukcji
|
||||
\item Pomiar occupancy (wykorzystania jednostek obliczeniowych)
|
||||
\item Sugestie optymalizacyjne
|
||||
\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}
|
||||
\label{subsec:przetwarzanie-nsight}
|
||||
|
||||
@ -121,11 +109,11 @@ Dane zebrane przez NVIDIA Nsight wymagają odpowiedniego przetworzenia w~celu uz
|
||||
|
||||
\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}
|
||||
\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{HTML Report} -- czytelny raport z~wykresami (mniej przydatny do automatyzacji)
|
||||
\item \textbf{HTML Report} -- graficzny raport z~wykresami
|
||||
\end{itemize}
|
||||
|
||||
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:
|
||||
|
||||
\begin{table}[htbp]
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\caption{Kluczowe metryki wydajnościowe z~NVIDIA Nsight}
|
||||
\label{tab:metryki-nsight}
|
||||
@ -159,32 +147,6 @@ Memory Bandwidth & GB/s & Przepustowość pamięci GPU \\
|
||||
\end{tabular}
|
||||
\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}
|
||||
\label{subsec:podsumowanie-narzedzi}
|
||||
|
||||
@ -193,8 +155,6 @@ Zastosowanie NVIDIA Nsight jako głównego narzędzia profilowania zapewnia:
|
||||
\begin{enumerate}
|
||||
\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{Wiarygodność} -- niskopoziomowe pomiary eliminują artefakty wprowadzane przez profilery silnikowe
|
||||
\item \textbf{Powtarzalność} -- standaryzowana procedura pomiarowa
|
||||
\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.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user