Gossamer
The trend for computer chips to have more and more processing cores presents a major challenge. Programmers will have to learn how to write explicitly parallel programs or learn new programming models, and software systems will have to be able to extract concurrency from sequential applications and manage it effectively.
Gossamer is a framework (for the C programming language) that aims to make it easy to parallelize sequential programs and easy to implement parallel algorithms while at the same time providing scalable performance improvements on multicore machines. Gossamer has three components:
- A set of high-level annotations that one adds to a sequential program (C in our case) in order to specify concurrency and synchronization. The annotations can be used to experiment with ways to parallelize a sequential program, or they can be used directly to implement a parallel algorithm. Most of the annotations have the property that if they are elided (removed) from the program, the result is simply the underlying sequential program.
- A runtime system that provides fine-grained threads and high-level synchronization constructs---e.g., barriers, atomic actions, reductions, and associative memory---and that implements these efficiently on top of an underlying threads package (Pthreads in our case).
- A source-to-source translator that takes an annotated sequential program and produces a program that uses our threading framework. The resulting program is (transparently) compiled, linked, and executed as if it had been written directly. The translator provides feedback to speed the learning process for new users, to warn the programmer about suspect annotations (such as loop-carried dependencies in parallel loops and unprotected shared variables), and to suggest alternatives that might produce more efficient code.
Current Project Status: n/a
People
Faculty: Greg Andrews
Graduate Students: Joe Roback, Steven Thomas
Documentation
- Manual: PDF
Downloads
- Source Code: Gossamer-trunk.tar.bz2 (Latest subversion tar package)
Last updated January 12, 2009