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.
Hatchet is a Python-based library that allows Pandas dataframes to be indexed by structured tree and graph data. It is intended for analyzing performance data that has a hierarchy (e.g., serial or parallel profiles that represent calling context trees, call graphs, nested regions’ timers, etc.). Hatchet implements various operations to analyze a single hierarchical data set or compare multiple data sets, and its API facilitates analyzing such data programmatically. Such operations include subtract, addition, division, and filter. Example analyses enabled with Hatchet may include continuous integration testing over code changes, scaling performance study across ranks, or performance study across architectures (i.e., CPU to GPU).