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 processors. Parallelism
is implemented by running the same component on all
processors
and using MPI to communicate between them.
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.