130 likes | 217 Views
The only (important?) components are parallel or distributed. J.R. Cary Tech-X Corporation Review of components Throw out some controversial statements Looking for feedback A registry based successful approach to flexibility Additional requirements from inhomogeneous parallelism
E N D
The only (important?) components are parallel or distributed J.R. Cary Tech-X Corporation Review of components Throw out some controversial statements Looking for feedback A registry based successful approach to flexibility Additional requirements from inhomogeneous parallelism Baby steps towards parallel registries
The component: path to software Nirvana • May present multiple interfaces • All things to all people? • Interfaces must be known • Need not be known at link time • Found in the afterlife Parallel components
Components have well defined interfaces Components can have multiple interfaces Components can be stateful Components can be singletons (shared object lib with static data) Objects have well defined interfaces Objects can have multiple interfaces (multiple inheritance) Objects can be stateful Objects can be singletons For single address space, what distinguishes a component from an object? Parallel components
Parallelism is "where it's at" for components Even with just domain decomposition one now has components • Domain 0 to Domain 1: “Give me your left border cells” • Domain 0 to Domain 3: “Give me your upper-left corner cell” • Each domain provides different data (even interface) to each processor Domain 0 Domain 1 Domain 3 Domain 2 Parallel components
You can do a heck of a lot with the above model • VORPAL: all first-level objects (particles, fields, collision operators) exist on all domains and so are constructed on all. • All interactions through first-leve objects only • Second-level objects (surface emitters, boundary conditions) exist on only those procs with geometry containing that object. Parallel components
Construction is through a object definition language <Grid globalGrid> numPhysCells = [NX NY NZ] lengths = [LX LY LZ] startPositions = [XSTART YSTART ZSTART] </Grid> <EmField adiemfld> kind = emMultiField # Electric field <Field edgeE> numComponents = 3 numGuardCells = [1 1] offset = edge # Set E_y and E_z to zero on left boundary <BoundaryCondition leftConductor> kind = constant lowerBounds = [0 -1 -1] upperBounds = [1 NY1 NZ1] indices = [1 2] amplitudes = [0. 0.] </BoundaryCondition> </Field> <EmField> Startup: register implementations Prior to connection time: register instances Parallel components
FACETS project requires more complex coupling • Closed field lines: slow perpendicular + fast parallel transport • Quantities 1D Hot plasma • Collisionless, no significant atomic physics (except beams) Core is essentially 1D Edge is 2D Wall is a collection of 1D equations r • Open field lines (or close to): so parallel transport must balance perpendicular • Quantities are 2D Cool plasma • Collisional, atomic physics is important Plasma-wall interaction is 2D Parallel components
wall same points Coupling Idealized view: surfacial couplings between phase transitions • Core is a collisionless, 1D transport system with local, only-cross-surface fluxes • Edge is a collisional, 2D transport system • Wall: beginning of a particle trapping matrix 1D and 2D surfacial couplings Parallel components
Many components, many processors, many interfaces Core Edge component by itself has a complex topology (a regular mesh is worth a lot of contortions) • Each object exists on a subset of the processors • Connecting each with other components makes life worse • Doing a one-off is not going to help the larger problem Communicate among selves to get averaged values Core Wall Wall Wall Wall Wall Wall Wall Wall Wall Parallel components
Abstraction: processor groups, objects, interfaces • Processor group (MPI communicator) on which one has objects (may overlap) • Objects must register interfaces with processor group • Must be able to query proc group for interfaces Parallel components
We need a language to describe this • Self discovery will not work • Inquire of 10000 processors what they have? • Instead: • Global component created • Creates subcomponents (with associated communicators) on subsets of procs • Sub components contains components • At each level, can register with parent or arbitrarily high up in containment Parallel components
We are starting on this in FACETS <Component facets> kind = parComposer ## Define coupler <Coupler coupler> kind = aBCoupler </Coupler> <Component a> kind = seqComposer load = 1.0 . . . Parallel components
No conclusions: work in progress • Flexibility obtained by registry concept • Implementations • Instances • Need to generalize for heterogeneous case without building everything everywhere Parallel components