%
% $Id: report.tex 571 2008-04-20 17:31:04Z rick $
%

\documentclass[12pt,a4paper]{article}

\frenchspacing
\usepackage[english,dutch]{babel}
\selectlanguage{dutch}
\usepackage[pdftex]{graphicx}
\usepackage{url}
\usepackage{amssymb,amsmath}
\usepackage{lipsum}
\usepackage{float}

\floatstyle{ruled}
\newfloat{algoritm}{thp}{lop}
\floatname{algoritm}{Algoritme}

\title{\emph{n-Queens} minimale dominatie verzamelingen \\
\large{Chessboard Domination on Programmable Graphics Hardware door Nathan Cournik}}
\author{Rick van der Zwet\\
  \texttt{<hvdzwet@liacs.nl>}}
\date{\today}


\begin{document}
\maketitle
\begin{abstract}
Dit schrijven zal het paper van Nathan Cournik \emph{Chessboard Domination on
Programmable Graphics Hardware}~\cite{CDGPU2006} ---en in het speciaal de
gepresenteerde n-Queens oplossing--- vrij samenvatten in het nederlands en zal
de mening van de ondergetekende op het geheel geven.
\end{abstract}

\section{Inleiding}
\begin{figure}
  \begin{center}
    \includegraphics[width=0.5\textwidth]{pasted1.pdf}
  \end{center}
  \caption{Links; koningin kan dit patroon slaan. Rechts; ongeldige \emph{n-Queens} oplossing, opdat de koninginnen rechtsonder elkaar kunnen slaan}
  \label{fig:patroon}
\end{figure}
Vanwege het het feit dat \emph{n-Queens} een algemeen geaccepteerde termiologie
is, voor het plaatsen van $n$ koningen op een $n*n$ schaakbord zodanig dat de
koningen elkaar niet kunnen slaan, zal dit in het schrijven niet vertaald
worden. Verder zal in de tekst op diverse plekken de orginele engelse bewoordinging
staan om zo terugzoeken en refereren in het orginele paper~\cite{CDGPU2006}
makkelijker te maken.


\section{Minimale dominatie verzameling}
De minimale dominatie verzameling ({\emph{Minimum domination set}}) is
een setup waarbij zo weinig mogelijk koninginnen wordt gembruikt om elk vakje
van het schaakbord door ten minste 1 koningin geslagen kan worden of dat er een
koningin op staat. Omdat een koningin een karakteristiek patroon kan staan (zie
Figuur~\ref{fig:patroon}) kan het minimale aantal koninginnen wat nodig is ook
bepaald worden dmv van formule~\ref{eq:ondergrens}.  
\begin{equation}
y(Q_{n})\geq\frac{n-1}{2}, n\geq1
\label{eq:ondergrens}
\end{equation}
Als het een 'gewone' dominatie verzameling is dan hoeft het aantal koninginnen
niet per-se minimaal zijn.


\section{Grafische Verwerking Eenheid}
\begin{figure}
  \centering
  \includegraphics[width=0.4\textwidth]{pasted1.png}
  \caption{\emph{GPU} werking. De verschillende \emph{GPU} processorblokken
worden \emph{kernels} genoemd. De data wordt getransporteerd door verschillende
datakanalen (\emph{streams}) en heeft de vorm van een \emph{framebuffer}, welke
intern als $n * m$ array gezien kan worden. Een \emph{kernel} kan toegepast
worden om een (deel van de) \emph{framebuffer}.} 
  \label{fig:werking}
\end{figure}
De Grafische Verwerking Eenheid (\emph{Graphics Processing Unit} ook bekend als
\emph{GPU}) heeft speciale electronica om ervoor te zorgen dat deze snel de
\emph{RGB} waardes van alle beeldpunten kan berekenen in complexe beeldsystemen
met bijvoorbeeld ingewikkende (lees: tijdrovende) berekeningen voor schaduw,
reflextie en intensiteit. Om deze grote hoeveelheid gegevens te verwerken maakt
de \emph{GPU} gebruik een grote hoeveelheid parralelle processoren, welke alle
individueel een deel van de berekeningen op zich nemen.

