Software: CUBE

CUBE is a graphical browser suitable for displaying a wide variety of performance measurements for parallel programs including MPI and OpenMP applications (Figure 1). The performance is displayed along three hierarchical dimensions (i) performance metric, (ii) call path, and (ii) process or thread. In this way, the user can identify the type of performance problem, its location in the program's control flow, and the processes and threads that are affected.

As an example, Figure 1 shows the display of KOJAK analysis results for an MPI application simulating solute transport in heterogeneous soil-aquifer systems. KOJAK has identified a performance problem called Late Sender (left), which describes a situation where a process enters a wait state as the result of an attempt to receive a message too early. The middle dimension shows where the problem appears in the call tree, while the right dimension shows the distribution of wait states across different processes. The display provides scalability in two ways: (i) aggregation of performance metrics within individual dimensions and (ii) across different dimensions. All performance metrics are uniformly accommodated in the same display and thus provide the ability to easily compare the effects of different kinds of performance behavior.

Figure 1: CUBE display

Performance Algebra

Since performance tuning of parallel applications usually involves multiple experimental runs to compare the effects of optimization strategies or to collect data using different monitoring tools, CUBE includes a performance algebra that can be used to merge, subtract, and average the data from different experiments and view the results in the form of a single derived experiment. Using the same representation for derived experiments and original experiments provides access to the derived behavior based on familiar metaphors and tools in addition to an arbitrary and easy composition of operations. The algebra is an ideal tool to verify and locate performance improvements and degradations likewise.

Figure 2 shows the difference between the original and an optimized version of a nano-particle simulation. Raised reliefs indicate performance improvements, and sunken reliefs indicate performance degradations. The differences are broken down along the dimensions (i) performance problem, (ii) call tree, and (iii) process or thread. The figure indicates that a certain optimization was only partially successful because some of the wait states migrated to other locations in the program instead of disappearing.

Figure 2: Intuitive but differentiated picture of performance differences between two code versions.


CUBE consists of two components:

  • CUBE library. CUBE includes a library to read and write instances of the previously described data model in the form of an XML file. The file representation is divided into a metadata part that describes the specific structure of the different dimensions and a data part that contains the metric values onto which the elements of the performance space are mapped.

  • CUBE display. The display component can load a cube file and display the different dimensions of the performance space using three coupled tree browser. The browsers are connected so that the user can view one dimension with respect to another dimension. For example, the user can click on a particular metric and see its distribution across the call tree. In addition, the display is augmented with a source-code display that shows the exact position of a call site in the source code.

CUBE is implemented in C++ and is able to run on all major unix platforms.

New features in CUBE 2.0 (released April 12 2005)

CUBE 2.0 includes a large number of new and powerful features:

  • Display to examine the distribution of performance problems across virtual topologies

  • Performance algebra to compare, integrate, and summarize different CUBE data sets

  • Converter for TAU call-path profiles

  • Support for flat profiles

  • Online documentation for performance metrics


To use CUBE, you have to install the following two packages:

wxWidgets is a cross-platform C++ framework for writing advanced GUI applications using native controls, and libxml2 is an XML C parser and toolkit developed for the Gnome project.

If you want to use the CUBE library only, you don't need to install wxWidgetss.


CUBE 2.2 manual
(December 15, 2005)
User manual for CUBE version 2.2. .PDF
CUBE 1.0 manual
(January 16, 2004)
User manual for CUBE version 1.0. .PDF


CUBE 2.2.1
(Aug 28, 2006)
Support for newer versions of wxGTK and GTK2 .TAR.GZ

To report a bug, please email us.

Jun 29 2022 Contact: Admin Login