In both cases, the same code executes on all processors, with local, data-dependent branches. Hence, despite the large numbers of processors, there are only a few equivalence classes of processor behavior. The N dynamic performance metrics for each processor define a group of evolving, N-dimensional points. Most points are closely clustered because they correspond to processors with similar behavior. If one could identify representatives of these equivalence classes and only record data from those representatives, one would obtain detailed performance metrics without capturing gigabytes of data.
Statistical clustering is one of the standard techniques for identifying data equivalence classes.
Because both program and processor behaviors change during execution, the number of clusters, their sizes and their shapes will vary. Simply put, any dynamic clustering algorithm must track changes in program behavior by adaptively identifying new behavioral equivalence classes, selecting representatives from each class, saving data from those representatives, and noting representative weights, while not unduly perturbing program execution. As an early assessment of the feasibility of clustering to reduce data volumes, we have developed a prototype implementation that uses dynamic performance metrics to cluster processor behavior. The volume of captured data with clustering is nearly an order of magnitude smaller than if data from all processors is captured. In addition, the performance metrics computed from the reduced data are encouragingly similar to those obtained using data from all the processors.