2003 ESMF Components Workshop
The goal of this meeting was to provide a forum for discussion for people who are actively involved in the ongoing efforts to bring component technologies to computational Earth science. There are a range of groups currently pursuing research and development efforts in this area. In some aspects these efforts follow quite similar strategies, in other aspects the approaches being taken are more diverse. A list of questions, available below, was provided to encourage participants to begin to identify where common solutions are emerging to address common problems. These may represent best practices we can all learn from.
Agenda | Presentations | Meetings ArchiveFocus Questions
- What system requirements do you have - e.g. Unix/Linux, CORBA, MPI, Windows,...
- Can components spawn other components? What sort of relationships are allowed? directory structure model, parent child process model, flat model, peer-to-peer model, client-server etc....
- What programming language restrictions do you have currently? What programming languages do you foresee using in the next 5 years. (not just current restrictions.) What programming languages do your target users want now and in the next 5 years.
- Are you designing to be programming language neutral?
- What sort of component abstraction do you present to an end user? Atmosphere component, Ocean component, an Analysis component, a generic component etc...To what extent is the data being passed between components self-describing?
- How is "self-describing" being achieved?
- Do the data structures passed between components have an design that is meant to make them extensible?
- Does data always have to be copied between components or are there facilities for sharing references to common structures across component boundaries? When, how and why is this needed?
- Is there a registry concept for components?
- Are the components truly block structured? e.g a procedure call like interface, or can components have side effects on other component
- Do you think of your components as all of some generic type, are their several basic component types, is every component its own unique type? What levels and "styles" of parallelism/concurrency or serialization are permitted/excluded. e.g. can components be internally parallel, can multiple components run concurrently, can components run in parallel?
- What levels and "styles" of parallelism/concurrency or serialization are permitted/excluded. e.g. can components be internally parallel, can multiple components run concurrently, can components run in parallel
- Do components always have certain specific functions/methods?
- What, if any, virtualization of process, thread and physical CPU do you use?
- Can components come and go arbitrarily throughout execution?
- Can compute resources be acquired/released throughout execution?
- Does you system have an initialization phase?
- Is the high-level control syntax the same in different circumstances? e.g. serial component to serial component, versus parallel M component to parallel N component.
- What standards must components adhere to - languages, standard functions/API's, standard semantics etc...
- What is it appropriate to standardize for component interfaces.
- What is it inappropriate to standardize for component interfaces.
- What is your approach to saving and restoring system state?
- What are the issues with bringing an existing component or stand-alone application into a particular system.
- Who are your target users
- Who are your target component authors.
