Introduction to Split-C1
Total Page:16
File Type:pdf, Size:1020Kb
1 Intro duction to SplitC Version David E Culler Andrea Dusseau Seth Cop en Goldstein Arvind Krishnamurthy Steven Lumetta Steve Luna Thorsten von Eicken Katherine Yelick Computer Science Division EECS University of California Berkeley Berkeley CA SplitCb oingCSBerkeleyEDU April SplitC is a parallel extension of the C programming language primarily intended for distributed memory multipro cessors It is designed around two ob jectives The rst is to capture certain useful elements of shared memory message passing and data parallel programming in a familiar context while eliminating the primary deciencies of each paradigm The second is to provide ecient access to the underlying machine with no surprises This is similar to the original motivation for Cto provide a direct and obvious mapping from highlevel programming constructs to lowlevel machine instructions SplitC do es not try to obscure the inherent p erformance characteristics of the machine through sophisticated transformations This combination of generality and transparency of the language gives the algorithm or library designer a concrete optimization target This do cument describ es the central concepts in SplitC and provides a general intro duction to programming in the language Both the language and the do cument are undergoing active devel opment so please view the do cument as working notes rather than the nal language denition 1 This work was supp orted in part by the National Science Foundation as a Presidential Faculty Fellowship num b er CCR Research Initiation Award numb er CCR and Infrastructure Grant numb er CDA by Lawrence Livermore National Lab oratory task numb er by the Advanced Research Pro jects Agency of the Department of Defense monitored by the Oce of Naval Research under contract DABTC by the Semiconductor Research Consortium under contracts DC and DC and by ATT The information presented here do es not necessarily reect the p osition or the p olicy of the Government and no ocial endorsement should b e inferred CONTENTS Contents Intro duction SplitC Primitives Overview Control Paradigm Global Pointers Declaring global p ointers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Constructing global p ointers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Destructuring a global p ointer : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Using global p ointers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Arithmetic on global p ointers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Spread Pointers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Using spread p ointers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Spread Arrays Declaring spread arrays : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Dynamic allo cation of spread ob jects : : : : : : : : : : : : : : : : : : : : : : : : : : : Address arithmetic : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Conguration indep endent use of spread arrays : : : : : : : : : : : : : : : : : : : : : Conguration dep endent use of spread arrays : : : : : : : : : : : : : : : : : : : : : : Bulk assignment Splitphase Assignment Get and put : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Store : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Global data movement : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Data driven execution : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Message passing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Synchronization Executing Co de Atomically : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Optimizing SplitC Programs Library extensions Sp ecial variables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : CONTENTS Barriers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Global p ointers : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ReadWrite : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : GetPut : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Store : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Storage management : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Global communication : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : IO : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Timing : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Strings : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : String copy : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : String concatenation : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Miscellaneous : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Atomic op erations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Splitcc intrinsics : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : App endix Op en Issues and Inadequacies Restrictions on global op erations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : INTRODUCTION Intro duction SplitC is a parallel extension to the C programming language designed for large distributed memory multipro cessors Following the C tradition SplitC is a generalpurp ose language but not a very high level language nor a big one It strives to provide the programmer enough machinery to construct p owerful parallel data structures and op erate on these in a machine indep endent fashion with reasonable clarity At the same time it do es not attempt to hide the fundamental p erformance characteristics of the machine through elab orate language constructs or visionary compilation Whereas C deals with the sort of ob jects that most sequential computers do the extensions in SplitC deal with the additional op erations that most collections of computers supp ort In either case we exp ect the compiler to b e reasonably go o d at address calculations instruction scheduling and lo cal storage management with the usual optimizations that p ertain to these issues Largescale multipro cessors intro duce two fundamental concerns there is an active thread of control on each pro cessor and there is a new level of the storage hierarchy which involves access to remote memory mo dules via an interconnection network The SplitC extensions address these two concerns under the assumption that the programmer must think ab out these issues in designing eective data structures and algorithms and desires a reasonable means of expressing the results of the design eort The presence of parallelism and remote access should not unduly obscure the resulting program The underlying machine mo del is a collection of pro cessors op erating in a common global address space which is exp ected to b e implemented as a physically distributed collection of memories The global address space is two dimensional from the viewp oint of address arithmetic on global data structures and from a p erformance viewp oint in that each pro cessor has ecient access to a p ortion of the address space We may call this the local portion of the global space SplitC provides access to global ob jects in a manner that reects the access characteristics of the interpro cessor level of the storage hierarchy SplitC attempts to combine the most valuable asp ects of shared memory programming with the most valuable asp ects message passing and data parallel programming within a coherent framework The ability to dereference global p ointers provides access to data without prearranged coordination b etween pro cessors on which the data happ ens to reside This allows sophisticated linked data structures to b e constructed and used Splitphase access eg prefetch allows global p ointers to b e dereferenced without causing the pro cessor to stall during access The global address space and the syntactic supp ort for distributed data structures provides a means of do cumenting the global data structures in the program This global structure is usually lost with traditional message passing b ecause it is implicit in the communication patterns Algorithms that are natural to state in terms of message passing are more ecient within a global address framework with bulk transfer they are as easy to express and the fundamental storage requirements of the algorithm INTRODUCTION are made explicit Traditional sharedmemory loses the inherent event asso ciated with transfer of information so even simple global op erations such as tree summation are hard to express eciently SplitC allows notication to b e asso ciated with access to the global addresses using an approach similar to splitphase access Data parallel programming involves phases of lo cal computation and phases of global communication The global communication phases are often very general say scattering data from each pro cessor to every other so the global address is very useful but there is no need to maintain consistency on a p erop eration basis SplitC is built up on an active message substrateAM so the functionality of the language can easily