Multicore Programming (Cavium Consortium)
For the last a couple of decades, software developers enjoyed an increase in application performance due to a doubling of the number of transistors in processors every couple of years, in accordance with Moore's Law. The performance gain resulted from increasing clock speeds. But, due to power concerns, the performance gain is limited by the thermal budget and is no longer practical.
The future of processors’ architecture designs lies in multicores, i.e., processors with simpler cores running at lower frequencies. Today, all computer systems, from embedded devices to high-end servers, are being built with multicores. Unlike earlier generations of hardware evolution, this shift has a major impact on how software is designed and developed. Developers will have to learn how to properly design their applications to utilize multicores parallelism.
Over the past several years, every major microprocessor manufacturer has introduced processor chips with multiple cores, with dual and quad core processors for desktop and laptops, and over a hundred cores available in some Graphics Processing Units. The industry now agrees on this concept and they are investing on it.
With introduction of GPGPUs (General Purpose Graphics Processing Unit) and SoCs (System on Chip), heterogeneous architecture emerged where there are specialized processing units that vary in function and capabilities. To fully utilize the performance and power saving potential of a heterogeneous architecture, the SW stack needs to be aware of how to partition and distribute the threads among them. Several programming languages and techniques are now developed to address these needs.
The introduction of multicore chips into the computing market has created a revolution in the software industry. To benefit from increases in hardware performance, software must be parallel. In the last a couple of decades, application software developers easily rode the wave of higher clock frequencies to faster performance.
Multicore processors have become the mainstream computing platforms. Programs developed with a single thread (or a uniprocessor) in mind can only exploit one core. Therefore, to fully harness the potential of multicore processors, we need to develop multithreaded programs. The expectation is that the numbers of cores per chip will roughly double every two years while processor clock speeds will remain relatively flat. This makes parallel programming a concern for the entire computing industry. It is a challenge.
Researchers in industry and academia are exploring many different multicores hardware design choices; most agree that software for execution on multicore processors is the major unsolved problem. Opportunities to address the problem span multiple levels of the software stack. With the advent of multicore processors, improvements in application performance will depend upon making effective use of increasing levels of coarse-grain parallelism. As a result, parallel programming has suddenly become relevant for all computer systems.
The expectation is that number of cores per chip will roughly double every two years while processor clock speeds will remain relatively flat. This makes parallel programming a concern for the entire computing industry.
The program will provide an introduction to parallel programming with a focus on the techniques that are most appropriate for multicore architectures and the use of parallelism to improve program performance.
The program also addresses how to utilize the increasing hardware capabilities of multiprocessor computer architecture's high performance computing platforms for software development. It describes the differences between single core and multicore systems, and addresses the impact of these differences in multi-processor computer architectures and operating systems.
Additional topics include program performance analysis and tuning; task parallelism; synchronization strategies; shared memory access and data structures; and task partition techniques. The program will focus on the entire spectrum of the software stack as it applies to multicore architectures, including libraries, tools, programming languages, compilers, runtime systems, and OS kernel. The program encourages hands-on experience with projects selected by the student and faculty. Students will have a variety of multicore architectures available for their class projects.
Heterogeneous architectures will be addressed through the usage of GPGPUs, and SoCs that include special media and graphics IP blocks.
The purpose of this program is to teach the next generation of software developers and hardware engineers to develop exciting new applications that can take advantage of on-chip parallelism. The program goal is for the students to study multicore processor architectures, the implications of hardware designs, software challenges, and emerging technologies relevant to hardware and software for multicore systems.
Course contents Overview
This course will provide an introduction to parallel programming with a focus on techniques that are most appropriate for multicore architectures and the use of parallelism to improve program performance. The topics of the course include performance analysis and tuning; data and task parallelism; synchronization techniques; shared data structures; and load balancing. The course will be a hands-on project course, with 4-5 programming projects, including a final project selected by the student.
Below, it is a tentative description of the program but not in detail. The pre-requisites will be taught as a ramp course to the whole cohort. The objective of the ramp course is to have the whole cohort on the same level.
Hardware aspects of multicore
Software aspects of multicore
Academic Steering Committee Members
Program Learning Objectives
To provide the students with the knowledge and design experience of a multicore architectures and programming. More specifically to:
Multicore architectures and programming are one of the hot new hardware and software developers jobs identified in a recent industry study conducted by several magazines. If you are creative and consider the world of computers your future, an exciting and rewarding career may be waiting for you in this dynamic field.
On completion you will be equipped with the skills to undertake a role as an application developer. This program offers a route into a rapidly-growing diverse industry which covers a range of applications from business to entertainment and advertising. As the industry continues to expand, it requires skilled practitioners. Through developing a real multicore application (or range of applications) you will be able to demonstrate both academic and practical skills.