Multicore Programming (Cavium Consortium)

Overview

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.

Program Description

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

  • Symmetric multicore architecture and design options

  • Heterogeneous architecture

  • Coherency protocol

  • Synchronization

  • Memory sharing

  • Multicore vs. multi-threading

  • Performance evaluation and tuning

  • Validation of multicore system

Software aspects of multicore

  • Programming languages and tools to support multicore systems

  • Scheduling and load balancing

  • Multi-processing applications to improve performance

  • Multicore programming pitfalls and program correctness

  • Benchmarks

  • Virtualization

Prerequisites

  • OS fundamentals

Academic Steering Committee Members

  • Dr. Ahmed Hambaba, San Jose State University
  • Dr. Thuy Le, San Jose State University
  • Dr. Moenes Iskarous, San Jose State University
  • Jim Ready, Cadence Design Systems
  • Raghib Hussain, Cavium Networks
  • Shubu Mukherjee, Cavium Networks
  • Markus Levy, Embedded Microprocessor Benchmark Consortium
  • Shay Gal-On, Embedded Microprocessor Benchmark Consortium
  • Ram Subramanian, Xilinx
  • Eyal Barzilay, MIPS Technologie

Program Learning Objectives

To provide the students with the knowledge and design experience of a multicore architectures and programming. More specifically to:

  • To familiarize students with multicore architectures such as private and shared cache architecture, inter-core communication.

  • Understand the concept of parallel computing

  • Learn parallel computer architectures with multi-processor and multicore

  • Master parallel programming techniques

  • Gain hands-on experiences of applying parallel programming to achieve performance gains from multi-processor and multicore computer systems. The knowledge can be directly applicable to daily works in both commercial and defense industries.

  • To familiarize students with the fundamentals of multi-threaded programming, OpenMP, Pthreads, task and data decomposition etc.

  • To train students with practical multicore programming skills on real multicore processors.

  • The students should understand challenges of using heterogeneous multicore architectures, specifically the challenges that are due to architectural properties, language and operating system support.

Future Career

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.

For Pre-Qualification Apply Now

Application Information
Admission Requirements
Frequently Asked Questions

Program Schedule

Contact Information

General Inquiry
Phone: 408.924.3968
engineering-techmart@sjsu.edu

Paul Schindler
Program  Specialist
Phone: 408.924.7033
paul.schindler@sjsu.edu