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
Parallel components 2 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 3 For single address space, what distinguishes a component from an object? 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
Parallel components 4 Parallelism is "where it's at" for 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 1 Domain 0 Domain 2 Domain 3 Even with just domain decomposition one now has components
Parallel components 5 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 6 Construction is through a object definition language numPhysCells = [NX NY NZ] lengths = [LX LY LZ] startPositions = [XSTART YSTART ZSTART] kind = emMultiField # Electric field numComponents = 3 numGuardCells = [1 1] offset = edge # Set E_y and E_z to zero on left boundary kind = constant lowerBounds = [ ] upperBounds = [1 NY1 NZ1] indices = [1 2] amplitudes = [0. 0.] Startup: register implementations Prior to connection time: register instances
Parallel components 7 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) 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 Core is essentially 1D Edge is 2D Wall is a collection of 1D equations
Parallel components 8 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 same points wallwall Coupling
Parallel components 9 Many components, many processors, many interfaces 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 Core Wall Communicate among selves to get averaged values Edge component by itself has a complex topology (a regular mesh is worth a lot of contortions) Wall
Parallel components 10 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 11 We need a language to describe this Self discovery will not work –Inquire of 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 12 We are starting on this in FACETS kind = parComposer ## Define coupler kind = aBCoupler kind = seqComposer load =
Parallel components 13 No conclusions: work in progress Flexibility obtained by registry concept –Implementations –Instances Need to generalize for heterogeneous case without building everything everywhere