In this section we describe a first implementation of Carnival , which is targeted to data-parallel applications running on distributed memory machines that communicate via message passing. The implementation runs on IBM SP2 [Agerwala et al. 1995] machines and supports parallel code generated by the Forge APR HPF compiler [Forge1995].
The compilation of HPF programs in this environment is a two-step
process. Initially, the HPF code is translated by the Forge xhpf
pre-processor into SPMD Fortran 77 code augmented with calls to a
run-time library, which performs data exchanges and synchronization
operations. This F77 code is compiled by the IBM Fortran Compiler -
xlf - generating executable code that runs in parallel.
Carnival exploits this two-step compilation process to insert
instrumentation into the code
. During its
execution, the instrumented executable utilizes the UTE trace facility
[Wu and Franke1995] (which is implemented on top of IBM's AIX trace facility
[AIX1994]) to generate a trace file containing information about the
execution.
Figure 3.1: Overview of Carnival
Figure 3.1 presents the various steps and files involved when using Carnival . Rectangles represent files; arrows represent the steps that process files. There are two main tasks that are performed by Carnival tools: instrumentation and analysis. Each of these tasks is described in the sections that follow.