The power of abstraction has played a key role throughout the history of scientific computing in managing the growing complexity of scientific problem solving. While the evolution of software abstractions and the technology that supports them has helped to address the challenges of scientific application development, it has at time been in conflict with the ability to achieve high performance. On the one hand, abstraction in software systems further distance the scientific application developer from the range of sources of performance behavior and possible performance problems. On the other hand, support for performance observation and analysis has been poorly integrated in software systems, making performance evaluation a more difficult task. As both the power and the complexity of scientific software environments and computing systems mutually advance, it is imperative that technology for performance evaluation and engineering keep pace and become part of an integrated software and systems solution.
The software challenges of building large-scale, complex scientific applications are beginning to be addressed by the use of component software technologies (e.g., see [1,2,3]). The software engineering of scientific applications from components that can be ``plugged'' together will greatly facilitate construction of coupled simulations and improve their cross-platform portability. However, the success of scientific component software will depend in the end on the ability to deliver high-performance solutions. Scientific components are more complex and diverse than typical software components or libraries, in their scale, execution modes, programming styles and languages, and system targets. Performance technology that lacks robustness, portability, and flexibility will inevitably prove incapable of addressing the software and platform integration requirements required for performance observation and analysis. Intra-component performance engineering addresses problems of individual component performance characterization, analysis, modeling, and adaptation. Inter-component performance engineering provides local and overall awareness of application performance and facilities to access that performance information for the application to utilize. Most importantly, performance engineering technology should be compatible with the component engineering methodologies and frameworks used to develop applications, or it will be neither routinely nor effectively applied by component and application developers.
Our research work on performance technology for component software is defined by three objectives. The first is a methodological and operation model for intra- and inter-component performance engineering. Here, we define how the performance engineering technology will integrate with the component architectures and frameworks being considered for scientific computing. The Common Component Architecture (CCA) Forum  is specifying component software extensions and infrastructure to address problems of parallel component interfaces, scientific data exchange, and cross-language interoperability. We chose the CCA specification as our reference archetype. The second objective is the development of technology to implement the methods and techniques required for intra- and inter-component performance engineering in the context of existing scientific component efforts. Our target audience for the performance engineering technology we are creating are the framework and application developers using the CCA specification. Specifically, we are integrating our TAU performance system  with the CCA software, such as the Scientific Interface Definition Language (SIDL) , the Babel component interface toolkit , and the CCAFFEINE framework . Our final objective is the application of the model and technology for performance engineering to real component-based scientific computing environments. The goal here is to demonstrate both capability and utility of our performance engineering ideas.
The three objectives above are covered in this paper. Section 2 discusses the use of component technology for scientific computing and motivates the general requirements for performance engineering. The functional operation of the CCA specification is also described. Our conceptual model for performance engineering of component software is presented in Section 3. Here we describe a high-level methodology to technology development for intra- and inter-component performance engineering. The section following, Section 4, then considers the implementation of this technology in the context of the CCA software environment. Section 5 presents an application of our work with an emphasis on CCA performance modeling and optimization. Here we demonstrate the use of a CCA performance interface in measurement experiments to construct empirical performance models. We also show how, when the application runs, an optimizing component utilizes the performance API to gather statistics about the running application and decides which of the set of similar components to choose for optimal performance.
Our work has been targetted primarily towards high-performance computing (HPC) environments. However, it naturally extends to grid computing both in terms of application of component technologies and the requirements for performance engineering. We briefly discuss the extensions and the issues that arise as part of the conclusions Section 6.