Executing an application on a multicore processor can improve performance by an order of magnitude or more but poses daunting programming obstacles. First, execution needs to be parallelized across multiple processor cores and synchronized when necessary. Second, data accesses that assume an implicit cache need be converted into efficient explicit on-chip memory management to keep up with improved processing speed. Compilers that attempt to fully automate this transition suffer from generally poor and always unpredictable results and lack the transparency that enables a programmer to compensate when the compiler fails. Most often, this transition is performed manually by expert programmers. Hand-mapping to a multicore-processor is time-consuming, error-prone, and requires a deep understanding of the target hardware; it is a considerable risk for a system developer.
Stream programming is a practical approach to overcoming these challenges that involves a partnership between the programmer and the compiler. The programmer transforms performance-critical loops, and only those loops, into an abstraction that the compiler can effectively map to a multi-core processor. The programmer converts such loops into special functions called kernels. Code inside a kernel is implicitly data-parallel and confines data accesses to blocks of memory called streams. The compiler maps each kernel to multiple processor cores in a SIMD fashion. It allocates streams in on-chip memory, ensuring that all data accesses within a kernel are to on-chip memory. It allocates streams so that executing kernels and transferring streams between on- and off-chip memory can occur in parallel. Mapping a program composed of kernels acting on streams is directly analogous to mapping a function composed of operations acting on scalars, and is amenable to conventional compiler optimizations designed for the later.
About the speaker:
Peter Mattson received a B.S. from the University of Washington, and a M.S. and Ph.D from Stanford University. At Stanford, he developed the original programming system for the Imagine Stream Processor. After Stanford, he joined Reservoir Labs Inc., and led the effort to develop a high-level compiler for DARPA’s Polymorphous Computing Architectures program. He is currently leading the compiler effort at Stream Processors, Inc. (SPI), a start-up that has produced the first commercially available stream processor.
Research Project Links
Stanford Streaming Supercomputer (Merrimac)
Sequoia Programming Language
Email: [speaker's last name] @streamprocessors.com