Paul Kelly: Undergraduate research opportunities in Software Performance Optimisation
We are looking for up to three students to spend the summer working in the Software
Performance Optimisation research group.
To get an idea of what the research group does, have a look at
The objective is to involve you in our research work. A successful UROP project should
lead to you being a coauthor on a published paper, and/or being responsible for
an open-source software release.
Our criterion for selecting you is that you need to be able to get
stuck into very complex software, and make it work.
How to apply:
If you're interested, please send me an email with a very short explanation of your main technical
achievements, and the research area you're most excited about - and we'll fix a time to meet.
Specific project ideas include:
Component-based scientific computing:
- Evaluate a tool which we are developing for optimising the performance
of a distributed Java application at run-time; collect a suite of
benchmark applications which exercise the tool and measure how well
it works (and if it doesn't, figure out why).
- Build a tool for analysing the performance of distributed Java programs
- Build a tool for making sure that when you distribute Java software
components, the users only assemble them into configurations which
are likely to work
- Build a run-time specialiser for Java, which optimises programs
by specialising them to the context in which they are being used
- Build a program generator which automatically finds the fastest
possible implementation of a user-specified numerical loop.
Study how to choose the best execution order (tiling),
how to vectorise (using MMX, 3DNow etc), and how to organise
storage - and how to combine all these automatically to fit
the user's problem to the machine they have.
(This is based on the TaskGraph library, see
- Build a tool for combining TaskGraphs (see above) to yield the
best possible implementation of a sequence of pre-optimised
- Evaluate these ideas, eg in visualisation of fluid flow or
in an adaptive mesh refinement solver
- Build an event-driven simulator of a wide-area network out of commodity Linux software.
Model how routing information is propagated, how type-of-service (TOS) information is
used to provide differentiated services. Validate. Simplify.
I have enough money for at least a couple of good students so if you
know anyone else who might be interested, please send them to me.
- We have developed a tool for on-the-fly instrumentation of the Linux kernel.
Build a GUI for it, add data analysis, apply it to some interesting Linux
performance issues, extend it to work on user-mode code, multiprocessors, etc.