List of internship opportunities previously available through our CDT.
Google – DeepMind (February 2018)
Internship: Performance Engineering
This is an opportunity for an aspiring Engineer to join DeepMind’s Research team in London for a fixed period of between 14 and 20 weeks.
Our AI researchers constantly invent new models. Running these models efficiently on hardware accelerators, such as GPUs and TPUs, is often non-trivial. DeepMind’s Performance team are working on general solutions to these challenges.
Many of these problems, for example dealing with limited memory capacity or mapping computation to multiple devices, involve complex trade-offs. We believe that Machine Learning can be a powerful tool to automatically find solutions in these complex optimisation space. Interns will have the opportunity to explore these approaches within the Performance team.
Applicants should be studying for a PhD in Computer Science, Electrical Engineering (or equivalent). You should be very familiar with C++ and Python. Prior machine learning experience is desirable but not essential.
We offer an inspiring and collaborative environment and the opportunity to learn from the best in the field.
NVIDIA Research is seeking outstanding graduate students for intern positions in areas including computer architecture and compiler/microarchitecture co-design. Specific topic areas include processor architectures, memory system and DRAM architectures, resilience, and domain specific architectures such as machine learning. Interest in machine learning applications and architectures is a plus.
Past summer internships have resulted in publishable research and work applicable to student doctoral dissertations.
Competitive candidates will have a track record of research excellence, a strong recommendation from a research supervisor, excellent programming skills, and the ability to work in a team environment. Expertise in graphics architectures or applications is not required.
EPCC extends an invitation to PPar students to apply for a fully funded internship at the University of Auburn, AL, USA in order to further an ongoing collaboration.
Professor Anthony (Tony) Skjellum, Director of the Auburn Cyber Reseach Center and Lead Cyber Scientist for Auburn University, is offering to fund one internship next Summer. Professor Skjellum is interested in projects in the area of HPC or Scalable Internet of Things (IoT).
Topics suggested by Professor Skjellum include:
- fault-aware MPI
- anything new and modern for MPI – for example, MPI Sessions
- MPI + FPGA offloads
- mixing Akka/Spark/MPI for data-parallel and task-parallel computing in industry
- using MPI for Cyber Security
- Parallel algorithms for machine learning
In-person interviews will be arranged with Professor Skjellum during his visit to Edinburgh in late September. EPCC will work with potential candidates in formulating a proposal.
Amazon Development Centre (2016)
Software Development Engineer Intern (3-6 month paid placement)
We are looking for outstanding candidates for 3-6 month internships in 2016. Our internships are flexible in length to fit in with your university’s placement scheme. Our interns join agile teams at our development centre in Edinburgh, Scotland. From day one you will be working with experienced engineers, launching and growing new websites and features for Amazon worldwide.
Projects here include:
- Dynamic Merchandising – Personalised merchandising for Amazon on web, mobile and devices.
- Dynamic Advertising – Personalised advertising (web, mobile and video) on third-party publisher sites.
- Inherent Relationships – Worldwide media relationship data such as Series, Bibliography, Discography and AutoRip.
- Resilience – Inventing tools to automate root cause resolution in Amazon’s service oriented architecture.
- Automated Privacy and Trust – Automating analysis of big data for privacy and trust.
- One Amazon Tech Team – Leveraging retail data to deliver more relevant advertising for customers.
- Automated Talent Sourcing – Using machine learning and NLP to revolutionise recruiting at Amazon.
- Talent Marketplace – Inventing solutions to optimise employee talent across Amazon.
- HR Analytics Data Science Platform – Scalable, global solution to gain insights and improve talent management.
Our work is characterised by high scale, complexity and the need for invention. We offer great opportunities to work on big data, machine learning, natural language processing and high-scale, low-latency distributed systems.
- Strong object-oriented design and coding skills in Java (or equivalent languages such as C++/C#)
- Strong computer science grounding in a broad range of algorithms and data-structures
- Strong analytical and excellent problem solving skills
- Strong written and verbal English communications skills
- Scripting languages
- Design and architecture (design patterns, web services)
- Results oriented with a strong customer and business focus
- Ability to communicate and discuss technical topics with both technical and business audiences
- Innovative, flexible and self-directed, while also able to work within a team
- Ability to deal well with ambiguous and undefined problems
Time-frame: Summer 2016
Location: Waverley Gate, Edinburgh
Software Intern – Compilers (Summer & 6 – 12 months)
If you have a passion for compilers or related technologies, high performance code generation or just working on challenging projects that will be used by some of the world’s top companies, then read on!
What will I be accountable for?
The Development Solutions Group at ARM develops and markets a number of software tools such as C/C++ compilers, debuggers, simulation models and software performance analysis tools. Our tools are used worldwide by many of the leading electronic and software companies in the development of ARM based products.
The compiler development teams in the Development Solutions Group are located in our Cambridge, Manchester and Shanghai design centres and are engaged in developing toolchains for mobile, embedded, server and HPC applications. The teams are focused on providing correct, high-performance and space-efficient code generation solutions for C & C++, based on a range of technologies including the LLVM compiler infrastructure and GNU Compiler Collection.
Depending upon skills and experience, interns will work with ARM engineers on customer-facing technology, open source code bases like GCC and LLVM and/or research investigations.
What skills, experience and qualifications do I need?
The successful candidate will have completed at least two years of a University course with a significant programming and software engineering element such as Computer Science or Software Engineering.
- A passion for all aspects of software engineering both within, and outside your degree course.
- Good knowledge of the C and C++ core languages.
- Strong team-player, professional manner with good communication skills
- Proactive and self-motivated, ability to understand and solve complex, abstract problems, technically versatile, willing to be flexible and accept new challenges.
- Strong grasp of algorithms and data structures.
- Effective verbal and written communication skills.
- Experience working with different operating systems, including varieties of Linux
- Knowledge of at least one CPU or virtual machine architecture and instruction set.
- Some experience of LLVM/GNU community engagement and contribution to the LLVM/GNU toolchain codebase
- Knowledge and understanding of Java, Perl or Python.
- Understanding of the purpose and structure of compilers, assemblers and linkers.
- Awareness of techniques in compiler optimizations and code generation.
Time-frame: Start dates from April to September 2016. The internship could last for the summer or 6-12 months.
Location: Cambridge or Manchester
Building Trust in Distributed Parallel Systems
This internship will focus on investigating how to establish trust within these systems, based upon software attestation with each participant needing to securely identify itself to it’s peers. It will be based on ongoing product development and will extend existing software through research into highly focused areas.
Potential avenues are:
— System security analysis. Evaluation of protocol under development including threat modelling. — Low power software cryptography. Address some of the challenges around cryptography in resource constrained environments. — Protocol development. Extend client server protocol into a peer to peer system. — Alternative Network Protocols. HTTP is the current implementation target but for IoT other protocols are more efficient such as CoAP
The goal of the internship will be to provide actionable information back to the development teams and will almost certainly provide proof of concept software backing up any conclusions. We strongly prefer candidates who are keen to actually build solutions.
Required Skills / Knowledge / Qualifications: Secure programming, Cryptography, Network Protocol, Embedded Systems
Disney Research UK (2016)
Lab Associate Internship
A lab associate position has a short term of duration with possible extension and transition to Postdoctoral Researcher role. The researcher will build towards a publishable research outcome that involves one or more projects led by a Senior Research Scientist. These responsibilities include, but are not limited to:
- Conduct real-time rendering, real-time vision, interactive visual analytics, or design informatics research directed by and in collaboration with a Senior Research Scientist.
- Conduct advanced pipeline integration of research algorithms into production tools and workflows.
- Present research problems, plans, and results.
- Document research in internal reports, peer-reviewed publications, and patent applications.
- Work with Disney's businesses to transfer research results.
- Provide expert consulting to various business units of The Walt Disney Company
- Collaborate on development of algorithms among the areas of augmented reality, virtual reality, machine learning, deep learning, real-time parallel CPU/GPU optimization, displays and robotics.
Imagination Technologies (2016)
GPU Graphics Platforms and Tools Software Engineer (annual placement)
The successful applicant will join a team of software engineers developing low-level drivers for the family of PowerVR Graphics cores. They will contribute to design, implementation and maintenance of the software drivers for the current and next generation cores, and assist customers in enabling their new PowerVR-powered SoC platforms, including solving complex hardware and software issues.
The services platforms and tools team is part of the PowerVR software graphics group and interfaces with many other teams, including GPU compiler, OpenGL, OpenGL ES and other driver teams, hardware designers, customer facing product management teams and research teams.
The driver software that the team produces is the foundation of the graphics driver stack and has ever increasing responsibilities such as platform/OS/device/SoC abstraction, GPU scheduling, GPU memory management, synchronisation of parallel hardware and software operations, power and thermal management, and display management.
Target Capabilities and Skills
- Any knowledge of kernel and driver programming and concepts is useful
- Ability to absorb and understand complex designs in existing code
Research Engineer (summer placement)
In this role you would become one of the team that are responsible for the development and improvement of Imagination Technologies graphics.
The research group is responsible for delivering novel and innovative solutions to ensure the future success of the company. The group works with development engineers, marketing and external customers to identify research opportunities. This role will provide significant exposure to all of PowerVR’s cutting edge hardware and software technologies.
The video research team have a track record of success with numerous innovations being included in products. Projects in the team range from display technologies (e.g. de-interlacing, frame rate conversion) through to emerging technologies such as mobile computer vision and computational photography. The successful candidate will have a unique opportunity to participate in the influencing of the direction and type of future products developed by the company.
Target Capabilities and Skills
- Ability to deliver results to deadlines.
- Excellent personal organisation with effective prioritisation and time management skills.
- Commitment to engage actively with the team
- Ability to identify problems and provide innovative solutions
- Ability to understand and communicate complex ideas
Physical Design Engineer (summer placement)
A unique opportunity to experience work within a leading edge physical design team. The physical design team is part of the System on Chip (SoC) division on Imagination Technologies. The team is responsible for creating SoCs from Imagination's world-leading IP portfolio, including graphics, CPU, communications and video. Working with industry-leading processes and foundries, we create highly complex SoCs which push the IP to limits of power, performance and area.
Target Capabilities and Skills
- Digital electronics knowledge
- Knowledge of silicon design principles
- Understanding of physical design methodologies
- Keen interest in physical design techniques
Oracle Labs (2015-16)
Parallel Runtime Systems
We are working on a parallel runtime system, focused particularly on high-performance “big data” applications written in Java. The main problem we are trying to address is exposing control over storage allocation and placement in a way that combines the low-level control in systems languages such as C/C++, with the guarantees expected when using a high-level language (e.g., no use-after-free bugs, bounds-check failures, etc.). We hope that the work will lead to research paper submissions over the coming year. We may have further positions available in related areas – e.g., around OS / runtime system interaction, and scheduling parallel workloads on shared infrastructure.
Required Skills / Knowledge / Qualifications: Experience with parallel programming and/or language implementation. We are working primarily in C++11 and in Java.
Anonymization of relational data sets for workload characterization
Oracle Labs is seeking an intern to work on anonymization of relational data sets for workload characterization.
Commercial data sets and their associated queries are a valuable source of information when trying to characterize the behavior of databases; they often exhibit behaviors under-represented by benchmarks. However, the information contained in these data sets is sensitive and cannot be distributed widely.
This project seeks to develop anonymization software which can replace the individual data in such a data set with randomly-generated data while preserving the behavior of the associated queries over chosen metrics.
Required Skills / Knowledge / Qualifications: The candidate should have a good working knowledge of statistics and an understanding of the basics of workload characterization. Experience with relational databases is a plus.
Location: This project would be based in Redwood Shores (California).
Samsung R&D Institute UK (2015-16)
Software Engineer Intern
SRUK’s research interns work closely with our development teams on current projects, and are involved with all aspects of the research and development. This option is ideal for those who are interested in continuing their career in development activities within the ICT industry and want to gain valuable research experience.
Working as a Software Engineer Intern, the job’s main purpose is to contribute toward the development and optimisation of Samsung’s Mobile and TV devices.
You will be exposed to all, or part, of the software development cycle (from Analysis, Specification, Designing, Documentation, Implementation, Verification and Commercialization Support) for a given area of software development.
Required Skills and Knowledge: You will currently be studying towards or have completed a PhD.
Cirrus Logic (2015-16)
Engineering Intern - Verification
An exciting opportunity has arisen in the Verification Team for the role of an interim Verification Engineering Intern. The successful applicant will contribute towards improvements in methodology within the Cirrus Logic team.
The role mainly requires expert level scripting knowledge and an ability to understand new concepts and implement it. You will be working within a highly competitive team that works on highly complex audio codec chips and has immense experience in latest verification methodologies, tools and technologies. You will be trained sufficiently to understand the process and scope of work and will work with some of the best verification experts in the industry and mentored by one of them.
- Object oriented programming concept
- Experience with unix/linux OS
- Strong scripting (ruby, perl, python or other scripting languages) and C/C++ skills
- Dynamic web page creation with PHP
- A high-level of problem solving capability
- Task scheduling and estimation
- Knowledge of systemverilog, verification methodologies like UVM,OVM is beneficial but not mandatory
- Experience of any bug reporting/tracking and revision control systems.
- Knowledge of HDL (Verilog, VHDL)
- Experience of simulators like ncsim,questa,vcs etc…
Duration: Expected to last for 2 months
Location: Edinburgh, UK
Intern Software Engineer: (ComputeCpp Perf & Opt/m)
The intern will be working on extending and evaluating the internal benchmarks of ComputeCpp, which currently consist of two kernels from the Rodinia benchmark, Parallel STL sample code, demo code that can be used as a benchmark and ComputeCpp micro-benchmarks.
While working on this project, the intern will provide regular feedback to the ComputeCpp team on performance problems and potential optimizations. If a potential optimization opportunity is identified and approved by the ComputeCpp team, the intern can create a branch from the repository and implement it, in order to provide proof of the benefits of the implementation.
The final deliverable of the internship will be: A repository with a set of SYCL benchmarks. Improved microbenchmark coverage. A report with suggested optimizations and their impact on the runtime.
- Knowledge of C++
- Some GPGPU programming (CUDA or OpenCL)
- Parallel programming experience
- Some experience measuring performance and analyzing traces.
- Knowledge of source control systems
- Ability to report bugs on software systems that involve compilers and runtime libraries, and work around them while a fix is forthcoming.
- Knowledge of C++ and C++11/14 features (templates, overload, enable_if, smart pointers, etc)
- Experience porting codes to CUDA/OpenCL
- Understanding or interest in modern heterogeneous architectures.
Duration: Six months
Intern Software Engineer (Polyhedral)
The internship role will be to assess the potential of applying Polyhedral techniques to SYCL or OpenCL by creating a prototype tool to explore whether it is feasible to improve performance, and performance portability. The intern will undertake a prototype integration of the open-source "Polly" tool into the set of compiler passes within a Codeplay tool, investigate how the Polyhedral model interacts with the SYCL or OpenCL parallelism model, and use and implement Polyhedral transformations to improve performance and performance portability.
There are trade-offs that can be considered for whether to undertake the work within ComputeCpp, and thus target SYCL directly, or within ComputeAorta, and thus target both OpenCL and SYCL. These trade-offs can be considered by the intern and their supervisor during the initial phase of the internship. Test cases to evaluate performances can be taken from ComputeVisionCpp™ or Eigen for SYCL, or from PolyBench/GPU for OpenCL.
The work could potentially lead to a publication.
- Good C++ knowledge, specifically C++11 and templates.
- Experience with compiler or language runtime implementation.
- Knowledge of polyhedral compilation techniques.
- Working knowledge of Windows and/or Linux tool chains.
- Knowledge of OpenCL and/or SYCL
- Implementation experience for polyhedral compilation techniques, particularly using Polly.
- Experience with LLVM.
- Working understanding of CMake
Duration: At least three months, which will allow time to complete an initial investigation.
Intern Software Engineer (Computer Vision)
LPGPU2 is a research project focusing on three main areas: Computer vision, standardisation of performance and power profiling. Actual implementation of a profiler: As an LPGPU2 Intern you would be working the development of a computer vision library that can work in embedded systems such as robots. Students in this area can hopefully bring in new ideas as well as improving our team-size for computer vision.
The Intern would be mostly working on the stages of a machine-vision pipeline closest to the camera. This stage is usually called an "ISP". The stage adapts the image from the camera for different lighting conditions, does lens correction, denoise and converting the coloured pixels from the sensor to an RGB image. This software ISP needs to be high-quality so using highly accurate algorithms is important here.
The Intern must be able to program in C++ and understand the basics of images or machine vision, such as colour spaces, lighting and Bayer patterns. Understanding GPGPU programming, such as OpenCL or CUDA, would also be very useful.
- Working knowledge of C and C++
- Working knowledge of debuggers
- Working knowledge of Linux and/or Windows operating environments
- Strong self-motivation, and a willingness to learn new technologies on the job
- Excellent communication skills, both verbal and written
- Ability to debug code effectively
- Working understanding of build systems and compiler tool-chains
- Working understanding of CMake
- Understanding of assembly languages
- Understanding of object file formats
- LLDB Knowledge
- LLVM Knowledge
- Understanding of the different stages within a compiler
- Understanding of Memory Management styles
- Understanding of code security/exploit prevention
- Understanding of HLSL/GLSL/Other shading language environment
- Understanding of OpenCL/CUDA/Other GPGPU environment
Duration: The length of the proposed internship is flexible, ranging from 3 months over the summer to a year's placement.