\begin{frame}%[label=this one]
  \frametitle{Architecture logicielle}
  \begin{columns}
    \column{.7\textwidth}
    \begin{itemize}
      \item[{\tikz[c]{\node[fill,rectangle]{};}}] \num{2300} lignes de C
        \begin{itemize}
          \item Programmation API, bas niveau
          \item Interface avec OpenCL/OpenGL
        \end{itemize}
      \item[{\tikz[ocaml]{\node[fill,rectangle]{};}}] \num{2000} lignes de OCaml
        réparties en 10 modules
        \begin{itemize}
          \item Programmation API, haut niveau
          \item Processus maître, orchestration de simulation
          \item Gestion des zones dynamiques
        \end{itemize}
      \item[{\tikz[opencl]{\node[fill,rectangle]{};}}] \num{700} lignes de kernel OpenCL
        \smallskip
      \item[{\tikz[sbgp]{\node[fill,rectangle]{};}}] SBGP
    \end{itemize}

    \begin{center}
      \small
      \begin{tikzpicture}[node distance=4mm and 1.3333cm,
        box/.style={on grid,inner sep=0pt,rectangle,draw,
        minimum height=4mm,font=\small},
        full/.style={minimum width=4cm},
        half/.style={minimum width=2cm},
        third/.style={minimum width=1.3333cm},
        ]
        \node[fill=black,draw=black,white,half,box] (cpu)             {CPU};
        \node[fill=black,draw=black,white,half,box,right=2cm of cpu] (gpu) {GPU};
        \node[fill=c,third,box,above=of cpu.west,right] (os) {OS};
        \node[fill=opencl,third,box,right=of os] (opencl)         {OpenCL};
        \node[fill=c,third,box,right=of opencl] (opengl)     {OpenGL};
        \node[fill=c,full,box,above=of os.west,right] (api1) {API OpenCL/OpenGL};
        \node[fill=ocaml,full,box,above=of api1] (api2)          {API Simulateur};
        \node[diagonal fill={ocaml}{sbgp},full,box,above=of api2] (spec) {Spécification simulation};
        \node[full,box,above=of spec,dashed] (ihm)    {IHM};

        \draw[white] (cpu.north east) -- (cpu.south east);
      \end{tikzpicture}
    \end{center}

    \column{.2\textwidth}
    \moteurs
  \end{columns}
\end{frame}
