From 37ad7548dc285b33285a16c7dbe217225bf6dcd8 Mon Sep 17 00:00:00 2001 From: Alessandre Laguierce Date: Tue, 8 Apr 2025 22:20:11 +0200 Subject: [PATCH] feat: add first version of report --- report/headers.sty | 107 ++++++ report/img/graphs/21-create-many.svg | 320 ++++++++++++++++ .../22-create-many-recursive-deadlock.svg | 359 ++++++++++++++++++ .../img/graphs/22-create-many-recursive.svg | 307 +++++++++++++++ report/img/graphs/23-create-many-once.svg | 320 ++++++++++++++++ report/img/graphs/51-fibonacci.svg | 305 +++++++++++++++ report/img/logo_em.jpg | Bin 0 -> 159787 bytes report/main.tex | 20 + report/parts/introduction.tex | 3 + report/parts/part1.tex | 52 +++ report/parts/part2.tex | 11 + report/parts/part3.tex | 19 + report/parts/part4.tex | 25 ++ report/parts/title.tex | 39 ++ 14 files changed, 1887 insertions(+) create mode 100644 report/headers.sty create mode 100644 report/img/graphs/21-create-many.svg create mode 100644 report/img/graphs/22-create-many-recursive-deadlock.svg create mode 100644 report/img/graphs/22-create-many-recursive.svg create mode 100644 report/img/graphs/23-create-many-once.svg create mode 100644 report/img/graphs/51-fibonacci.svg create mode 100644 report/img/logo_em.jpg create mode 100644 report/main.tex create mode 100644 report/parts/introduction.tex create mode 100644 report/parts/part1.tex create mode 100644 report/parts/part2.tex create mode 100644 report/parts/part3.tex create mode 100644 report/parts/part4.tex create mode 100644 report/parts/title.tex diff --git a/report/headers.sty b/report/headers.sty new file mode 100644 index 0000000..5f7cd00 --- /dev/null +++ b/report/headers.sty @@ -0,0 +1,107 @@ +\usepackage{float} +\usepackage{array} +\usepackage[inkscapelatex=false]{svg} +\usepackage{graphicx} +\usepackage{mwe} +\usepackage{subfig} +\graphicspath{ {./img/} } + +\usepackage{xcolor} +\definecolor{maincolor}{RGB}{0,118,190} + +\usepackage[nocheck]{fancyhdr} +\usepackage[a4paper, total={6in, 10in}]{geometry} +\RequirePackage{hyperref} +\hypersetup{colorlinks=true, linktoc=all, linkcolor=maincolor} + +\usepackage{titlesec} +\usepackage{titletoc} +\usepackage{multicol} + +% pour le code +\usepackage[final]{listings} +\lstdefinestyle{code}{ + frame=single, + belowcaptionskip=1\baselineskip, + breaklines=true, + frame=single, + xleftmargin=\parindent, + language=SQL, + showstringspaces=false, + basicstyle=\footnotesize\ttfamily, + keywordstyle=\bfseries\color{green!40!black}, + commentstyle=\itshape\color{purple!40!black}, + stringstyle=\color{orange}, +} +\lstset{style=code, language=SQL} +\usepackage{minted} + + +% Pour les extraits de code +\RequirePackage{tcolorbox} +\tcbuselibrary{skins,theorems,breakable,listings} +\lstdefinelanguage{JavaScript}{ + morekeywords=[1]{type, break, continue, delete, else, for, function, if, in, + new, return, this, typeof, var, void, while, with, District, const}, + % Literals, primitive types, and reference types. + morekeywords=[2]{false, null, true, boolean, number, undefined, + Array, Boolean, Date, Math, Number, String, Object}, + % Built-ins. + morekeywords=[3]{eval, parseInt, parseFloat, escape, unescape}, + sensitive, + morecomment=[s]{/*}{*/}, + morecomment=[l]//, + morecomment=[s]{/**}{*/}, % JavaDoc style comments + morestring=[b]', + morestring=[b]" +}[keywords, comments, strings] +\lstset{basicstyle=\ttfamily,language=SQL,keywordstyle=\color{blue},belowskip=0.5\baselineskip} + +\RequirePackage[inline]{enumitem} +\setlist{font=\color{maincolor}\sffamily\bfseries} + +\tcbset{colback=white, colframe=maincolor} +\setcounter{tocdepth}{3} +\newcommand{\marginsecnumber}[1]{\makebox[0pt][r]{#1\hspace{1ex}}} +\newcommand{\achiev}[1]{\emph{achievement} #1} +\renewcommand*\contentsname{Sommaire} + +\newcommand{\code}[1]{{\sffamily\color{maincolor}\texttt{#1}}} % type some 'code' like text + +%define page style +\pagestyle{fancy} +\renewcommand{\headrulewidth}{.5pt} +\renewcommand{\footrulewidth}{.5pt} +\renewcommand{\headrule}{{\color{maincolor}\hrule width\headwidth height\headrulewidth \vskip-\headrulewidth}} +\renewcommand{\footrule}{{\color{maincolor}\vskip-\footruleskip\vskip-\footrulewidth\hrule width\headwidth height\footrulewidth\vskip\footruleskip}} + +% +\lhead{} +\chead{} +\rhead{\textcolor{maincolor}{\leftmark}} +\lfoot{} +\cfoot{} +\rfoot{\sffamily\textcolor{maincolor}{\thepage}} + +% Define maincolor variable + +\renewcommand{\title}[1]{\noindent\textbf{\color{maincolor}\sffamily\Huge #1}\par\bigskip} + +% Change section format +\titleformat{\section}[block]{\huge\sffamily\bfseries\color{maincolor}}{\marginsecnumber\thesection}{0pt}{} +\titlespacing{\section}{0pt}{*2.5}{.5ex plus .5ex} + +% Change subsection format +\titleformat{\subsection}{\Large\sffamily\bfseries\color{maincolor}}{\marginsecnumber\thesubsection}{0pt}{} +\titlespacing{\subsection}{0pt}{*1.5}{.5ex plus .5ex} + + +% Change subsection format +\titleformat{\subsubsection}{\Large\sffamily\bfseries\color{maincolor}}{\marginsecnumber\thesubsubsection}{0pt}{} +\titlespacing{\subsubsection}{0pt}{*1.2}{.5ex plus .5ex} + +% Change paragraph format +\titleformat{\paragraph}[runin]{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{} +\titlespacing*{\paragraph}{0pt}{1ex plus .5ex minus .5ex}{1em}\setcounter{secnumdepth}{4} + +\newcommand{\ligne}[0]{{\color{maincolor}\hrule}} \ No newline at end of file diff --git a/report/img/graphs/21-create-many.svg b/report/img/graphs/21-create-many.svg new file mode 100644 index 0000000..7ca68a6 --- /dev/null +++ b/report/img/graphs/21-create-many.svg @@ -0,0 +1,320 @@ + + + +Gnuplot +Produced by GNUPLOT 6.0 patchlevel 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 4000 + + + + + + + + + + + + + 6000 + + + + + + + + + + + + + 8000 + + + + + + + + + + + + + 10000 + + + + + + + + + + + + + 12000 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + + + + + + + + + + 160 + + + + + + + + + + + + + 180 + + + + + + + + + + + + + 200 + + + + + + + + + Équipe n°2 - 26137 + + + Équipe n°2 - 26137 + + + + + + Pthread + + + Pthread + + + + + + + + + + + + + + Temps (µs) + + + + + Nombre de threads + + + + + + + Comparaison des temps d'execution de 21-create-many + + + + + + + diff --git a/report/img/graphs/22-create-many-recursive-deadlock.svg b/report/img/graphs/22-create-many-recursive-deadlock.svg new file mode 100644 index 0000000..0a1833e --- /dev/null +++ b/report/img/graphs/22-create-many-recursive-deadlock.svg @@ -0,0 +1,359 @@ + + + +Gnuplot +Produced by GNUPLOT 6.0 patchlevel 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 200 + + + + + + + + + + + + + 300 + + + + + + + + + + + + + 400 + + + + + + + + + + + + + 500 + + + + + + + + + + + + + 600 + + + + + + + + + + + + + 700 + + + + + + + + + + + + + 800 + + + + + + + + + + + + + 900 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + + + + + + + + + + 160 + + + + + + + + + + + + + 180 + + + + + + + + + + + + + 200 + + + + + + + + + Version optimisée avec nouvelle structure + + + Version optimisée avec nouvelle structure + + + + + + Version iterative + + + Version iterative + + + + + + + + + + + + + + Temps (µs) + + + + + Nombre de threads + + + + + + + Comparaison des temps d'execution de 22-create-many-recursive + + + + + + + diff --git a/report/img/graphs/22-create-many-recursive.svg b/report/img/graphs/22-create-many-recursive.svg new file mode 100644 index 0000000..9e352c3 --- /dev/null +++ b/report/img/graphs/22-create-many-recursive.svg @@ -0,0 +1,307 @@ + + + +Gnuplot +Produced by GNUPLOT 6.0 patchlevel 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 5000 + + + + + + + + + + + + + 10000 + + + + + + + + + + + + + 15000 + + + + + + + + + + + + + 20000 + + + + + + + + + + + + + 25000 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + + + + + + + + + + 160 + + + + + + + + + + + + + 180 + + + + + + + + + + + + + 200 + + + + + + + + + Équipe n°2 - 26137 + + + Équipe n°2 - 26137 + + + + + + Pthread + + + Pthread + + + + + + + + + + + + + + Temps (µs) + + + + + Nombre de threads + + + + + + + Comparaison des temps d'execution de 22-create-many-recursive + + + + + + + diff --git a/report/img/graphs/23-create-many-once.svg b/report/img/graphs/23-create-many-once.svg new file mode 100644 index 0000000..22794bf --- /dev/null +++ b/report/img/graphs/23-create-many-once.svg @@ -0,0 +1,320 @@ + + + +Gnuplot +Produced by GNUPLOT 6.0 patchlevel 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 4000 + + + + + + + + + + + + + 6000 + + + + + + + + + + + + + 8000 + + + + + + + + + + + + + 10000 + + + + + + + + + + + + + 12000 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + + + + + + + + + + 160 + + + + + + + + + + + + + 180 + + + + + + + + + + + + + 200 + + + + + + + + + Équipe n°2 - 26137 + + + Équipe n°2 - 26137 + + + + + + Pthread + + + Pthread + + + + + + + + + + + + + + Temps (µs) + + + + + Nombre de threads + + + + + + + Comparaison des temps d'execution de 23-create-many-once + + + + + + + diff --git a/report/img/graphs/51-fibonacci.svg b/report/img/graphs/51-fibonacci.svg new file mode 100644 index 0000000..e4583cc --- /dev/null +++ b/report/img/graphs/51-fibonacci.svg @@ -0,0 +1,305 @@ + + + +Gnuplot +Produced by GNUPLOT 6.0 patchlevel 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + + + + + + + + + + 5000 + + + + + + + + + + + + + 6000 + + + + + + + + + + + + + 7000 + + + + + + + + + + + + + 8000 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 12 + + + + + + + + + + + + + 14 + + + + + + + + + + + + + 16 + + + + + + + + + Équipe n°2 - 26137 + + + Équipe n°2 - 26137 + + + + + + Pthread + + + Pthread + + + + + + + + + + + + + + Temps (µs) + + + + + Nombre utilisé + + + + + + + Comparaison des temps d'execution de 51-fibonacci + + + + + + + diff --git a/report/img/logo_em.jpg b/report/img/logo_em.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2db19ecbd02fe42710e90fcbac2096acf3126f2 GIT binary patch literal 159787 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 literal 0 HcmV?d00001 diff --git a/report/main.tex b/report/main.tex new file mode 100644 index 0000000..7f9fc56 --- /dev/null +++ b/report/main.tex @@ -0,0 +1,20 @@ +\documentclass[french]{article} + +\usepackage{headers} + +\begin{document} + +\include{parts/title} + +\setcounter{tocdepth}{3} +\tableofcontents + +\pagebreak +\sffamily +\input{parts/introduction} +\input{parts/part1} +\input{parts/part2} +\input{parts/part3} +\input{parts/part4} + +\end{document} diff --git a/report/parts/introduction.tex b/report/parts/introduction.tex new file mode 100644 index 0000000..e0608f6 --- /dev/null +++ b/report/parts/introduction.tex @@ -0,0 +1,3 @@ +\section{Introduction} + +\indent Construire une bibliothèque de \textit{threads} dans le monde utilisateur peut être utile pour l'optimisation de certains aspects calculatoires spécifiques. En effet, les calculs en moins que ne fera pas le \textit{kernel} augmentera la performance globale du code, mais en contrepartie cela nécessitera de devoir implémenter des fonctions inhérentes que pouvait remplir le \textit{kernel} jusqu'alors. Ce rapport mi-parcours vise à appuyer notre vision sur l'implémentation de cette bibliothèque de \textit{threads}. Cette vision qui est axée sur la \textit{performance}, la \textit{sûreté} et pour l'instant sur cette constante \textit{remise en question}: Quels sont les avantages d'une implémentation de \textit{pthread} sans préemption? Comment détecter un deadlock? Quelles optimisations spécifiques au calcul de \textit{Fibonacci} peuvent être actuellement mises en place? \ No newline at end of file diff --git a/report/parts/part1.tex b/report/parts/part1.tex new file mode 100644 index 0000000..a0c8f9e --- /dev/null +++ b/report/parts/part1.tex @@ -0,0 +1,52 @@ +\section{Implémentation} + +L'implémentation se distingue en deux parties mais avec une grosse base commune décrite dans \ref{sec:impl_general}. + +\subsection{Générale}\label{sec:impl_general} + +Nous utilisons une file qui ne contient que les threads non finis et non en attente. +Lorsque qu'un thread fini, il met celui qui l'attend dans la file. +On a une file de threads à utiliser pour ne pas libérer/allouer en permanence. Celui qui attend un thread le met dans la file lorsqu'il peut reprendre la main. +On préalloue 2000 threads au début pour être tranquille. Voir graphes de performances figure \ref{fig:create-many} + +\begin{figure}[h!] + \centering + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfloat[]{ + \includesvg[width=\linewidth]{img/graphs/21-create-many.svg} + } + \end{minipage} + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfloat[]{ + \includesvg[width=\linewidth]{img/graphs/22-create-many-recursive.svg} + } + \end{minipage}\par\medskip + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfloat[]{ + \includesvg[width=\linewidth]{img/graphs/23-create-many-once.svg} + } + \end{minipage} + \caption{Performances sur la création de multiples threads} + \label{fig:create-many} +\end{figure} + +Les graphiques montrent une grande différence entre \code{pthread} et nos threads, cela s'explique par le fait que \code{pthread} s'exécute en multi-coeurs et il y a un gros coût de performance à faire cela. On s'attend à un sur-coût équivalent lors de notre future implémentation des threads noyaux. + +\subsection{Fibonacci} + +L'implémentation pour Fibonacci ne se distingue que sur un aspect important : la technique d' +ordonnancement. Si dans le cas général nous utilisons une file, pour Fibonacci nous passons à une pile. Cela permet de parcourir l'arbre des appels en profondeur et non en largeur. De fait, nous avons au maximum $h$ threads en même temps, où $h$ est la hauteur de l'arbre des appels, \emph{id est} $n$ pour l'exécution de {\ttfamily fibo(n)}. + +En plus de cela, nous trichons \emph{légèrement} sur l'ordonnancement en rendant le premier appel à \code{thread\_yield} inutile. C'est-à-dire que l'ordonnanceur regarde si le thread en court d'exécution a déjà fait un appel à \code{thread\_yield}. Le cas échéant il basculera sur un nouveau thread, sinon celui courant garde la main. + +\begin{figure}[h] + \centering + \includesvg{img/graphs/51-fibonacci.svg} + \caption{Performances sur Fibonacci} + \label{fig:fibo} +\end{figure} + +Grâce à la comparaison sur la figure \ref{fig:fibo}, nous pouvons voir que notre bibliothèque est bien plus performante que \code{pthreads}. Cela s'explique par notre optimisation pour ce test uniquement là où la glibc est bien plus générale. De plus, cette-dernière utilise les threads noyaux, plus gourmands, qui explorent plusieurs branches en même temps. \ No newline at end of file diff --git a/report/parts/part2.tex b/report/parts/part2.tex new file mode 100644 index 0000000..38c4e58 --- /dev/null +++ b/report/parts/part2.tex @@ -0,0 +1,11 @@ +\section{Les mutex} + +Les mutex ont été mis en \oe{}uvre à l'aide d'un entier dans une structure, si le mutex est libre, alors cet entier est égal \texttt{1}, sinon il est égal à \texttt{0}. La fonction \texttt{\_\_sync\_bool\_compare\_and\_swap} est utilisée afin de tester la nullité de l'entier codant l'état du mutex et de réserver ce dernier atomiquement. + +La difficulté réside dans la mise en \oe{}uvre du comportement à avoir lorsque le mutex est déjà réservé. + +Une structure de mutex stocke une FIFO mise en \oe{}uvre à l'aide de \texttt{STAILQ}. Cette FIFO stocke quant à elle des threads en attente de la fin de l'utilisation du mutex en question. + +Lorsqu'un thread demande l'accès à un mutex déjà réservé, il est retiré de la liste d'attente de l'ordonnanceur, puis est mis dans la FIFO du mutex. Lorsque le thread qui est en train d'utiliser le mutex libère ce dernier, il prend le premier thread de la FIFO du mutex et le rajoute dans la liste d'attente de l'ordonanceur. + +Ce système permet de ne pas donner la main à un thread en train d'attendre l'accès à un mutex, et donc d'économiser des changements de contextes. De plus, il permet de choisir un thread attendant un mutex à libérer en temps constant, pour ensuite le rajouter dans la liste d'attente de l'ordonnanceur. \ No newline at end of file diff --git a/report/parts/part3.tex b/report/parts/part3.tex new file mode 100644 index 0000000..ef3c632 --- /dev/null +++ b/report/parts/part3.tex @@ -0,0 +1,19 @@ +\section{Les deadlocks} +Les deadlocks se produisent lorsque qu'un thread essaye de s'attendre lui même directement ou par l'intermédiaire de d'autre threads. Il est donc nécessaire de savoir quel thread est effectivement attendu lors d'un join. + + +Lorsque qu'un thread est attendu, on stocke dans le champ \code{retvalue} le pointeur vers le thread qui attend. C'est notamment utile pour remettre le thread qui attend dans la fifo principal pour qu'il soit réordonnancé. Mais on peut également l'utiliser, et c'était notre première idée, pour itérer sur la liste des threads qui s'attendent entre eux et récupérer le "dernier thread" attendu afin de s'assurer qu'il ne s'agit pas de celui qui essaye de join. + +Cependant cette technique, bien que simple, n'est pas optimisée et est de complexité linéaire par rapport au nombre de thread qui s'attendent entre eux. On peut notamment voir ce manque de performance dans le test \code{22-create-many-recursive}. + +Pour résoudre ça, on rajoute un champ vers un pointeur d'une nouvelle structure \code{last\_thread\_t} dans notre structure \code{thread\_entry\_t} qui va permettre de designer le dernier thread qui est attendu. +Pour récapituler, chaque thread attendu possède une référence vers une structure qui elle pointe vers le dernier thread attendu du groupe. Ainsi la mise à jour et la consultation du dernier thread attendu lors d'un join se fait en temps constant. On peut voir cette structure comme un pointeur d'un pointeur de \code{last\_thread\_t} mais il a été choisi d'introduire une structure pour garder le nombre de références vers cette structure pour pouvoir la free lorsque qu'elle n'est plus utilisée. + +\begin{figure}[h] + \centering + \includesvg[width=\linewidth]{img/graphs/22-create-many-recursive-deadlock.svg} + \caption{Comparaison version itérative et version optimisée} + \label{fig:deadlock-comparaison} +\end{figure} + +La figure \ref{fig:deadlock-comparaison} nous montre le très net bénéfice de faire intervenir une structure annexe pour consulter le dernier thread attendu. L'écart entre les deux méthodes est aussi prononcé que la différence de performance entre nos threads et ceux de Brieuc. \ No newline at end of file diff --git a/report/parts/part4.tex b/report/parts/part4.tex new file mode 100644 index 0000000..93d29ad --- /dev/null +++ b/report/parts/part4.tex @@ -0,0 +1,25 @@ +\section{Conclusion et prévisions pour la suite} + +Même si nous avons une base plutôt avancée, nous pouvons améliorer certains aspects, notamment par l'ajout de fonctionnalités facultatives. Nous pensons ajouter le support des signaux, et surtout de la préemption et le support multicoeurs. Mais il y a un ordre ! + +\vspace{1\baselineskip} +Par exemple, implémenter la \textit{préemption} nécessite de: + +\vspace{-0.35\baselineskip} +\begin{enumerate} + \item Pouvoir \textbf{déclencher des interruptions asynchrones}. Nous allons choisir l'implémentation de \textit{setitimer} qui enverra le signal \textit{SIGALARM} au processus à intervalle de temps régulier. +\vspace{-0.5\baselineskip} + \item Pouvoir \textbf{gérer le signal envoyé lors de l'interruption}, et ainsi bénéficier d'un \textit{handler} qui va effectuer un changement de contexte. + \vspace{-0.5\baselineskip} + \item Pouvoir \textbf{protéger des parties communes} à tous les \textit{threads}. Pour \textit{free} ou \textit{yield} par exemple. +\end{enumerate} + +\vspace{-0.35\baselineskip} +Ainsi, avant d'implémenter cette \textit{préemption}, il sera nécessaire de savoir gérer le signal \textit{SIGALARM}, et ainsi de configurer au préalable un \textit{gestionnaire de signaux}. +Néanmoins, il n'est pas nécesaire d'implémenter tous les signaux pour cette dernière. + +\vspace{0.35\baselineskip} +On peut s'attendre aussi à une baisse des performances pour les calculs de \textit{Fibonacci}. + +\vspace{1\baselineskip} +En ce qui concerne le \textit{support des machines multicoeurs}, nous avons déjà implémenté les \textit{mutex}. Plusieurs questions subsistent encore concernant l'efficacité de l'ordonnanceur, mais aussi concernant des problèmes de \textit{fausse concurrence}, engendrant une diminution de la performance du code. \ No newline at end of file diff --git a/report/parts/title.tex b/report/parts/title.tex new file mode 100644 index 0000000..15c7b32 --- /dev/null +++ b/report/parts/title.tex @@ -0,0 +1,39 @@ +\begin{titlepage} + \begin{center} + \vspace*{\stretch{1.5}} + + \begin{figure} + \centering + \includegraphics[scale=0.6]{logo_em} + \label{logo:logo_em} + \end{figure} + \vspace*{\stretch{0.25}} + + \ligne + \vspace*{\stretch{0.2}} + \title{Rapport intermédiaire IT 202} + {\color{maincolor}\large(G1-E2-26137)} + \vspace*{12pt} + \ligne + + \vspace*{\stretch{0.8}} + + Encadrant:\\ + \begin{tabular}{rl} + \textbf{Mathieu} & \textbf{Faverge} \\ + \end{tabular} + + \vspace*{\stretch{0.15}} + Équipe :\\ + \begin{tabular}{rl} + \textbf{Martin} & \textbf{Eyben} \\ + \textbf{Nemo} & \textbf{D'Acremont} \\ + \textbf{Alessandre} & \textbf{Laguierce} \\ + \textbf{Damien} & \textbf{Delpy} \\ + \textbf{Victor} & \textbf{Rosada-Canesin} + \end{tabular} + + \vspace*{\stretch{2.2}} + ENSEIRB-MATMECA \\ Informatique \\ 2024-2025 + \end{center} +\end{titlepage} \ No newline at end of file