Kevin Hammond leads the functional programming research group. His research interests lie in programming language design and implementation, with a focus on parallelism and real-time properties of functional languages, including modelling and reasoning about extra-functional properties. In total, he has published around 100 research papers, books and articles, and held over 20 national and international research grants, totalling around £11M of research funding. He was a member of the Haskell design committee, co-designed the Hume real-time functional language, and is co-editor of the main reference text on parallel functional programming. He coordinated the ParaPhrase project, a 3-year EU research project that aims to develop new refactoring technology for Erlang and C++ programs, targeting heterogeneous parallel architectures. Kevin is a keen hill-walker, whisky connoisseur and enjoys early music.
Understanding and controlling software energy usage is an increasing concern in many settings. We measure and correlate the energy usage of several parallel Haskell programs against execution time and other runtime system (RTS) metrics, produced using the standard Haskell compiler, GHC. We use these results to construct energy models and relate the predictions that we obtain to measured results from actual parallel executions. Our results show that we can build generic energy models for a specific parallel architecture that have good prediction ability for a number of parallel Haskell programs.
This paper presents semi-automatic software refactorings to introduce and tune structured parallelism in the sequential Erlang code, as well as to generate code for running computations on accelerators such as GPUs. Our refactorings are based on the L APEDO framework for programming heteroge- neous multi-core systems (comprising a mixture of processor types) in Erlang, which comprises our Skel library of parallel skeletons for Erlang, extended with a set of hybrid skeletons that contain components for different processor types and the Wrangler refactoring tool. Wrangler is extended with novel refactorings for i) introducing parallelism; ii) shaping sequential and parallel applications; and, iii) generating Erlang code to offload and schedule computations on different processors. We demonstrate, on four realistic use-case applications, that we are able to refactor sequential code and produce heterogeneous parallel versions that can achieve significant and scalable speedups of up to 220 over the original sequential Erlang program on a 24-core machine with a GPU.