add mandelbrot

This commit is contained in:
Mylloon 2024-04-25 02:13:56 +02:00
parent 2e69f11b38
commit b82c3b3605
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -62,7 +62,7 @@
\section{Descriptions} \section{Descriptions}
Description des différents algorithmes implémentés. Description des différents algorithmes implémentés.
\subsection{Naïf} \subsection{Séquentiel}
Cette implémentation naïve correspond au mode \texttt{serial} Cette implémentation naïve correspond au mode \texttt{serial}
de \texttt{quicksort.c}. Elle lance les tâches sans threads. de \texttt{quicksort.c}. Elle lance les tâches sans threads.
@ -85,44 +85,71 @@ aléatoire de la pile.
\subsection{Répartition par work-stealing} \subsection{Répartition par work-stealing}
\begin{itemize} \begin{itemize}
\item Au lieu d'avoir une pile unique, chaque thread à sa propre liste \item Au lieu d'avoir une pile unique, chaque thread à sa propre liste
\item Chaque tâche est ajouté sur le même thread de sa création. \item Chaque tâche est ajouté sur le même thread de sa création.
\item Quand un thread n'as pas de tâches à faire, il vole une tâche à un autre \item Quand un thread n'as pas de tâches à faire, il vole une tâche à un autre
thread, en partant de la fin thread, en partant de la fin
\end{itemize} \end{itemize}
\section{Statistiques} \section{Statistiques}
Chaque implémentation a été testée avec l'optimisation de niveau 2
de \texttt{gcc}, sur 2 machines.
Le programme utilisé pour tester les implémentations est le \texttt{quicksort}
fourni.
\def\mone{\textit{Machine 1}} % fixe \def\mone{\textit{Machine 1}} % fixe
\def\mtwo{\textit{Machine 2}} % portable \def\mtwo{\textit{Machine 2}} % portable
\def\bone{\textit{Benchmark quicksort}}
\def\btwo{\textit{Benchmark mandelbrot}}
Chaque implémentation a été testée avec l'optimisation de niveau 2
de \texttt{gcc}, sur 2 machines.
\begin{enumerate} \begin{enumerate}
\item \textbf{12 \coeurs} pour la \mone. \item \textbf{12 \coeurs} pour la \mone.
\item \textbf{8 \coeurs} pour la \mtwo. \item \textbf{8 \coeurs} pour la \mtwo.
\end{enumerate} \end{enumerate}
\subsection{Naïf}\label{stats:naive} Le programme utilisé pour tester les implémentations sont le quicksort fourni
et une adaptation de mandelbrot fournis dans le TP10.
\subsection{Séquentiel}\label{stats:seq}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\bone] \hspace{1em}
Le temps moyen d'exécution a été de \textbf{0,855 secs} \begin{description}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,139 secs} Le temps moyen d'exécution a été de \textbf{0,855 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,139 secs}
\end{description}
\item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{3,733 secs}
\item[\mtwo] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{6,020 secs}
\end{description}
\end{description} \end{description}
Ce programme ne bénéficie pas de toute la puissance de la machine. Ce programme ne bénéficie pas de toute la puissance de la machine.
\subsection{Threads sans gestion}\label{stats:th_ges} \subsection{Threads sans gestion}\label{stats:th_ges}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{10 fois}. \item[\bone] \hspace{1em}
Le temps moyen d'exécution a été de \textbf{35,985 secs} \begin{description}
\item[\mtwo] Le programme a été lancé \textbf{10 fois}. \item[\mone] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{18,854 secs} Le temps moyen d'exécution a été de \textbf{35,985 secs}
\item[\mtwo] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{18,854 secs}
\end{description}
\item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{66,078 secs}
\item[\mtwo] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{41,060 secs}
\end{description}
\end{description} \end{description}
La création des threads pour chaque tâche créer un énorme La création des threads pour chaque tâche créer un énorme
@ -136,10 +163,21 @@ et donc il faut gérer les tâches et décider de quelle tâche va sur quel thre
\subsection{Threads avec pile}\label{stats:stack} \subsection{Threads avec pile}\label{stats:stack}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\bone] \hspace{1em}
Le temps moyen d'exécution a été de \textbf{0,258 secs} \begin{description}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,356 secs} Le temps moyen d'exécution a été de \textbf{0,258 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,356 secs}
\end{description}
\item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,787 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,858 secs}
\end{description}
\end{description} \end{description}
Le lancement de nouveau thread étant limité, les performances Le lancement de nouveau thread étant limité, les performances
@ -147,14 +185,25 @@ sont grandement améliorées par rapport aux tests de \docref{stats:th_ges}.
Également grâce au fait que désormais on utilise les \coeurs~de notre CPU, Également grâce au fait que désormais on utilise les \coeurs~de notre CPU,
les performances sont aussi améliorées par rapport aux tests de les performances sont aussi améliorées par rapport aux tests de
\docref{stats:naive}. \docref{stats:seq}.
\subsubsection{Sélection aléatoire de tâche} \subsubsection{Sélection aléatoire de tâche}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\bone] \hspace{1em}
Le temps moyen d'exécution a été de \textbf{0,390 secs} \begin{description}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,438 secs} Le temps moyen d'exécution a été de \textbf{0,390 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,438 secs}
\end{description}
\item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,438 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,887 secs}
\end{description}
\end{description} \end{description}
Cette implémentation est identique à \docref{stats:stack}, à l'exception que Cette implémentation est identique à \docref{stats:stack}, à l'exception que
@ -165,10 +214,21 @@ Cette façon de faire réduit les performances.
\subsection{Répartition par work-stealing} \subsection{Répartition par work-stealing}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\bone] \hspace{1em}
Le temps moyen d'exécution a été de \textbf{0,229 secs} \begin{description}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,397 secs} Le temps moyen d'exécution a été de \textbf{0,229 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,308 secs}
\end{description}
\item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,447 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,131 secs}
\end{description}
\end{description} \end{description}
Dans cet implémentation, on n'utilises plus une pile mais un deque de tâches. Dans cet implémentation, on n'utilises plus une pile mais un deque de tâches.