This page collects information about the proposed "Multicore Programming" MSc programme.

Programme structure

Weeks 1-6

Weeks 7-12

Weeks 13-24

Weeks 25-

Advanced Java for Programmers

C++ Programming

(option from any MSc)


Project Research > project preparation

Concurrency and Parallelism

Parallel Programming with Shared Memory

Parallel Architectures

Parallel Programming with Message-Passing

Existing modules common to all taught MSc programmes:

The new modules are:


There's more of this on the individual module pages above; these are the general points.

External Advisor

Here are the comments from Prof Robert Berry (Aston, formerly IBM and Visiting Prof at Kent)

Robert Berry writes...

1. Potential market for the programme

I think it is modest but growing. Multicore has emerged as the way to scale our processing power given physical constraints in scaling up single processor speeds. Visibility of multicore systems is growing through systems like PS3’s use of Cell, and this will also drive interest.

2. Curriculum content of the programme

Looks very good. Focus up front on core concepts is entirely appropriate before launching into programming for this environment. I wonder if doing Java and C++ is the best choice. This is a tough call – but C++ might be more appropriate for this type of environment … also could provide opportunity for more focus; … or perhaps C# with its stronger support for memory management. (Perhaps Realtime Java, but that’s a bit of an abomination.).

3. Does the programme content articulation/progression in an appropriate manner and at the correct level?

I’m unclear about incoming expectations. What are the prerequisites for people taking the course? Are C++ and Java delivered as if new? (there’s a comment in the conc+parallelism module that suggests this: “…students will be learning java/c++ at the same time …”. Might be asking a lot, and indeed might constrain rest of cohort if people aren’t already to a certain level of skill. A core competence in one or both languages seems to make sense as a prereq. What you’re really doing here is adding the (very complex!) parallel dimension.

Unclear as to whether the two first modules – concurrency and parallelism; and parallel architectures actually involve programming. Not sure they need to – but each module description has an identical section 18 that implies there will be. If programming is required, how will you stagger the teaching of the programming (java first, then c++) with the assessment approach for these two modules. Comes back to earlier question really on prerequisites.

4. Any other areas of note considered appropriate by the external advisor

Java and Multicore might be a difficult mix. I don’t know if Java has yet been (well) ported to exploit multicore systems; the burden probably falls more to the programmer.

In resources you don't mention the Cell development kit(s?); I know IBM put a number of such things out on Developerworks, and these have been well used in other institutions (e.g., Imperial). And of course, they apply to a technology that many students may have at home in their PS3s.

Our Response

1. Noted, though we are not sure what the long term future of the Cell processor is. However, there are a number of other interesting new architectures emerging including those in the GPGPU market as well as more conventional x86 multicores from Intel. We also have support from Sun Microsystems for this programme. Katherine Hartsell, responsible for Sun's Teaching Concurrent Computing Initiative, writes that she would "like to submit a request to our OpenSPARC group that Kent be added, and that we send you a CMT machine."

2 and 4. There are several reasons why we wish to teach the advanced Java course to the experienced programmers that this program seeks to recruit. First, it acts as a "service" module, making other options from the MSc portfolio accessible to students on this program. Second, Java permits early introduction to notions of concurrency through the JCSP library which can be used to demonstrate message-passing, some (lock-free) shared-memory and data-parallel models in the first term before exposing students to more difficult, lower level algorithms expressed through a threads and locks model. We agree with your view of the Real-Time Specification for Java (though we note the emergence of real-time JVMs that do not rely on RTSJ).

We have chosen to teach C++ for many of the reasons you have suggested (e.g. for OpenMP, TBB etc). We believe that the step from Java to sufficient C++ for the purposes of this programme should not be too great.

3. The programme spec states that entrants must have have a "first degree in CS or a closely related subject with a substantial coverage of programming and SE". The CO871 Advanced Java for Programmers is not an introductory course: students must have substantial prior programming experience. In practice, we have found that for most students their prior experience is Java; for a smaller minority it is either C++ or C# but in both cases the transition to Java is straightforward. Thus, effectively, as Prof Berry suggests, a core competence in one or both of Java and C++ is assumed.

We expect both the Concurrency & Parallelism module and Parallel Architectures module to contain some practical experience. We anticipate that any programming would be in Java. CO871 is delivered as a semi-intensive course in the first 6 weeks of the programme. Thus students' prior programming experience should be sufficient for exercises early in these two modules, and they will have completed CO871 in time for the latter half of these two modules.

4. Thank you for the pointer to the use of Cell development kits for teaching. The research group responsible for this proposal has used these for programming language implementation but it is useful to know that other institutions have used these for teaching.

Comments from Sun

Dave Dice via Tony Printezis has provided some really useful feedback:

Generally it looks like a fine course layout and is similar in form to other's that I've seen. I appreciate the general philosophy of not poisoning the student's minds with threads & locks too early.

Modules :

Useful resources

Multicore MSc (last edited 2010-09-12 17:34:04 by rej)