next up previous contents
Next: Performance Measurement and Modeling Up: Performance Measurements in HPC Previous: Performance Measurements in HPC   Contents

The Common Component Architecture (CCA)

The CCA model uses the provides-uses design pattern. Components provide functionalities through interfaces that they export; they use other components' functionalities via interfaces. These interfaces are called Ports; thus a component has ProvidesPorts and UsesPorts. Components are peers and are independent. They are created and exist inside a framework; this is where they register themselves, declare their UsesPorts and ProvidesPorts and connect with other components.

CCAFFEINE [8] is the CCA framework we employ for our research. CCAFFEINE is a low latency framework for scientific computations. Components can be written in most languages within the framework; we develop most of our components in C++. All CCAFFEINE components are derived from a data-less abstract class with one deferred method called setServices(Services *q). All components implement the setServices method which is invoked by the framework at component creation and is used by the components to register themselves and their UsesPorts and ProvidesPorts. Components also implement other data-less abstract classes, called Ports, to allow access to their standard functionalities. Every component is compiled into a shared object library that will be dynamically loaded at runtime.

A CCAFFEINE code can be assembled and run through a script or a Graphical User Interface (GUI). All components exist on the same processor and the same address space. Once components are instantiated and registered with the framework, the process of connecting ports is just the movement of (pointers to) interfaces from the providing to the using component. A method invocation on a UsesPort thus incurs a virtual function call overhead before the actual implemented method is used. CCAFFEINE uses the SCMD (Single Component Multiple Data) [8] model of parallel computation. Identical frameworks, containing the same components, are instantiated on all $P$ processors. Parallelism is implemented by running the same component on all $P$ processors and using MPI to communicate between them. $P$ instances of a given component form a cohort [8] within which all message passing is done. The framework adheres to the MPI-1 standard ; dynamic process creation/deletion and a dynamically sized parallel virtual machine are not supported. This minimalist nature renders CCAFFEINE light, simple, fast, and very unobtrusive to the components. Performance is left to the component developer who is in the best position to determine the optimal algorithms and implementations for the problem at hand.


next up previous contents
Next: Performance Measurement and Modeling Up: Performance Measurements in HPC Previous: Performance Measurements in HPC   Contents
2003-11-05