While PVM provides low-level tools for implementing parallel programs, HeNCE provides the programmer with a higher level environment for using heterogeneous networks. The HeNCE philosophy of parallel programming is to have the programmer explicitly specify the parallelism of a computation and to automate, as much as possible, the tasks of writing, compiling, executing, debugging, and analyzing the parallel computation. Central to HeNCE is an X-Window interface that the programmer uses to perform these functions. (see Figure 2).
The HeNCE environment contains a compose tool that allows the user to explicitly specify parallelism by drawing a graph of the parallel application. If an X-window interface is not available, then textual graph descriptions can be input.
Each node in a HeNCE graph represents a procedure written in either Fortran or C. HeNCE is designed to enhance procedure reuse. The procedure can be a subroutine from an established library or a special purpose subroutine supplied by the user. Arcs between nodes represent data dependency and control flow. A dependency arc from one node to another represents the fact that the tail node of the arc must run before the head of the arc. Data is sent to a node from its ancestors in the graph (usually its parents).
In addition to simple nodes, four types of control constructs are available in the HeNCE graph language. One represents looping; a second represents conditional dependency; a third represents a fan-out to a variable number of identical subgraphs; and a fourth represents pipelining. The graph can contain loops around subgraphs that execute a variable number of times based on the expression in the loop construct. Using a conditional construct, a section of the graph can be executed or bypassed based on an expression that will be evaluated at run time. A variable fan-out (and subsequent fan-in) construct is available while composing the graph. The width of the fan-out is specified as an expression that is evaluated at run time. This construct is similar to a parallel-do construct found in several parallel Fortrans. In pipelined sections, when a node finishes with one set of input data, it reruns with the next piece of pipelined data.
Once the dynamic graph is specified, a configuration tool in the HeNCE environment can be used to specify the configuration of machines that will compose his parallel virtual machine. The configuration tool also assists the user in setting up a cost matrix. The cost matrix allows the user to describe which machine can perform which task and can give priority to certain machines. HeNCE will use this cost matrix at run time to determine the most effective machine on which to execute a particular procedure in the graph.
The HeNCE environment also contains a build tool to perform three tasks. First, by analyzing the graph, HeNCE automatically generates the parallel program using PVM calls for all the communication and synchronization required by the application. Second, by knowing the desired PVM configuration, HeNCE automatically compiles the node procedures for the various heterogeneous architectures. Finally, the build tool installs the executable modules on the particular machines in the PVM configuration.
The execute tool in the HeNCE environment starts up the requested virtual machine and begins execution of the application. During execution, HeNCE automatically maps procedures to machines in the heterogeneous network based on the cost matrix and the HeNCE graph. Trace and scheduling information that is saved during the execution can be displayed in real time or replayed later.
The HeNCE environment has a trace tool that allows visualization of the parallel run. The trace tool is X-window based and consists of two windows. One window shows a representation of the network and machines underlying PVM. In this window icons of the active machines are illuminated with different colors depending on whether they are computing or communicating. Under each icon is a list of the node procedures mapped to this machine at any given instant. The second window displays the user's graph of the application, which changes dynamically to show the actual paths and parameters taken during a run. The nodes in the graph change colors to indicate the various activities going on in each procedure.