Internship Case Studies
Learn about internships undertaken by our students in the past.
Ludovic Capelli (joined the CDT in 2016)
Internship at the National Institute of Informatics: Parallel Processing of Graphs using Vertex-Centric Programming
October 2017 - April 2018, Tokyo, Japan
Ludovic developed a vertex-centric framework named iPregel, leveraging combiners and exploiting in-memory storage with shared-memory parallelism. The work achieved in this internship resulted in a paper accepted for publication at the 11th International Workshop on Parallel Programming Models and Systems Software for High-End Computing.
Chris Cummins (joined the CDT in 2014)
January-April 2018, Mountain View, CA
Chris has created a representative benchmark of Google’s Protocol Buffer usage and worked in the Google Wide Profiling team to synthesise benchmarks for Google compute. The project involved company-wide workload characterization through to datacenter-scale low level performance analysis of profiles and hardware counters.
Codeplay internship: Eigen Library Interface Extension to use SYCL
March – September 2016
Eigen is an open-source C++ template library for linear algebra computation. It is a well known and widely used library in the HPC community, as one of its main advantages is that it is supplied completely as header files with a very generic C++ interface, allowing a lot of flexibility. Its adoption by the scientific community has led the Eigen developers to explore the potential of GPGPU programming and the performance that it can deliver to linear algebra computations in this library. This initiative has started in one of their unsupported features, an interface for performing tensor computations on GPGPU devices. There is already a tensor interface supporting CUDA under development.
The aim of this project is to work on the interface developed currently by the Eigen community, in order to modify and extend it to work with open standards like SYCL™ for OpenCL™, allowing a broad spectrum of compute-capable GPUs to be utilised. There is already a proof of concept implementation that adds SYCL support, using the existing Eigen interface for tensor evaluation. During this project, the student will have the opportunity to work on a newly developed and interesting feature of this open-source project, with the intention of proposing an interface that will enable SYCL (and/or any available high-level libraries supporting it) to support features that are needed for a variety of Eigen modules.
I will be developing a research prototype for compile time scheduling of expression trees on GPUs and FPGAs. This project gives me a fantastic opportunity to contribute to future standards for heterogeneous parallelism, and has far reaching applications from Google’s TensorFlow to vision processing.
Adam Harries (joined the CDT in 2014)
Codeplay internship: Parallel STL Student Intern
June – September 2016
There is growing interest in the C++ and Heterogeneous Programming communities in providing natural ways of exposing parallel programming in C++. Various libraries exist in an attempt to cover this functionality, such as TBB, Bolt or Thrust, and a proposal to standardise those libraries via an extension to the current Standard Template Library (STL) has been submitted to the C++17 standard (N4505). Various implementations of this working draft have been proposed, like the ParallelSTL from Microsoft.
The aim of this project is to provide an implementation of this working draft using SYCL™, the Khronos™ C++ abstraction layer built on top of OpenCL™. A partial implementation is already open-sourced and maintained by Codeplay, with feedback from a growing community of users. Adam worked on the public Khronos SYCL ParallelSTL implementation, completing the list of algorithms proposed by the Parallelism TS proposal for C++17.
Stan Manilov (joined the CDT in 2015)
Google internship: Software Engineering Intern
3rd August 2015 – 6th November 2015
The internship involved developing a compiler for an IDL (interface definition language) from scratch. The language is used to describe the interaction between Dart and native mobile languages like Java (Android) and Objective-C (iOS). The main goal for the compiler is to produce informative error messages, should compilation go wrong, and to be fast enough so that it can be embedded in a “Live Programming” environment. It was finished within the time scope of the internship and is now distributed as part of the Fletch VM.