Many-Core Programming: How to Go Really Fast Without Crashing
by Dr Alastair Donaldson
Software must be reliable, working well enough, enough of the time. Software also needs to be efficient if it is to be useful. In some domains - robotic surgery, or self-driving cars, to name two examples - software needs to be both very efficient and very reliable. Due to the wide range of devices on which software now runs, software portability is also highly desirable.
Unfortunately, these three requirements - reliability, efficiency and portability - are often at odds with each other. This is particularly the case in the world of "many-core" architectures, which use large numbers of processing elements to compute results in a highly parallel fashion. Many-core architectures can be used to accelerate software so that it runs very efficiently, and are present in every modern
desktop, laptop, tablet and smartphone. Many-core programming languages are usually low-level, providing the "close-to-the-metal" capabilities needed for high performance. Unfortunately, this makes it difficult to write portable many-core software, and the difficulty of low-level programming means that it is easy to accidentally introduce subtle errors into an application. This has led to an
interest in higher-level languages that offer better portability and reduce the scope for programmer errors, but which must be "compiled" down to lower-level forms. While appealing, such languages lead to layers of abstraction, and reliability suffers due to errors in translating code across abstraction layers.
Introduction and presentation of awards: 18.30-19.00
Optional buffet/drinks reception: 20.30-21.30