slides.tex 5.76 KB
Newer Older
Celian Gossec's avatar
Celian Gossec committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
\documentclass[bigger]{beamer}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{wrapfig}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{tabularx}

\usetheme{KremlinBicetre}

\renewcommand{\maketitle}
{%
    \begin{frame}
        \titlepage%
        \vspace{-10mm}%
        \begin{flushright}%
            \includegraphics[width=3cm]{figs/lrde-big}%
        \end{flushright}%
    \end{frame}%
}

\date[14-02-2019]{Lightning Talk: Feb 14}
\author{Célian \textsc{Gossec}}
\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}

    \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 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 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
        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 \includegraphics[width=.7cm]{figs/angrygreen}
                        &
                        \hfil\bfseries \includegraphics[width=.7cm]{figs/angryred}
                        \\\cmidrule(r{3\tabcolsep}){1-1}\cmidrule(l{-\tabcolsep}){2-2}

                        Aussi rapide que le C++ (après la 1\iere compilation) \par

                        &
                        \parbox{\linewidth}{
                        1\iere compilation lente \\[10pt]
                        Nécessite un compilateur \\[10pt]
                        Pas d'export NumPy\\ (par défaut) \par
                        }
                \\ %\bottomrule
                \end{tabularx}
\end{frame}

\begin{frame}
        \frametitle{Approche 2 : Polymorphisme de coercition}
        Approche utilisée par Matlab \newline
        Un type plus large qui englobe tous les types désirés.

        \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}

          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: 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 hybride}
  Fournir une type effacé avec interface d'image qui puisse être utilisé avec
    numpy\footnote{\tiny https://github.com/pybind/pybind11},

  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}
        \frametitle{Bibliographie}
        \scriptsize
        \nocite{levillain.14.ciarp, roynard.18.rrpr, demaille.13.ciaa}
        \bibliography{biblio}
        \bibliographystyle{apalike}
\end{frame}

\end{document}