From b82c3b3605c22a5fefb11731314b8496857b5270 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 25 Apr 2024 02:13:56 +0200 Subject: [PATCH] add mandelbrot --- report/document.tex | 130 ++++++++++++++++++++++++++++++++------------ 1 file changed, 95 insertions(+), 35 deletions(-) diff --git a/report/document.tex b/report/document.tex index c25a169..648abb0 100644 --- a/report/document.tex +++ b/report/document.tex @@ -62,7 +62,7 @@ \section{Descriptions} Description des différents algorithmes implémentés. -\subsection{Naïf} +\subsection{Séquentiel} Cette implémentation naïve correspond au mode \texttt{serial} 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} \begin{itemize} - \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 Quand un thread n'as pas de tâches à faire, il vole une tâche à un autre - thread, en partant de la fin + \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 Quand un thread n'as pas de tâches à faire, il vole une tâche à un autre + thread, en partant de la fin \end{itemize} \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\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} - \item \textbf{12 \coeurs} pour la \mone. - \item \textbf{8 \coeurs} pour la \mtwo. + \item \textbf{12 \coeurs} pour la \mone. + \item \textbf{8 \coeurs} pour la \mtwo. \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} - \item[\mone] Le programme a été lancé \textbf{100 fois}. - 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} + \item[\bone] \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,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} + Ce programme ne bénéficie pas de toute la puissance de la machine. \subsection{Threads sans gestion}\label{stats:th_ges} + \begin{description} - \item[\mone] Le programme a été lancé \textbf{10 fois}. - 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} + \item[\bone] \hspace{1em} + \begin{description} + \item[\mone] Le programme a été lancé \textbf{10 fois}. + 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} 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} \begin{description} - \item[\mone] Le programme a été lancé \textbf{100 fois}. - 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} + \item[\bone] \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,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} 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, 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} \begin{description} - \item[\mone] Le programme a été lancé \textbf{100 fois}. - 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} + \item[\bone] \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,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} 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} \begin{description} - \item[\mone] Le programme a été lancé \textbf{100 fois}. - 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,397 secs} + \item[\bone] \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,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} Dans cet implémentation, on n'utilises plus une pile mais un deque de tâches.