JACK WHITHAM PhD MEng
Professional Activities - Publications - Software - Articles
   
       
    Home -> Professional Activities    

 
Photograph of Jack Whitham
Professional Activities
An overview and a detailed list of my recent activities at work.
Publications
A list of my peer-reviewed academic publications; most are available for download.
Software
Software written by myself, not necessarily work-related.
Articles
Written works that are not formal publications.
 

On this page, I have attempted to list all of the work I have been involved with at the University of York in the last year or two. My curriculum vitae gives a concise summary that omits most of the details, but covers a longer period of time. This page is organised by category as follows:

 
   
Research work. Writing papers and research reports.
 
Membership of professional societies. Learning to use tools and languages.
 
Software implementation skills. Hardware implementation skills.
 
Reviewing papers by other people. Teaching undergraduates.
 
Designing systems to support experiments. Presenting work.
   
 

Research work

My research looks at improving the timing predictability of computers. Modern machines are fast, but because of the design decisions that permeate both software and hardware, it can be difficult to quantify exactly how long an operation will take. This is a problem for
real-time systems, where it's important to be able to show that computations will be completed on time.

In my research, I'm trying to find new ways of building computers to maximise guaranteed rather than average performance. I advocate an evolutionary approach to this problem, looking for changes to existing methods that are as simple as possible.

To date, I've completed a PhD thesis, for which I implemented a predictable CPU design. The predictable CPU was able to run accelerated sections of code called "traces"; although traces have been understood for some time (they underpin VLIW research), this was the first time they had been applied to allow timing analysis of out-of-order code execution. Some of the assumptions made by this work were addressed by my subsequent work on "virtual traces", which allow the use of any CPU core rather than requiring a specific custom design. However, some restrictions must still be applied to the core in order to support the paradigm.

My intepretation of the results I've found so far is that data accesses (the effects of load and store instructions) are the most significant problem for guaranteed performance. Although modern computer memories are very fast, they are slower than current CPUs, and worse, there is a high latency for each access, because of the time taken to send a request along the bus and receive an answer. This means that load and store instructions can be blocked for long periods of time.

The most successful solution to this problem is the data cache, but caches are inherently unpredictable because their behaviour depends on recent accesses. A cache can service most accesses, but not all, and this is a problem for guaranteed performance. That doesn't mean caches are useless for real-time systems, since methods do exist to analyse their behaviour, but such analysis is not able to classify accesses precisely; rather, accesses are classified as "cache miss no more than X times out of Y", and some must be classified as "don't know". While useful, this might be inadequate for a fully predictable system, because the possible interactions between the cache and other CPU components aren't captured, and understanding those interactions is necessary to compute the worst-case behaviour.

As an alternative to caches, scratchpads are far more predictable, but unfortunately it is difficult to choose which data objects should be placed in scratchpad. Programs tend to create space for data objects dynamically (during execution), making offline timing analysis difficult. However, some preliminary steps have been taken by others.

My research tells me that (a) the data scratchpad allocation problem needs to be solved, and (b) the solution will also help us to resolve some of the data dependences that can exist within a program offline. These are currently handled dynamically (through memory dependence prediction) and this is a source of unpredictability.

The solution may help improve the predictability of multi-core CPU systems, and could also inform some of the design decisions made within such systems, since the performance of multi- and many-core systems is limited by memory accesses, and the current solution of heuristically-controlled memory systems is potentially wasteful of both time and energy.

Writing papers and research reports

Technical writing is a required skill for researchers, and I get a great deal of practice in my work. My publications page has examples of my peer-reviewed papers. The following list gives all of the substantial documents I have written recently, whether published, unpublished or incomplete. Earlier work is listed on my publications page.

Membership of professional societies

I am a full member of the
IEEE and an associate member of the IET.

Learning to use tools and languages

One of my strengths is an ability to learn to use new software tools and programming languages rapidly. I am already familiar with a wide variety of languages and tools, including: However, I am always keen to learn new things. Recently, I have also been learning about:

Software implementation skills

I often need to write programs for my work; I write so many short programs that it would be impossible to list them all here (although I can make some of them
available online). Here is a list of software engineering projects that I have led or contributed to.

Hardware implementation skills

During the course of my work, I have designed both "soft" hardware (which exists in an FPGA in the form of an
IP core) and physical hardware on prototyping boards. I have also modified free IP cores from Opencores, and built Linux and uClinux systems using Xilinx IP cores. Here is a list of some of the work I've done.

Reviewing papers by other people

I have reviewed papers for various leading real-time systems conferences, including:
I have also reviewed papers for the Elsevier journal Microprocessors and Microsystems.

Teaching undergraduates

I have worked as a teaching assistant at the University, helping undergraduate students with exercises and laboratory work. The courses I have assisted with include:

Designing systems to support experiments

Aside from
my PhD thesis, the largest system designed by myself is the new generation of "virtual lab" project, which will support teaching and research. During the design process, I considered: I decided to implement the simplest valid solutions for all of these problems. Most are solved by avoiding assumptions about the usage of the system; the idea is that application-specific adaptations must be applied by the user (e.g. using reference designs) rather than being enforced by the virtual lab design itself. To provide multiple sessions at low resource cost, I wrote a single-threaded server application with a "select" system call as a dispatcher. For security, the unmodified SSH protocol is used. The simple design also helps to assure reliability, and support for automated experiments and tests provides a way to test reliability over a long period of time.

Presenting work

I have presented most of my
publications to audiences at conferences and workshops. I have also given several presentations for the Real-time Systems Group at York, including thesis seminars. My presentation tool of choice is Beamer, but I have also used Powerpoint. Most of my presentation slides are available for download.


       
  Copyright (C) Jack Whitham 1997-2008