Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
ltalks
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Célian
ltalks
Commits
fdee28f4
Commit
fdee28f4
authored
Mar 18, 2019
by
Celian Gossec
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UPDATE: 1903: Slide structure + minted usage
parent
7f92a78e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
61 additions
and
67 deletions
+61
-67
1903/Makefile
1903/Makefile
+2
-0
1903/slides.tex
1903/slides.tex
+59
-67
No files found.
1903/Makefile
View file @
fdee28f4
include
share/make/share.mk
include
share/make/tex.mk
TEXI2PDFFLAGS
+=
--shell-escape
all
:
slides.pdf
clean
:
...
...
1903/slides.tex
View file @
fdee28f4
...
...
@@ -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)
\end{itemize}
\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}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment