Commit fdee28f4 authored by Celian Gossec's avatar Celian Gossec

UPDATE: 1903: Slide structure + minted usage

parent 7f92a78e
include share/make/share.mk include share/make/share.mk
include share/make/tex.mk include share/make/tex.mk
TEXI2PDFFLAGS += --shell-escape
all: slides.pdf all: slides.pdf
clean: clean:
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
\usepackage{hyperref} \usepackage{hyperref}
\usepackage{booktabs} \usepackage{booktabs}
\usepackage{tabularx} \usepackage{tabularx}
\usepackage{listings} \usepackage{minted}
\usepackage{color} \usepackage{color}
\usepackage{tikz} \usepackage{tikz}
\usetikzlibrary{positioning,calc} \usetikzlibrary{positioning,calc}
...@@ -16,23 +16,6 @@ ...@@ -16,23 +16,6 @@
\definecolor{gray}{rgb}{0.5,0.5,0.5} \definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82} \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} \usetheme{KremlinBicetre}
\renewcommand{\maketitle} \renewcommand{\maketitle}
...@@ -103,83 +86,92 @@ ...@@ -103,83 +86,92 @@
\end{itemize} \end{itemize}
\end{frame} \end{frame}
\begin{frame} \begin{frame}[fragile]
\frametitle{Rappel: notre objectif : une approche hybride} Du code C++ codé pour une classe \textit{template}\ldots
Fournir une type effacé avec interface d'image qui puisse être utilisé avec \begin{minted}{c++}
numpy, image2d<float> stretch(const image2d<T>& src)
\{
mais également\ldots auto res = image2d<float>(src.width(),
src.height());
\pause auto span = src.values();
\medskip 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}
\begin{frame}
\frametitle{Différentes approches}
\begin{itemize} \begin{itemize}
\item capable de se ``caster'' vers les types concrets (instancier des algortihmes par JIT) \item Polymorphisme de coercision
\item capable de se ``convertir'' vers des types concrets (utiliser des algorithmes pré-définis) \item Compilation à la volée
\end{itemize} \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,
\bigskip
pour obtenir un maximum de performances.
\end{frame} \end{frame}
\begin{frame} \begin{frame}
\frametitle{L'état du projet} \frametitle{L'état du projet}
\begin{itemize} \begin{itemize}
\item Réimplementation d'une version miniaturisée de la classe \item Réimplementation d'une version miniaturisée de la classe
\textit{Image2d} de Milena \pause \textit{Image2d} de Milena
\item Création de classes permettant l'extraction d'information depuis \item Création de classes permettant l'extraction d'information depuis
les types template vers les types concrets \pause les types template vers les types concrets
\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}
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}
\begin{frame}
Utilisable depuis Python \newline
\begin{tikzpicture} \begin{tikzpicture}
\tikzset{land/.style={draw}, obj/.style={draw,fill=red!20}}; \tikzset{land/.style={draw}, obj/.style={draw,fill=red!20}};
\draw node[] (A) {Python land} -- ++(4,0) node[] (B) {C++ land}; \draw node[] (A) {\tiny{Python land}} -- ++(4,0) node[] (B) {\tiny{C++ land}};
\coordinate (C) at ($(A)!0.5!(B)$); \coordinate (C) at ($(A)!0.5!(B)$);
\draw (C) -- ++(0,-4); \draw (C) -- ++(0,-2);
\node[obj] [below = 0.4cm of A] (Py0) {np.array}; \node[obj] [below = 0.4cm of A] (Py0) {\tiny np.array};
\node[obj] [below = 0.4cm of B] (ndima) {\tt ndimage<>}; \node[obj] [below = 0.4cm of B] (ndima) {\tiny ndimage<>};
\node[obj] [below = 0.5cm of ndima] (D) {\tt ndimage<T>}; \node[obj] [below = 0.5cm of ndima] (D) {\tiny ndimage<T>};
\node[obj] [below right =.1cm and 0.3cm of D] (stretch) {\tt stretch(ndimage2d<T>)}; \node[obj] [right =.1cm of D] (stretch) {\tiny stretch(ndimage2d<T>)};
\node[obj] [right =.1cm of ndima] (stretchv) {\tiny stretch(ndimage2d<>)};
\draw[->,thick] (D) -- (ndima) node[midway,above] {}; \draw[->,thick] (D) -- (ndima) node[midway,above] {};
\draw[<->,dashed] (Py0) -- (ndima) node[midway,above] {py::buffer}; \draw[->,thick] (stretchv) -- (stretch) node[midway,right] {\tiny dyn. dispatch};
% \draw[-, thick] (D) -- (stretch) node[midway,above] {}; \draw[<->,dashed] (Py0) -- (ndima) node[midway,above] {\tiny py buffer};
\end{tikzpicture} \end{tikzpicture}
\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}
\includegraphics[scale=.32]{figs/python_example} \includegraphics[scale=.32]{figs/python_example}
\end{frame} \end{frame}
\begin{frame} \begin{frame}
\frametitle{Les prochains pas} \frametitle{Les prochains pas}
A court terme:
\begin{itemize} \begin{itemize}
\item Ajout de méthodes pour éviter le cast explicite vers les types C++ \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 (afin de pouvoir faire en Python\newline res = olena.stretch(arr), sans
passer par\newline img = olena.image2d(arr)) \pause passer par\newline img = olena.image2d(arr))
\item Continuer à se rapprocher des types complets d'olena \item Continuer à se rapprocher des types complets d'olena
\end{itemize} \end{itemize}
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}
\end{frame} \end{frame}
\begin{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