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/tex.mk
TEXI2PDFFLAGS += --shell-escape
all: slides.pdf
clean:
......
......@@ -7,7 +7,7 @@
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{listings}
\usepackage{minted}
\usepackage{color}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
......@@ -16,23 +16,6 @@
\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}
\renewcommand{\maketitle}
......@@ -103,83 +86,92 @@
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Rappel: notre objectif : une approche hybride}
Fournir une type effacé avec interface d'image qui puisse être utilisé avec
numpy,
mais également\ldots
\pause
\medskip
\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}
\begin{frame}
\frametitle{Différentes approches}
\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)
\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,
\bigskip
pour obtenir un maximum de performances.
\end{frame}
\begin{frame}
\frametitle{L'état du projet}
\begin{itemize}
\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
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}
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}
les types template vers les types concrets
\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};
\draw node[] (A) {\tiny{Python land}} -- ++(4,0) node[] (B) {\tiny{C++ land}};
\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 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>)};
\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<>)};
\draw[->,thick] (D) -- (ndima) node[midway,above] {};
\draw[<->,dashed] (Py0) -- (ndima) node[midway,above] {py::buffer};
% \draw[-, thick] (D) -- (stretch) node[midway,above] {};
\draw[->,thick] (stretchv) -- (stretch) node[midway,right] {\tiny dyn. dispatch};
\draw[<->,dashed] (Py0) -- (ndima) node[midway,above] {\tiny py buffer};
\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}
\end{frame}
\begin{frame}
\frametitle{Les prochains pas}
A court terme:
\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
passer par\newline img = olena.image2d(arr))
\item Continuer à se rapprocher des types complets d'olena
\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}
\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