add mandelbrot
This commit is contained in:
parent
2e69f11b38
commit
b82c3b3605
1 changed files with 95 additions and 35 deletions
|
@ -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.
|
||||||
|
|
Reference in a new issue