I have labelled the projects as either software development or research based. In most cases the size of the projects can be adapted to fit either 6, 12, 18 or 24 credit points. Some of the projects will involve co-supervision with other researchers.
In recent years multiprocessor and/or multicore systems have become increasingly popular. All these systems have a number of different caches. Cache coherency is the policy that is used to ensure that there is a well defined top copy of any data item that is stored in one or more of the caches. A number of different cache coherency protocols exist including, for example, the MSI, MESI and MOSI protocols. The objective of this project is to develop a graphical visualization tool that can be used to illustrates the operation of cache coherency protocols on multiple caches machines and the subtitle differences between the different schemes.
In this project you will gain a good understanding of modern computer architectures and cache coherency. You will need to consider how to create input for your system (instruction streams). You will gain skills in the development of a graphical user environment.
This is potentially a big project, but there is considerable flexibility to scope out something that is achievable given the credit point weighting you have assigned to your project work.
In this project you will gain a good understanding of numerical computing and some detailed knowledge about a specific application area. In the first instance it is not envisaged that you will write code for the graphics card but this is not excluded.
This is an open ended project, for which the scope can be adjusted depending on the credit point weighting. There is some existing work in this area, but mainly for isolated numerical kernels.
Tracking this development there has been a number of groups developing programming environments that can exploit the GPU for general computations including Brook and Sh. The former is built on top of C while the latter is built on top of C++. Alternatively it is possible to program the GPU more directly using OpenGL.
The goal of this project will be develop a number of molecular science kernels to run on the GPU. Careful consideration will be given to both the accuracy and speed of the GPU.
There are three components to our work in this area. i) the application ii) monitoring and modifying the application in response to the environment, iii) making decisions based on the current state of the system. There is scope for various projects in all three areas. Currently we have been looking at either using DynInst or LLVM to control the behaviour of a running code. DynInst dynamically modifies a running binary, while LLVM stands for low level virtual machine and is a similar concept to a Java virtual machine (but not limited to Java code). For decision making we have been exploring simple reinforcement learning techniques.