|
4. |
Examples |
|
The examples can be found in the examples directory of each user. The "rocketcalc" user is used in the examples below. Some of the examples compute an approximation of pi by numerically integrating the function f(x)=4/(1+x2) on the interval [0,1] using the midpoint rule. The examples solve this problem in parallel in different ways.
Figure 4.1 presents a schematic illustration of the integration for the
simple case of four uniform
subintervals in [0,1] and two parallel computing processes.
The function is represented by the solid red curve.
The left-most red-filled rectangles show the part of
the numerical integration computed by one process (for example), and the
green-filled rectangles show the part of the integration computed by another
process. The two processes can compute their respective integration sub-problems
in parallel. Thus, in this trivial example, four subintervals are computed
in the time that two could be computed using a single process (less the
time for collecting the partial sums from each child process).
One can easily imagine alternate ways to divide up the numerical integration problem among a set of computing processes. You can easily modify the examples that compute this result in parallel below to implement your ideas. Text typeset using a monospaced font indicates terminal session information (commands to type, output, etc.). Italicized text generally indicates a variable argument that should be replaced with something appropriate to its context.
We couldn't agree more--LAM is our favorite MPI implementation. In this example, we'll compile and run the pi.c program used in the MP_Lite example--only this time with LAM.
Type mpipov with no arguments for a brief help screen listing the possible arguments. Note that mpipov is only a simple script that initializes LAM/MPI and calls the actual MPI version of POV-Ray to do the rendering. Additional scenes can be found in the /usr/share/povray31/scenes/advanced directory. Try rendering them in the same way as the sombrero above. More information on POV-Ray can be found at http://www.povray.org. The particular MPI implementation used here was written by Leon Verrall (http://www.verrall.demon.co.uk/mpipov).
The Virtual Cluster Toolbox includes a set of message-passing extensions to Octave based on PVM. The extensions allow multiple Octave processes to communicate with each other. The interactive nature, sophisticated matrix manipulation and simple programming make Octave an excellent platform for experimenting with parallel methods and prototyping algorithms.
Starting PVM
pvm Add additional computing nodes to the PVM with the console command "add." For example, to add nodes n2 and n3, type: add n2 n3 at the PVM console prompt. When you're finished adding nodes, type quit
Example 1: Interactive message passing
octave (two distinct GNU/Octave sessions should be running). In each Octave session, enter the command: pvm_mytid and make a note of the numbers that are returned. Those numbers are the unique PVM task IDs for each Octave session's underlying process. They are used by the processes to identify each other in the virtual machine. The two running Octave sessions can now communicate with each other using PVM. Select one of the Octave sessions to receive data--we assume for the purpose of illustration below that its PVM task ID number is 262147: pvm_recv The pvm_recv command will block (i.e., wait) until it receives some data from any other Octave process. Send the waiting Octave process some data from the other Octave session with the commands:
A=rand (5)
Note that the Octave process with task ID 262147 has received the entries of the random 5x5 matrix "A" defined on the sending node. This example illustrates the most basic feature of message-passing systems: exchanging data between processes. The two Octave sessions used in this example can be running on different nodes in the cluster. For a complete listing of the available PVM commands in Octave, type pvm_ followed by the TAB key at an Octave prompt. For detailed help on a specific command, type help followed by the name of the command at an Octave prompt.
To run this example, open a terminal window and issue the following commands:
cd examples
After the Octave session starts, type the command: pip to start the parent program. Follow the on-screen instructions... This example illustrates how easy it is to implement dynamic parallel computation using Octave and PVM. Each child program is run by a dynamically spawned Octave process. Examine the pip.m and pic.m files with your favorite editor (e.g., vi) for more information. | |