fix todos, small fixes, a4 paper, french quotes

This commit is contained in:
Mylloon 2024-04-25 12:50:35 +02:00
parent 526bc15ec8
commit b2c0879f90
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -1,13 +1,9 @@
\DocumentMetadata{testphase = {phase-II,sec,toc,graphic,minipage,float,text}} \DocumentMetadata{testphase = {phase-II,sec,toc,graphic,minipage,float,text}}
\documentclass{article} \documentclass[a4paper]{article}
\usepackage[T1]{fontenc} % encoding \usepackage[T1]{fontenc} % encoding
\renewcommand{\familydefault}{\sfdefault} % sans-serif font \renewcommand{\familydefault}{\sfdefault} % sans-serif font
% Langages
\usepackage[french]{babel}
\frenchsetup{SmallCapsFigTabCaptions=false}
% Add \extra info to title % Add \extra info to title
\makeatletter \makeatletter
\providecommand{\extra}[1]{ \providecommand{\extra}[1]{
@ -24,6 +20,12 @@
\setminted[c]{autogobble,frame=lines} \setminted[c]{autogobble,frame=lines}
\usemintedstyle{emacs} \usemintedstyle{emacs}
% Langages
\usepackage[french]{babel}
\frenchsetup{SmallCapsFigTabCaptions=false}
\usepackage{csquotes}
\MakeOuterQuote{"}
% Images % Images
\usepackage{graphicx} \usepackage{graphicx}
@ -50,11 +52,12 @@
\newcommand{\docref}[1]{\textit{\nameref{#1}}} % italic nameref \newcommand{\docref}[1]{\textit{\nameref{#1}}} % italic nameref
% Aliases % Aliases
\def\coeurs{c\oe{}urs} \def\coeur{c\oe{}ur}
\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\bone{\textit{Benchmark quicksort}}
\def\btwo{\textit{Benchmark mandelbrot}} \def\btwo{\textit{Benchmark mandelbrot}}
\def\ws{\enquote{work-stealing}}
\begin{document} \begin{document}
\maketitle \maketitle
@ -86,20 +89,34 @@ Même fonctionnement que dans l'algorithme de \docref{desc:th_pile}, sauf
qu'au lieu de récupérer la dernière tâche, on récupère une tâche qu'au lieu de récupérer la dernière tâche, on récupère une tâche
aléatoire de la pile. aléatoire de la pile.
\subsection{Répartition par work-stealing}\label{desc:ws} \subsection{Répartition par \ws}\label{desc:ws}
% TODO: Faire des phrases Ici, chaque \coeur~a sa propre liste de tâche. Quand un thread n'as
\begin{itemize} plus de tâche, il essaie d'en voler une à un autre thread.
\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{Comportement} \section{Comportement}
% TODO
% Expliquer comportement LIFO vs WS \subsection{Listes}
% Expliquer comportement dans le code Dans l'ordonnanceur LIFO, la liste est une pile. Chaque thread récupère le
% Expliquer ce qu'il se passe quand on modifie le nombre de threads premier élément de la pile, c'est-à-dire le dernier à avoir été ajouté.
Avec la répartition par \ws, la liste est une deque. Comme dans l'ordonnanceur
LIFO, chaque thread récupère le premier élément de la deque, mais quand il y a
un vol, c'est le dernier élément qui est récupéré par le thread.
\subsection{Synchronisations}
Dans mes implémentations, j'ai exclusivement utilisé des mutex ainsi que des
variables de conditions pour endormir/réveiller mes threads.
\subsection{Nombre de threads}
Pour avoir un programme performant, il faut équilibrer le nombre de threads par
rapport aux nombres de \coeur{}s disponibles. Il faut également équilibrer la
création de nouvelles tâches par thread par rapport au véritable travail
effectué par ledit thread. Par exemple dans le \btwo, chaque tâche soit créer 4
nouvelles tâches, soit calcule une portion de l'image. Une plus grande création
de tâche favorise le \ws~parce qu'une pile unique atteint ses limites quand
trop de tâches est ajouté, car les threads n'ont pas le temps "d'abattre
le travail" assez rapidement.
\section{Statistiques} \section{Statistiques}
@ -107,8 +124,8 @@ Chaque implémentation a été testée avec l'optimisation de niveau 2
de \texttt{gcc}, sur 2 machines. de \texttt{gcc}, sur 2 machines.
\begin{enumerate} \begin{enumerate}
\item \textbf{12 \coeurs} pour la \mone. \item \textbf{12 \coeur{}s} pour la \mone.
\item \textbf{8 \coeurs} pour la \mtwo. \item \textbf{8 \coeur{}s} pour la \mtwo.
\end{enumerate} \end{enumerate}
Le programme utilisé pour tester les implémentations sont le quicksort fourni Le programme utilisé pour tester les implémentations sont le quicksort fourni
@ -187,15 +204,19 @@ et donc il faut gérer les tâches et décider de quelle tâche va sur quel thre
Le lancement de nouveau thread étant limité, les performances Le lancement de nouveau thread étant limité, les performances
sont grandement améliorées par rapport aux tests de \docref{stats:th_ges}. 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 \coeur{}s~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:seq}. \docref{stats:seq}.
% TODO: parler de l'image Dans la \autoref{fig:btm-lifo}, on observe que les \coeur{}s du CPU ne sont pas
tous utilisé à 100\%. Ceci est dû au fait que l'accès à la liste des tâches est
limité, car partagé entres les threads.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-lifo.jpg} \includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-lifo.jpg}
\caption{Utilisation ressources sur la \mone~avec \docref{desc:th_pile}} \caption{Utilisation ressources sur la \mone~avec \docref{desc:th_pile}}
\label{fig:btm-lifo}
\end{figure} \end{figure}
\subsubsection{Sélection aléatoire de tâche} \subsubsection{Sélection aléatoire de tâche}
@ -223,7 +244,7 @@ ajouté.
Cette façon de faire réduit les performances. Cette façon de faire réduit les performances.
\subsection{Répartition par work-stealing} \subsection{Répartition par \ws}
\begin{description} \begin{description}
\item[\bone] \hspace{1em} \item[\bone] \hspace{1em}
\begin{description} \begin{description}
@ -245,24 +266,30 @@ Cette façon de faire réduit les performances.
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.
Cette façon de faire est légèrement meilleur que \docref{desc:th_pile}. Cette façon de faire est légèrement meilleur que \docref{desc:th_pile}.
% TODO: parler de l'image Dans la \autoref{fig:btm-ws}, on observe que les \coeur{}s du CPU sont
proche de 100\% d'utilisation. Comparé à \docref{stats:stack}, on gagne
en moyenne \approx~10\% de l'utilisation du processeur dans son entièreté.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-ws.jpg} \includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-ws.jpg}
\caption{Exploitation des ressources sur la \mone~avec \docref{desc:ws}} \caption{Exploitation des ressources sur la \mone~avec \docref{desc:ws}}
\label{fig:btm-ws}
\end{figure} \end{figure}
\clearpage \clearpage
\appendix \appendix
\section{Crédits}
% TODO J'ai utilisé un bout de code de \href{https://expreg.org/amsi/C/}{Farès Belhadj}
% Images à insérer d'un TP de L2 pour afficher une image au format \texttt{bmp} afin vérifier que
% Mettre un lien vers Fares + mentionner que j'ai testé via sa fonction bmp le \btwo~fonctionnait correctement. Ce qui donne la \autoref{fig:mandelbrot}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[alt={Fractale mandelbrot},width=0.7\textwidth]{imgs/mandelbrot.jpg} \includegraphics[alt={Fractale mandelbrot},width=0.7\textwidth]{imgs/mandelbrot.jpg}
\caption{Example de Mandelbrot} \caption{Example de Mandelbrot}
\label{fig:mandelbrot}
\end{figure} \end{figure}
\end{document} \end{document}