The mastermind component is responsible for collecting, storing and reporting the performance data. The Mastermind component implements the MonitorPort, used by proxies to monitor per invocation performance data. For each method of a given port that is being monitored, a record is created. This record stores performance data for the given method on a per invocation basis and is updated at each successive invocation of the method. For each invocation, performance data for the computation phase and communication phase, as well as the input parameters, are recorded. Upon program termination, each record is dumped to disk.
Under a typical setup each proxy is connected to the Mastermind component, which provides functionality to turn measurements on and off. The Mastermind component, in turn, is connected to TAU, which provides the functionality to create and manage timers, as well as access hardware counters.
Following is an example component assembly with the MasterMind component and associated proxies:
The Optimizer component selects the most efficient implementation for each component from the set of possible component implementation by analyzing the overall performance of every different configuration of components. The Optimizer is only concerned with the components that significantly influences the overall running time, and thus first remove insignificantly component from consideration according to these two rules:
Let a node be a single component which calls some child components.
- Children that contribute little to the parent node's inclusive execution time may be safely eliminated from further analysis. For example, if the children contribute only 10% of the node's inclusive time then the they are eliminated.
- A Child that contributes only a small fraction of the total time spent all the children of a given node can also be eliminated. For example, if a child only contributes 10% of what an average child contributes then it is eliminated.