slides.tex 5.86 KB
Newer Older
Celian Gossec's avatar
Celian Gossec committed
1 2 3 4
\documentclass[bigger]{beamer}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
5
\usepackage[french]{babel}
Celian Gossec's avatar
Celian Gossec committed
6 7 8 9
\usepackage{wrapfig}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{tabularx}
10
\usepackage{minted}
11 12 13 14 15 16 17 18
\usepackage{color}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

Celian Gossec's avatar
Celian Gossec committed
19 20 21 22 23 24 25 26 27 28 29 30 31
\usetheme{KremlinBicetre}

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

32
\date[19-03-2019]{Lightning Talk: 19 Mars}
Celian Gossec's avatar
Celian Gossec committed
33 34 35 36 37 38 39 40 41 42 43 44
\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}
45
  \frametitle{Rappel: la situation}
Celian Gossec's avatar
Celian Gossec committed
46 47 48 49 50 51 52 53 54 55 56

    \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}
57 58 59 60 61 62 63 64 65 66 67 68
    \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}
Celian Gossec's avatar
Celian Gossec committed
69 70 71 72 73 74 75


    \structure{Objectif.} Faciliter l'usage d'Olena.\\[2pt]
\end{frame}


\begin{frame}
76
  \frametitle{Rappel: la situation}
Celian Gossec's avatar
Celian Gossec committed
77 78 79 80 81 82 83 84 85 86 87 88
    \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}

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
\begin{frame}[fragile]
    Du code C++ codé pour une classe \textit{template}\ldots
    \begin{minted}{c++}
image2d<float> stretch(const image2d<T>& src)
\{
    auto res = image2d<float>(src.width(),
        src.height());
    auto span = src.values();
    std::transform(span.begin(), span.end(),
        res.values().begin(),
        [](T val) -> float
        \{
            return static\_cast<float>(val)
            / std::numeric\_limits<T>::max();
        \});
    return res;
\}
    \end{minted}
\end{frame}
Celian Gossec's avatar
Celian Gossec committed
108

109 110
\begin{frame}
  \frametitle{Différentes approches}
111
  \begin{itemize}
112 113 114 115 116 117
      \item Polymorphisme de coercision
      \item Compilation à la volée
      \item Effacement de type \pause
      \item Vérification dynamique du type puis conversion
  \end{itemize}
%  Fournir une type effacé avec interface d'image qui puisse être utilisé avec numpy,
Celian Gossec's avatar
Celian Gossec committed
118 119 120 121

\end{frame}

\begin{frame}
122 123 124
    \frametitle{L'état du projet}
      \begin{itemize}
          \item Réimplementation d'une version miniaturisée de la classe
125
              \textit{Image2d} de Milena
126
          \item Création de classes permettant l'extraction d'information depuis
127
            les types template vers les types concrets
Celian Gossec's avatar
Celian Gossec committed
128

129 130
    \begin{tikzpicture}
    \tikzset{land/.style={draw}, obj/.style={draw,fill=red!20}};
131
        \draw node[] (A) {\tiny{Python land}} -- ++(4,0) node[] (B) {\tiny{C++ land}};
132
        \coordinate (C)  at ($(A)!0.5!(B)$);
133
        \draw (C) -- ++(0,-2);
134

135 136 137 138 139
        \node[obj] [below = 0.4cm of A] (Py0) {\tiny np.array};
        \node[obj] [below = 0.4cm of B] (ndima) {\tiny ndimage<>};
        \node[obj] [below = 0.5cm of ndima] (D) {\tiny ndimage<T>};
        \node[obj] [right =.1cm of D] (stretch) {\tiny stretch(ndimage2d<T>)};
        \node[obj] [right =.1cm of ndima] (stretchv) {\tiny stretch(ndimage2d<>)};
140 141

        \draw[->,thick] (D) -- (ndima)  node[midway,above] {};
142 143
        \draw[->,thick] (stretchv) -- (stretch)  node[midway,right] {\tiny dyn. dispatch};
        \draw[<->,dashed] (Py0) -- (ndima) node[midway,above] {\tiny py buffer};
144
    \end{tikzpicture}
145 146 147 148 149 150 151 152 153 154 155 156


          \item Implémentation des liaisons (\textit{bindings}) C++/Python avec
              Pybind11
          \item Utilisation des \textit{buffer \_protocol} de Pybind11 pour
              permettre une interface numpy
      \end{itemize}
\end{frame}


\begin{frame}
    \frametitle{En pratique: Python}
157 158
    \includegraphics[scale=.32]{figs/python_example}
\end{frame}
Celian Gossec's avatar
Celian Gossec committed
159

160 161
\begin{frame}
    \frametitle{Les prochains pas}
162
    A court terme:
163 164 165
    \begin{itemize}
        \item Ajout de méthodes pour éviter le cast explicite vers les types C++
            (afin de pouvoir faire en Python\newline res = olena.stretch(arr), sans
166
            passer par\newline img = olena.image2d(arr))
167
        \item Continuer à se rapprocher des types complets d'olena
Celian Gossec's avatar
Celian Gossec committed
168
    \end{itemize}
169 170 171 172 173 174
    Et à plus long terme: \pause
    \begin{itemize}
        \item Permettre l'utilisation de coercision en tandem avec de la
            répartition dynamique
        \item Utiliser la compilation à la volée quand/si possible
    \end{itemize}
175
\end{frame}
Celian Gossec's avatar
Celian Gossec committed
176

177 178 179
\begin{frame}
    \frametitle{Questions?}
    \includegraphics{figs/questionmark}
Celian Gossec's avatar
Celian Gossec committed
180 181 182
\end{frame}

\begin{frame}
183
    \frametitle{Bibliographie}
Celian Gossec's avatar
Celian Gossec committed
184
        \scriptsize
185
        \nocite{levillain.14.ciarp, roynard.18.rrpr, demaille.13.ciaa, pybind11}
Celian Gossec's avatar
Celian Gossec committed
186 187 188 189 190
        \bibliography{biblio}
        \bibliographystyle{apalike}
\end{frame}

\end{document}