slides.tex 5.92 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 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
\usepackage{listings}
\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}

\lstset{frame=tb,
  language=C++,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle={\small\ttfamily},
  numbers=none,
  numberstyle=\tiny\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3
}
Celian Gossec's avatar
Celian Gossec committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48

\usetheme{KremlinBicetre}

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

49
\date[19-03-2019]{Lightning Talk: 19 Mars}
Celian Gossec's avatar
Celian Gossec committed
50 51 52 53 54 55 56 57 58 59 60 61
\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}
62
  \frametitle{Rappel: la situation}
Celian Gossec's avatar
Celian Gossec committed
63 64 65 66 67 68 69 70 71 72 73

    \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}
74 75 76 77 78 79 80 81 82 83 84 85
    \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
86 87 88 89 90 91 92


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


\begin{frame}
93
  \frametitle{Rappel: la situation}
Celian Gossec's avatar
Celian Gossec committed
94 95 96 97 98 99 100 101 102 103 104 105 106
    \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}
107 108 109
  \frametitle{Rappel: notre objectif : une approche hybride}
  Fournir une type effacé avec interface d'image qui puisse être utilisé avec
    numpy,
Celian Gossec's avatar
Celian Gossec committed
110

111
  mais également\ldots
Celian Gossec's avatar
Celian Gossec committed
112

113 114
  \pause
  \medskip
Celian Gossec's avatar
Celian Gossec committed
115

116 117 118 119
  \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}
Celian Gossec's avatar
Celian Gossec committed
120

121 122
  \bigskip
  pour obtenir un maximum de performances.
Celian Gossec's avatar
Celian Gossec committed
123 124 125
\end{frame}

\begin{frame}
126 127 128 129 130 131 132 133 134 135 136
    \frametitle{L'état du projet}
      \begin{itemize}
          \item Réimplementation d'une version miniaturisée de la classe
              \textit{Image2d} de Milena \pause
          \item Création de classes permettant l'extraction d'information depuis
            les types template vers les types concrets \pause
          \item Implémentation des liaisons (\textit{bindings}) C++/Python avec
              Pybind11 \pause
          \item Utilisation des \textit{buffer \_protocol} de Pybind11 pour
              permettre une interface numpy
      \end{itemize}
Celian Gossec's avatar
Celian Gossec committed
137 138
\end{frame}

139 140 141 142 143 144 145 146 147 148 149 150 151 152
Du code C++ codé pour une classe \textit{template}\ldots
\begin{lstlisting}
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{lstlisting}
Celian Gossec's avatar
Celian Gossec committed
153

154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
\begin{frame}
    Utilisable depuis Python \newline
    \begin{tikzpicture}
    \tikzset{land/.style={draw}, obj/.style={draw,fill=red!20}};
        \draw node[] (A) {Python land} -- ++(4,0) node[] (B) {C++ land};
        \coordinate (C)  at ($(A)!0.5!(B)$);
        \draw (C) -- ++(0,-4);

        \node[obj] [below = 0.4cm of A] (Py0) {np.array};
        \node[obj] [below = 0.4cm of B] (ndima) {\tt ndimage<>};
        \node[obj] [below = 0.5cm of ndima] (D) {\tt ndimage<T>};
        \node[obj] [below right =.1cm and 0.3cm of D] (stretch) {\tt stretch(ndimage2d<T>)};

        \draw[->,thick] (D) -- (ndima)  node[midway,above] {};
        \draw[<->,dashed] (Py0) -- (ndima) node[midway,above] {py::buffer};
%        \draw[-, thick] (D) -- (stretch) node[midway,above] {};

    \end{tikzpicture}
    \includegraphics[scale=.32]{figs/python_example}
\end{frame}
Celian Gossec's avatar
Celian Gossec committed
174

175 176 177 178 179 180 181
\begin{frame}
    \frametitle{Les prochains pas}
    \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
            passer par\newline img = olena.image2d(arr)) \pause
        \item Continuer à se rapprocher des types complets d'olena
Celian Gossec's avatar
Celian Gossec committed
182
    \end{itemize}
183
\end{frame}
Celian Gossec's avatar
Celian Gossec committed
184

185 186 187
\begin{frame}
    \frametitle{Questions?}
    \includegraphics{figs/questionmark}
Celian Gossec's avatar
Celian Gossec committed
188 189 190
\end{frame}

\begin{frame}
191
    \frametitle{Bibliographie}
Celian Gossec's avatar
Celian Gossec committed
192
        \scriptsize
193
        \nocite{levillain.14.ciarp, roynard.18.rrpr, demaille.13.ciaa, pybind11}
Celian Gossec's avatar
Celian Gossec committed
194 195 196 197 198
        \bibliography{biblio}
        \bibliographystyle{apalike}
\end{frame}

\end{document}