\chapter{Progress Report}\label{Progress Report}

This chapter outlines the current state of our research in relation to the aims outlined in Chapter \ref{Introduction}.

\section{Literature Review}

We have examined a range of literature that can be broadly classed into three different areas:
\begin{enumerate}
	\item Rendering Vector Graphics
	\item Representations of Vector Documents
	\item Floating Point number representations
\end{enumerate}

In summary, we have found:
\begin{itemize}
	\item Rasterisation of Vector Graphics is non-trivial but well understood
	\item Traditionally rasterisation has been performed on the CPU and rendering on a dedicated GPU; current interest is in techniques for utilising the GPU directly to rasterise vector graphics.
	\item The popular standards for document formats including PostScript, PDF, HTML, SVG require IEEE-754 binary32 precision
	\item Fixed precision floating point numbers make a trade off between precision and range
	\item IEEE-754 is widely used although there are instances of languages or processors which do not conform exactly to the standard
	\item GPUs in particular may not conform to IEEE-754, trading some accuracy of operations for performance
\end{itemize}

\section{Development of Testbed Software}

We have produced a basic Document Viewer capable of rendering simple primitives under translation and scaling. OpenGL 3.1 is used to interface with graphics hardware. This software has the following features:
\begin{enumerate}
	\item A type name \verb/Real/ is used in place of the standard floating point types \verb/float/, \verb/double/ or \verb/long double/. This type name can be redefined to refer to one of the standard types or a custom real number representation, allowing us to easily recompile and test our software for different representations.
	\item Screenshots can be overlaid on top of each other to get a pixel comparison of the graphical output of different versions of the program
	\item Test documents can be loaded and saved so that we can compare different versions of the program on identical inputs
	\item Transformations can be performed on either the GPU or CPU
	\item Performance of rendering can be measured
\end{enumerate}

We have found the performance of coordinate transforms on the GPU to be far superior to the CPU. However, at large enough scales it becomes apparent that the GPU is performing operations at a lower precision than the CPU. See Figure \ref{}.



\section{Floating Point Precision}

Algorithms for floating point arithmetic may be implemented in software (CPU) or on dedicated hardware (FPU). We have made progress towards both approaches. 

An open source Virtual FPU implemented in the VHDL language has been successfully compiled and can be substituted into our testbed software in place of native arithmetic running on the CPU. The timing diagram for this FPU throughout the execution of test programs can be extracted. Currently the virtual FPU is restricted to 32 bit floats and the square root operation is unimplemented.

Mainly motivated by producing Figure \ref{minifloat.pdf} we have also implemented functions to convert arbitrary real numbers (which may themselves be IEEE-754 floats) to and from a fixed size floating point representation of our choosing. We have not implemented any operations for floating point arithmetic using these representations.

By using the functions to convert real numbers to variable precision floats as an interface for the virtual FPU, we hope to illustrate the limitations of floating point arithmetic more clearly than would be possible using IEEE-754 binary32 as is native to the C and C++ languages.

\subsection{Prototype Document Formats}

Our testbed software is capable of reading primitive attributes from either a binary file or XML plain text file. Our format is closest to the Document Object Model, although there is currently only one generation in the tree as no primitives can contain other elements as of yet.

If time permits, we plan to extend our XML format to cover a subset of the SVG standard. This may allow us to compare the rasterisation of an SVG using our own software and traditional software relying on IEEE-754 floats.


\section{Version Control and Backup of Work}

Git is a distributed version control system widely used in the development of open source software\cite{}. All rescources created for or used by this project have been placed in git repositories on several servers. The repositories are publically accessable at \url{http://git.ucc.asn.au}, \url{http://szmoore.net/ipdf} and \url{david's website probably I guess}\footnote{These are all actually on the same filesystem but it sounds impressive anyway}

\section{Timeline}

Deadlines enforced by the faculty of Engineering Computing and Mathematics are \emph{italicised}. Tasks completed as of the submission of this report are struck through. \footnote{David Gow is being assessed under the 2014 rules for a BEng (Software) Final Year Project, whilst the author is being assessed under the 2014 rules for a BEng (Mechatronics) Final Year Project; deadlines and requirements as shown in Gow's proposal\cite{proposalGow} may differ}.

\begin{center}
\begin{tabular}{l|p{0.5\textwidth}}
	{\bf Date} & {\bf Milestone}\\
	\hline
	$1^{\text{st}}$ May & Testbed Software (basic document format and viewer) completed and approaches for extending to allow infinite precision identified. \\
	\hline
	? May & Draft Progress Report and Literature Review \\
	\hline
	$26^{\text{th}}$ May & \emph{Progress Report and Literature Review due.}\\
	\hline
	$9^{\text{th}}$ June & Demonstrations of limitations of floating point precision in the Testbed software. \\
	$1^{\text{st}}$ July & At least one implementation of infinite precision for basic primitives (lines, polygons, curves) completed. Other implementations, advanced features, and areas for more detailed research identified. \\
	\hline
	$1^{\text{st}}$ August & Experiments and comparison of various infinite precision implementations completed. \\
	\hline
	$1^{\text{st}}$ September & Advanced features implemented and tested, work underway on Final Report. \\
	\hline
	TBA & \emph{Conference Abstract and Presentation due.} \\
	\hline
	$10^{\text{th}}$ October & \emph{Draft of Final Report due.} \\
	\hline
	$27^{\text{th}}$ October & \emph{Final Report due.}\\
	\hline
\end{tabular}
\end{center}

