Rubik simplifies the process of creating task mappings for structured applications. Rubik allows an application developer to specify communicating groups of processes in a virtual application topology succinctly and map them onto groups of processors in a physical network topology. Both the application topology and the network topology must be Cartesian, but the dimensionality of either is arbitrary. This allows users to easily map low-dimensional structures such as planes to higher-dimensional structures like cubes to increase the number of links used for routing. Rubik supports a number of elementary operations such as splits, tilts, or shifts, that can be combined into a large number of unique patterns. Rubik also provides embedding operations that adjust the way tasks are laid out within groups. In conjunction with Rubik’s mapping semantics, these operations allow users to create a wide variety of task layouts for structured codes by composing a few fundamental operations.
Boxfish is a platform for visualizing performance data across the domains in which it was collected. For example, communication groups exist in the domain of communication but can be viewed on the domain of a system’s hardware. Boxfish enables this operation via a system of projections. Projections are mappings of objects from one domain (e.g. communication groups) to another (e.g. hardware processes). Boxfish includes several such common projections and is designed with the expectation of new projections and visualizations being contributed. Boxfish handles filtering of data, applications of projections, and linking of views so that new visualizations may be easily integrated with existing ones.
Flexible data collection with thread support.