Commit 11ce4b5a authored by Edwin Carlinet's avatar Edwin Carlinet

Add figs + update.

parent 8f343b61
......@@ -26,102 +26,155 @@
\title[Le pont statique-dynamique]{Le pont statique-dynamique}
\institute[LRDE]{LRDE\\Laboratoire de Recherche et Développement de l'EPITA}
\renewcommand{\footnotesize}{\fontsize{6pt}{8pt}\selectfont}
\begin{document}
\maketitle
\begin{frame}
\frametitle{La situation}
\frametitle{La situation}
\structure{Point de départ.} Milena, une bibliothèque \emph{générique et performante} de traitement d'image codée en
C++.
\footnote{\tiny Practical Genericity : Writing Image Processing Algorithms Both Reusable and Efficient.
R. Levillain et al., \textit{ICPR'14}.}
\footnote{\tiny An Image Processing Library in Modern C++: Getting Simplicity and Efficiency with Generic Programming.
M. Roynard, E. Carlinet, T. Géraud, \textit{RRPR'18}.}
\begin{center}
\setlength{\fboxsep}{0pt}
\begin{tabular}{cccc}
& \tiny image 2D & \tiny graph & \tiny mesh \\
\tiny in: & \fbox{\includegraphics[width=.15\linewidth]{figs/geninput-000b}} &
\fbox{\includegraphics[width=.15\linewidth]{figs/geninput-001b}} &
\fbox{\includegraphics[width=.15\linewidth]{figs/geninput-002b}} \\
%
\tiny out: & \fbox{\includegraphics[width=.15\linewidth]{figs/genoutput-000}} &
\fbox{\includegraphics[width=.15\linewidth]{figs/genoutput-001b}} &
\fbox{\includegraphics[width=.15\linewidth]{figs/genoutput-002b}} \\
\end{tabular}
\end{center}
\structure{Objectif.} Faciliter l'usage d'Olena.\\[2pt]
\end{frame}
\begin{frame}
\structure{Moyen.} Exposer Olena en Python.
\bigskip
\bigskip
\structure{Difficultés.}
\begin{itemize}
\item Le point de départ: Milena: une bibliothèque de traitement d'image
codée en C++ [1][2]
\item L'objectif: Faciliter l'usage d'Olena
\item Le moyen: Exposer Olena en Python
\item La difficulté: Liaison du code statique (C++ template) au code
dynamique (Python), compatibilité avec Numpy
\end{itemize}
\item Appeler du code \textit{statique} (templates) depuis un environnement \textit{dynamique}\\
\item Compatibilité avec Numpy
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Les différentes possibilités}
\begin{itemize}
\item Les Just-In-Time compiler \pause
\item 'Englober' les templates
\item La compilation à la volée (Just-In-Time)
\item Polymorphisme de coercition
\item L'effacement de type
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Approche 1 : Les compilateurs JIT}
Compilateurs JIT = compilation à la volée. \newline
Pas de typage tant que variables pas utilisées. [3]
\begin{table}
Principe utilisé dans Vcsn\footnote{\tiny Implementation Concepts in {V}aucanson 2. A. Demaille et al.,
\textit{CIAA'13}}
\bigskip
\begin{tabularx}{\linewidth}{>{\parskip1ex}X@{\kern4\tabcolsep}>{\parskip1ex}X}
\toprule
\hfil\bfseries Pros
%\toprule
\hfil\bfseries \includegraphics[width=.7cm]{figs/angrygreen}
&
\hfil\bfseries Cons
\hfil\bfseries \includegraphics[width=.7cm]{figs/angryred}
\\\cmidrule(r{3\tabcolsep}){1-1}\cmidrule(l{-\tabcolsep}){2-2}
Autant de vitesse que le C++ (après la 1e compilation) \par
Aussi rapide que le C++ (après la 1\iere compilation) \par
&
1e compilation lente \par
Nécessite un compilateur JIT \par
rend impossible l'export vers NumPy \par
\\\bottomrule
\parbox{\linewidth}{
1\iere compilation lente \\[10pt]
Nécessite un compilateur \\[10pt]
Pas d'export NumPy\\ (par défaut) \par
}
\\ %\bottomrule
\end{tabularx}
\caption{Avantages/Inconvénients}
\end{table}
\end{frame}
\begin{frame}
\frametitle{Approche 2 : Le polymorphisme par coercition}
Approche utilisée par Matlab: \newline
Créer une classe globale qui englobe toutes les classes désirées
\begin{table}
\begin{tabularx}{\linewidth}{>{\parskip1ex}X@{\kern4\tabcolsep}>{\parskip1ex}X}
\toprule
\hfil\bfseries Pros
&
\hfil\bfseries Cons
\\\cmidrule(r{3\tabcolsep}){1-1}\cmidrule(l{-\tabcolsep}){2-2}
\frametitle{Approche 2 : Polymorphisme de coercition}
Approche utilisée par Matlab \newline
Un type plus large qui englobe tous les types désirés.
Traitement d'une seule classe rend très facile l'export
vers python \par
\bigskip
&
\begin{tabularx}{\linewidth}{>{\parskip1ex}X@{\kern4\tabcolsep}>{\parskip1ex}X}
\toprule
\hfil\bfseries \includegraphics[width=.7cm]{figs/angrygreen}
&
\hfil\bfseries \includegraphics[width=.7cm]{figs/angryred}
\\\cmidrule(r{3\tabcolsep}){1-1}\cmidrule(l{-\tabcolsep}){2-2}
Limitation de la généricité offerte par le templating \par
Pas aussi opti que le code actuel \par
\\\bottomrule
\end{tabularx}
\caption{Avantages/Inconvénients}
\end{table}
Traitement d'un seul type rend facile l'exportation
vers Python \par
&
Limitation de la généricité \par
Perte de performance \par
\\\bottomrule
\end{tabularx}
\end{frame}
%\begin{frame}
% \frametitle{Approche 3 : Polymorphisme par type-erasure}
% Type erasure =
%
%\end{frame}
\begin{frame}
\frametitle{Approche 3: Effacement de type}
Type erasure = Type opaque avec une interface d'image.
\bigskip
\begin{tabularx}{\linewidth}{>{\parskip1ex}X@{\kern4\tabcolsep}>{\parskip1ex}X}
\toprule
\hfil\bfseries \includegraphics[width=.7cm]{figs/angrygreen}
&
\hfil\bfseries \includegraphics[width=.7cm]{figs/angryred}
\\\cmidrule(r{3\tabcolsep}){1-1}\cmidrule(l{-\tabcolsep}){2-2}
Un seul type rend facile l'exportation
vers Python
&
Grosse perte de performance
\\\bottomrule
\end{tabularx}
\end{frame}
\begin{frame}
\frametitle{Notre objectif : une approche originale}
Faire une approche qui réduit les types requis ('type-erasure') afin
d'obtenir une classe plus flexible\newline
\begin{itemize}
\item Des avantages... \pause
\begin{itemize}
\item Un code extrêmement générique \pause
\item Garder les performances du C++ \pause
\end{itemize}
\item Mais aussi des inconvénients \pause
\begin{itemize}
\item Perte probable de performances \pause
\item Grosse restructuration de la bibliothèque
existante
\end{itemize}
\end{itemize}
\frametitle{Notre objectif : une approche hybride}
Fournir une type effacé avec interface d'image,
mais \ldots
\pause
\medskip
\begin{itemize}
\item capable de se ``caster'' vers les types concrets (instancier des algortihmes par JIT)
\item capable de se ``convertir'' vers des types concrets (utiliser des algorithmes pré-définis)
\end{itemize}
\bigskip
pour récupérer la performance.
\end{frame}
\begin{frame}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment