Commit 7f92a78e authored by Celian Gossec's avatar Celian Gossec

UPDATE: 1903: Pushing updates after weekend progression

parent 5e30f974
......@@ -105,3 +105,11 @@
lrdepaper = {http://www.lrde.epita.fr/dload/papers/demaille.13.ciaa.pdf},
lrdenewsdate = {2013-05-02}
}
@misc{pybind11,
author = {Wenzel Jakob and Jason Rhinelander and Dean Moldovan},
year = {2017},
note = {https://github.com/pybind/pybind11},
title = {pybind11 -- Seamless operability between C++11 and Python}
}
......@@ -2,11 +2,36 @@
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage[french]{babel}
\usepackage{wrapfig}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{tabularx}
\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
}
\usetheme{KremlinBicetre}
......@@ -21,7 +46,7 @@
\end{frame}%
}
\date[14-02-2019]{Lightning Talk: Feb 14}
\date[19-03-2019]{Lightning Talk: 19 Mars}
\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}
......@@ -34,7 +59,7 @@
\maketitle
\begin{frame}
\frametitle{La situation}
\frametitle{Rappel: 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++.
......@@ -46,17 +71,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}
\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]
......@@ -64,6 +90,7 @@
\begin{frame}
\frametitle{Rappel: la situation}
\structure{Moyen.} Exposer Olena en Python.
\bigskip
......@@ -77,111 +104,93 @@
\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
\frametitle{Rappel: notre objectif : une approche hybride}
Fournir une type effacé avec interface d'image qui puisse être utilisé avec
numpy,
\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}
mais également\ldots
Traitement d'un seul type rend facile l'exportation
vers Python \par
\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}
Limitation de la généricité \par
Perte de performance \par
\\ %\bottomrule
\end{tabularx}
\bigskip
pour obtenir un maximum de performances.
\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}
\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}
\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
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}
\pause
\medskip
\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}
\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)
\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
\end{itemize}
\end{frame}
\bigskip
pour récupérer la performance.
\begin{frame}
\frametitle{Questions?}
\includegraphics{figs/questionmark}
\end{frame}
\begin{frame}
\frametitle{Bibliographie}
\frametitle{Bibliographie}
\scriptsize
\nocite{levillain.14.ciarp, roynard.18.rrpr, demaille.13.ciaa}
\nocite{levillain.14.ciarp, roynard.18.rrpr, demaille.13.ciaa, pybind11}
\bibliography{biblio}
\bibliographystyle{apalike}
\end{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