Recente (electronica) onwikkelingen zoals \emph{CUDA}\footnote{\url{http://en.wikipedia.org/wiki/CUDA}} en (meer generieke implementaties)
\emph{OpenCL}\footnote{\url{http://en.wikipedia.org/wiki/OpenCL}} hebben ertoe
geleid dat de GPU ook door de geprogrammeerd kan worden om specifieke
berekeningen uit te voeren. Figuur~\ref{fig:werking} laat de verschillende
stappen zien die uitgevoerd moeten worden om de \emph{GPU} aan te sturen. Het
is belangrijk om te beseffen dat de \emph{GPU} een heel simpele processor is en
(dus) zeer kleine buffers en instructie set heeft. Verder is het ook cruciaal
te weten dat de \emph{GPU} \textit{niet} direct gebruik gebruik kan maken van
het hoofdgeheugen van de \emph{CPU}, maak dat de invoer en uitvoer altijd eerst
naar/van de \emph{GPU} verplaatst zal moeten worden.

\section{Aanpak}
Het zoeken van geldige minimale dominatie verzamelingen is een stevige klus,
welke we (in het optimale geval) $n$ koninginnen hebben die we op een $n * n$
schaakbord kunnen plaatsen. Dat levert $(n * n)! - ((n * n)-n)!$ mogelijkheden op.
De \emph{GPU} zal gebruikt worden om oplossingen sneller te controleren en zal
niet gebruikt worden om effientere oplossingen te vinden. De kracht zit hem in
het feit dat meer oplossingen getest kunnen worden en dus potentieel betere
oplossingen tussen kunnen zitten, welke ook te zien in in
algoritme~\ref{alg:overzicht}. De genereerde potentieele oplossingen die aan de
\emph{GPU} ter controle aangeboden worden respecteren de boven- en ondergrens.

\begin{algoritm}
\begin{verbatim}
01: klaar=nee
02: doe
03: ..bereken potentieel minimale dominatie verzamelingen
04: ..plaats in framebuffer
05: ..als (alle pixels zijn gemarkeerd) dan
06: ....klaar=ja 
08: totdat (klaar=ja)
\end{verbatim}
\caption{evalueren minimale dominatie set}
\label{alg:overzicht}
\end{algoritm}

\subsection{Detectie algoritme}
\begin{figure}
  \centering
  \includegraphics[width=0.4\textwidth]{pasted4.pdf}
  \caption{Stempels van verschillende schaakstukken, de verschillende groottes zijn noodzakelijk om aan te geven hoe de stempel vergroot of verkleint moet worden}  
  \label{fig:stempels}
\end{figure}
Om snelle detectie mogelijk te maken, wordt er gebruikt gemaakt van een
eigenschap waar een \emph{GPU} in uitblinkt; het '\emph{stempelen}' van objecten in
een raster (welke in traditionele beeldbewerking gebruikt wordt om texturen te
maken). Elk schaakstuk heeft zijn eigen stempelpatroon zoals te zien in
figuur~\ref{fig:stempels}. Hierbij moet opgemerkt worden dat de stempels
allemaal op hun eigen manier schalen.

\begin{figure}
  \begin{center}
    \includegraphics[width=0.4\textwidth]{pasted5.pdf}
  \end{center}
  \caption{Door slim te coderen kunnen meerdere potentiele oplossingen tegelijk
bekeken worden. Hier wordt gebruik gemaakt van (a) het feit dat de ruimte groter
is dan het 'schaakbord' welke bekeken wordt en (b) een pixel gecodeerd is uit
vier onafhankele kleuren} 
  \label{fig:raster}
\end{figure}
Er zijn nog twee eigenschappen van de \emph{GPU} waar dankbaar gebruik van
gemaakt wordt, namelijk kleur en het verschil in grootte van het bord en de
geaccepteerde invoer. Door slim te combineren ---zie figuur~\ref{fig:raster}---
kan het aantal potentiele oplossingen die getest kan worden gemaximaliseerd
worden.

De individule \emph{kernels} volgen het algoritme~\ref{alg:kernel}, de test of
alle punten gemarkeerd zijn lijkt om het eerste gezicht een lus en test over
alle beeldpunten, echter de \emph{GPU} heeft specifieke instructies om dit
effienter uit te voeren.
Voor het plaatsen van de stempels moet er gegaan worden voor de grafische
equivalent van een \texttt{OF} operatie. Als een \texttt{INVERSE} operatie gebruikt zou
worden om de stempel te plaatsen zou een tweede overlappende stempel onterecht
als niet geraakt gemarkeerd worden.

\begin{algoritm}
\begin{verbatim}
01: voor elke stempels in stempel locatie
02: ..plaats stempel
03: als (alle punten gemarkeerd) dan
04: ..oplossing=ja
\end{verbatim}
\caption{evalueren minimale dominatie set door individuele kernel}
\label{alg:kernel}
\end{algoritm}

\section{Conclusie}
  \begin{figure}
  \centering
  \includegraphics[width=0.4\textwidth]{pasted6.pdf}
  \caption{
  Uitvoer tijden (logaritmische schaal) van de \emph{CPU} en \emph{GPU} gebaseerde minimale dominatie implementaties welke $y(Q_{n})$ uitrekenen. Hoe groter $n$ wordt, de beter de \emph{GPU} gaan presteren boven de \emph{CPU}} 
  \label{fig:uitvoertijd}
\end{figure}
Door het toepassen van de \emph{GPU} in het \emph{n-Queens} probeem kunnen
winsten geboekt worden zoals te zien in figuur~\ref{fig:uitvoertijd}\footnote{Gegevens direct uit \cite{CDGPU2006} overgenomen experiment niet opnieuw uitgevoerd}. 
Het toepassen van \emph{GPU} dominatie textuur technieken technieken lijkt voor dit
specifieke geval een goede vertaling van de traditionele \emph{CPU} wereld en
de \emph{GPU} wereld. De stempels bieden tevens meer vrijheden om alternatieve
'schaakstukken' te onderzoeken.
\subsection{Verder werk} 
Er zal gekeken worden of de generatie van nieuwe oplossingen ook op de
\emph{GPU} gedaan kan worden om zo het probeem van de langzame context
wisselingen op te lossen.
Verder zal er gekeken worden of de codering van de borden op nog een slimmere
manier aangepakt kan worden, in plaats van de kleur in 4 basiskleuren uit te
splitsen zouden ook de volledige 32 bits (elke kleur is 8 bit) kunnen worden om
nog meer(combinaties) van oplossingen te coderen.

\subsection{Discussie}
De claim dat de \emph{GPU} 'veel' sneller is lijkt me niet gefundeerd in de
grafieken. Beiden lijken erg dicht bij elkaar te blijven en ik zie niet waarom
dit plots veel beter zou worden bij grotere $n$ waarden.
De 'tegelmethode' van figuur~\ref{fig:raster} lijkt in theorie leuk, maar als
de $n$ groter wordt is er grote kans dat de tegels niet meer (goed) passen. Als
de $n$ groter wordt dan in mogelijke invoer is het helemaal niet meer mogelijk.



\begin{thebibliography}{2}
\bibitem[DM2003]{DM2003}E. J. Cockayne, emph{Chessboard domination
problems}, \emph{Discrete Math}, 86:1320, 1990.

\bibitem[CDGPU2006]{CDGPU2006}Nathan Cournik,\emph{Chessboard Domination
on Programmable Graphics Hardware}, \emph{ACM SE'06 March
10-­12, 2006}. Melbourne, Florida, USA
\end{thebibliography}
\newpage
\end{document}
