Split-C: Compiler-based Support for
                    a Global Address Space

			   David E. Culler
		      Computer Science Division
			    U.C. Berkeley


The traditional distinctions between Shared Memory, Message Passing,
and SIMD are disappearing as technology forces machine designs toward
systems based on state-of-the-art microprocessors with sizable local
memory and a fast network interface.  Split-C seeks to abstract this
emerging common structure while retaining its fundamental performance
characteristics, much as C does for modern uniprocessors.  Split-C
provides the programmer with an explicit global address space, while
retaining the ability to run highly-tuned sequential code on each
local portion.  It provides a rich set of global access operations to
allow remote access and communication to be optimized.  Within this
framework, shared memory, message passing, and data parallel
programming can be freely mixed as alternative programming styles.  I
will present the Split-C language and its CM-5 implementation based on
Active Messages.  The basic philosophy is to keep the hardware simple
and predictable so that software can be optimized toward a clear goal.
We will look at several examples that illustrate trade-offs between
traditional hardware support for shared memory and suppport for
a more general set of global access operations.