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.