\DocumentMetadata{testphase = {phase-II,sec,toc,graphic,minipage,float,text}}
\documentclass{article}

\usepackage[T1]{fontenc} % encoding
\renewcommand{\familydefault}{\sfdefault} % sans-serif font

% Langages
\usepackage[french]{babel}
\frenchsetup{SmallCapsFigTabCaptions=false}

% Add \extra info to title
\makeatletter
\providecommand{\extra}[1]{
  \apptocmd{\@author}{
    \end{tabular}
    \par\vspace*{0.7em}
    \begin{tabular}[t]{c}
    #1}{}{}
}
\makeatother

% Code integration
\usepackage{minted}
\setminted[c]{autogobble,frame=lines}
\usemintedstyle{emacs}

\def\titleName{Projet : Un ordonnanceur par work stealing}
\def\docTitle{\href{https://www.irif.fr/~jch/enseignement/systeme/projet.pdf}{\titleName}}

\def\anri{Anri Kennel}
\def\authorMail{mailto:anri.kennel@etu.u-paris.fr}
\def\docSubject{Programmation système avancée}
\def\docLocation{Université Paris Cité}

\usepackage[
  pdfauthor={\anri},        % author  metadata
  pdftitle={\titleName},    % title   metadata
  pdfsubject={\docSubject}, % subject metadata
  hidelinks,                % clickable links in table of contents
]{hyperref}

\title{\docTitle}
\author{\href{\authorMail}{\anri}\thanks{\anri : 22302653}}
\extra{\docSubject~$\cdot$ \docLocation}
\date{Année universitaire 2023-2024}

\newcommand{\docref}[1]{\textit{\nameref{#1}}} % italic nameref

% Aliases
\def\coeurs{c\oe{}urs}


\begin{document}
\maketitle
\flushbottom
\tableofcontents
\clearpage

\section{Descriptions}
Description des différents algorithmes implémentés.

\subsection{Naïf}
Cette implémentation naïve est celle fourni dans le fichier
\texttt{quicksort.c} avec le mode \texttt{serial}.

\subsection[Threads sans gestion]{%
  Threads\footnote{processus léger} sans gestion}
Cette implémentation correspond à simplement démarrer un nouveau thread
pour chaque nouvelle tâche.

\subsection{Threads avec pile}\label{desc:th_pile}
Pour cette implémentation, on garde en mémoire une pile,
et on démarre un nombre fixe de threads et à chaque ajout d'une tâche,
on l'empile. Chaque thread récupère la dernière tâche ajoutée à la pile.

\subsubsection{Sélection aléatoire de tâche}
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
aléatoire de la pile.

\subsection{Répartition par \coeurs}
\dots

\section{Statistiques}
Chaque implémentation a été testée avec l'optimisation de niveau 2
de \texttt{gcc}, parfois sur 2 machines. %TODO:parfois?

\def\mone{\textit{Machine 1}} % fixe
\def\mtwo{\textit{Machine 2}} % portable

\begin{enumerate}
  \item \textbf{12 \coeurs} pour la \mone.
  \item \textbf{8 \coeurs} pour la \mtwo.
\end{enumerate}

\subsection{Naïf}\label{stats:naive}
\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{\dots fois}.
        Le temps moyen d'exécution a été de \textbf{\dots secs}
\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{\dots fois}.
        Le temps moyen d'exécution a été de \textbf{\dots secs}
\end{description}

La création des threads pour chaque tâche créer un énorme
goulot d'étranglement qui réduit de grandement les performances.

\subsection{Threads avec pile}
\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{\dots fois}.
        Le temps moyen d'exécution a été de \textbf{\dots secs}
\end{description}

Le lancement de nouveau thread étant limité par machine, les performances
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}.

\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{\dots fois}.
        Le temps moyen d'exécution a été de \textbf{\dots secs}
\end{description}

\dots

\subsection{Répartition par \coeurs}
\begin{description}
  \item[\mone] Le programme a été lancé \textbf{\dots fois}.
        Le temps moyen d'exécution a été de \textbf{\dots secs}
  \item[\mtwo] Le programme a été lancé \textbf{\dots fois}.
        Le temps moyen d'exécution a été de \textbf{\dots secs}
\end{description}

\dots

\end{document}
