General improvement on viewing wide and long slog2 files. This added features needed...
[mpe.git] / README
1                       MPE (Multi-Processing Environment)
2                       ----------------------------------
3
4                           Version 2.4.6. March, 2008
5
6                     Mathematics and Computer Science Division
7                            Argonne National Laboratory
8
9 I.  INTRODUCTION
10 ----------------
11
12 The Multi-Processing Environment (MPE) attempts to provide programmers with 
13 a complete suite of performance analysis tools for their MPI programs based
14 on post processing approach.  These tools include a set of profiling libraries, 
15 a set of utility programs, and a set of graphical tools.
16
17 The first set of tools to be used with user MPI programs is profiling libraries
18 which provide a collection of routines that create log files.  These log files
19 can be created manually by inserting MPE calls in the MPI program, or 
20 automatically by linking with the appropriate MPE libraries, or by combining 
21 the above two methods.  Currently, the MPE offers the following 4 profiling 
22 libraries.
23
24    1) Tracing Library - Traces all MPI calls.  Each MPI call is preceded by a 
25       line that contains the rank in MPI_COMM_WORLD of the calling process, 
26       and followed by another line indicating that the call has completed.
27       Most send and receive routines also indicate the values of count, tag,
28       and partner (destination for sends, source for receives).  Output is to
29       standard output.
30
31    2) Animation Libraries - A simple form of real-time program animation 
32       that requires X window routines.  
33
34    3) Logging Libraries - The most useful and widely used profiling libraries 
35       in MPE.  These libraries form the basis to generate log files from 
36       user MPI programs.  There are several different log file formats
37       available in MPE.  The default log file format is CLOG2.  It is a low
38       overhead logging format, a simple collection of single timestamp events.
39       The old format ALOG, which is not being developed for years, is not
40       distributed here.  The powerful visualization format is SLOG-2, stands 
41       for Scalable LOGfile format version II which is a total redesign of the
42       original SLOG format.  SLOG-2 allows for much improved scalability for 
43       visualization purpose.  CLOG2 file can be easily converted to 
44       SLOG-2 file through the new SLOG-2 viewer, Jumpshot-4.  The MPI logging
45       library is now thread-safe through the use of a global mutex over the
46       the MPE logging library which is not yet thread-safe.
47
48    4) Collective and datatype checking library - An argument consistency 
49       checking library for MPI collective calls.  It checks for datatype,
50       root, and various argument consistency in MPI collective calls.
51       If an error is detected, a backtrace of the callstack (on the supported
52       platform) will be printed to locate the offended call.
53
54 The set of utility programs in MPE includes log format converter (e.g. 
55 clogTOslog2), logfile print (e.g. slog2print) and logfile viewer and
56 convertor (e.g. jumpshot).  These new tools, clog2TOslog2, slog2print and
57 jumpshot(Jumpshot-4) replace old tools, clog2slog, slog_print and logviewer
58 (i.e. Jumpshot-2 and Jumpshot-3).  For more information of various
59 logfile formats and their viewers, see 
60
61 http://www.mcs.anl.gov/perfvis
62
63
64
65 II. CONFIGURATION
66 -----------------
67
68 MPE can be configured and installed as an extension to most MPI standard
69 -compliant MPI implementations, e.g. MPICH-2, MPICH, OpenMPI, LAM/MPI,
70 SGI's MPI, HP-UX's MPI, IBM's MPI, Cray's MPI and NEC's MPI.  
71 MPE has been integrated into MPICH and MPE2 has been integrated seamlessly
72 into MPICH-2, so MPEx will be installed automatically during MPICHx's
73 installation process.  
74
75 For details of configuration of MPE, see the INSTALL or INSTALL.cross file.
76
77
78
79 III. INSTALLATION INSTRUCTIONS
80 -------------------------------
81
82 For details of installation instruction/examples of MPE, see the INSTALL file.
83
84
85
86 IV.  EXAMPLE PROGRAMS
87 ----------------------
88
89 As previously noted, the MPE library is composed of 3 different profiling
90 libraries.  During configure, the compiler's library linkage flags and 
91 appropriate libraries are determined.  These variables are first substituted
92 in the Makefiles in the directories, mpe2/src/wrappers/test,
93 mpe2/src/graphics/contrib/test and mpe2/src/collchk/test.  The Makefiles for
94 mpe2/src/wrappers/test and mpe2/src/graphics/contrib/test are then installed
95 into directory share/ as examples_logging/ and examples_graphics/ during the 
96 final installation process.  The following are some of the crucial variables:
97
98 LOG_LIBS     = library flag that links with the logging libraries
99 TRACE_LIBS   = library flag that links with the tracing library
100 ANIM_LIBS    = library flag that links with the animation library
101 COLLCHK_LIBS = library flag that links with the collective and datatype
102                checking library
103
104 The variable FLIB_PATH is the compiler's library path needed to link fortran 
105 MPI programs with the logging library.
106
107 During make, small test programs cpi.c, cpilog.c and fpilog.f will be linked
108 with each of the above libraries.  In the output from Make, a message will be 
109 printed to indicate the status of each attempted link test.  The success 
110 of these linkage tests will also be included in the Make output.  If the
111 linkage tests are successful, then these library linkage flags can be used
112 for your programs as well.   
113
114 The following example programs are also included in the distribution:
115
116     mpe/src/graphics/contrib/mandel is a Mandelbrot program that uses the MPE 
117     graphics package.
118
119     mpe/src/graphics/contrib/mastermind is a program for solving the Mastermind
120     puzzle in parallel.
121
122 These programs should work on all MPI implementations, but have not been
123 extensively tested.
124
125
126
127
128
129 V.  MPEINSTALL
130 --------------
131
132 A 'mpeinstall' script is created during configuration.  If configuring with
133 MPICH and MPICH2, then the 'mpiinstall' script will invoke the 'mpeinstall'
134 script.  However, 'mpeinstall' can also be used by itself.  This is only 
135 optional and is of use only if you wish to install the MPE library in a 
136 public place so that others may use it.  Final install directory will 
137 consist of an include, lib, bin, sbin and share subdirectories.  Examples 
138 and various logfile viewers will be installed under share.
139
140
141
142
143
144 VI. USAGE
145 ---------
146
147 The final install directory contains the following subdirectories.
148
149     include/ contains all the include files that user program needs to read.
150     lib/     contains all the libraries that user program needs to link with.
151     bin/     contains all the utility programs that user needs to use.
152     doc/     contains available MPE documentation, e.g. Jumpshot-4's userguide.
153     sbin/    contains the MPE uninstall script to uninstall the installation.
154     share/   contains user read-only data.  Besides share/examples_logging/
155              and share/examples_graphics/, user usually does NOT need to know
156              the details of other subdirectories.
157
158 In terms of usage of MPE, user usually only need to know about the files
159 that have been installed in include/, lib/ and bin/.  
160
161
162
163 VI. a) CUSTOMIZING LOGFILES
164 ---------------------------
165
166 In addition to using the predefined MPE logging libraries to log all MPI 
167 calls, MPE logging calls can be inserted into user's MPI program to define
168 and log states.  These states are called User-Defined states.  States may 
169 be nested, allowing one to define a state describing a user routine that 
170 contains several MPI calls, and display both the user-defined state and 
171 the MPI operations contained within it.
172
173 The simplest way to insert user-defined states is as follows:
174 1) Get handles from MPE logging library: MPE_Log_get_state_eventIDs()
175    has to be used to get unique event IDs (MPE logging handles).
176    This is important if you are writing a library that uses
177    the MPE logging routines from the MPE system.  
178
179    PS. Hardwiring the eventIDs is considered a bad idea since it may cause
180    eventID confict and so the practice isn't supported.  Older MPE libraries 
181    provide MPE_Log_get_event_number() which is still being supported but
182    has been deprecated.  Users are strongly urged to use
183    MPE_Log_get_state_eventIDs() instead.
184 2) Set the logged state's characteristics: MPE_Describe_state() sets the
185    name and color of the states.
186 3) Log the events of the logged states: MPE_Log_event() are called twice
187    to log the user-defined states.
188
189 Below is a simple example that uses the 3 steps outlined above.
190
191 \begin{verbatim}
192
193 int eventID_begin, eventID_end;
194 ...
195 MPE_Log_get_state_eventIDs( &eventID_begin, &eventID_end );
196 ...
197 MPE_Describe_state( eventID_begin, eventID_end, "Multiplication", "red" );
198 ...
199 MyAmult( Matrix m, Vector v )
200 {
201     /* Log the start event of the red "Multiplication" state */
202     MPE_Log_event( eventID_begin, 0, NULL );
203     ...
204     ... Amult code, including MPI calls ...
205     ...
206     /* Log the end event of the red "Multiplication" state */
207     MPE_Log_event( eventID_end, 0, NULL );
208 }
209
210 \end{verbatim}
211
212 The logfile generated by this code will have the MPI routines nested within
213 the routine MyAmult().
214
215 Besides user-defined states, MPE2 also provides support for user-defined
216 events which can be defined through use of MPE_Log_get_solo_eventID()
217 and MPE_Describe_event.  For more details, e.g. see cpilog.c.
218
219 If the MPE logging library, liblmpe.a, is NOT linked with the user program, 
220 MPE_Init_log() and MPE_Finish_log() need to be used before and after all 
221 the MPE calls.   Sample programs cpilog.c and fpilog.f are available to 
222 illustrate the use of these MPE routines.  They are in the MPE 
223 source directory, mpe2/src/wrappers/test or the installed directory, 
224 share/examples_logging to illustrate the use of these MPE routines.  
225 For futher linking information, see section "Convenient Compiler Wrappers".
226
227 For undefined user-defined state, i.e. corresponding MPE_Describe_state() 
228 has not been issued, new jumpshot (Jumpshot-4) may display the legend name as
229 "UnknownType-INDEX" where INDEX is the internal MPE category index.
230
231
232
233 VI. b) ENVIRONMENTAL VARIABLES
234 ------------------------------
235
236 For MPE logging, MPE_TMPDIR and MPE_LOGFILE_PREFIX are 2 environment variables
237 that most users find to be very useful.  So it is recommended to set these
238 2 env. variables before launching the MPI program during logging :
239
240 CLOG_BLOCK_SIZE: The integer value determines the clog2 buffer block size
241                  which set the least minimum clog2 file size.  If
242                  CLOG_BLOCK_SIZE is not set, 64K per block is assumed.
243
244 CLOG_BUFFERED_BLOCKS: The integer value determines the number of blocks
245                       witin the CLOG2's internal buffer.  Together with
246                       CLOG_BLOCK_SIZE, CLOG_BUFFERED_BLOCKS determines how
247                       often the internal buffer is flushed to the disk.  
248                       The total buffer size is determined by the product of
249                       CLOG_BLOCK_SIZE and CLOG_BUFFERED_BLOCKS.  These 2
250                       environmental variables allows user to minimize MPE2
251                       logging overhead when large local memory is available.
252                       The default value is 128.
253
254 MPE_TMPDIR: MPE_TMPDIR takes precedence over TMPDIR.  It specifies a
255             directory to be used as temporary storage for each process.
256             By default, when MPE_TMPDIR and TMPDIR are NOT set,
257             /tmp will be used.  When user needs to generate a very large
258             logfile for long-running MPI job, user needs to make sure that
259             MPE_TMPDIR(or TMPDIR) is big enough to hold the temporary local
260             logfile which will be deleted if the merged logfile can be
261             created successfully.  In order to minimize the overhead of the
262             logging to the MPI program, it is highly recommended user to
263             use a *local* file system for TMPDIR.
264
265              Note : The final merged logfile will be written back to the 
266                     file system where process 0 is.
267
268 MPE_SAME_TMPDIR: The boolean value determines whether MPE_TMPDIR will be
269                  the same across the whole MPI_COMM_WORLD. By default,
270                  MPE_SAME_TMPDIR is set to true and only rank 0's MPE_TMPDIR
271                  will be broadcasted to every process. There is scalability
272                  implication on whether MPE_SAME_TMPDIR is true.  When
273                  MPE_SAME_TMPDIR=false, MPE_TMPDIR could be set differently
274                  on different processes and hence mkstemp() will be called
275                  once on each process to create temporary filename.  Calling
276                  mkstemp() on the same filesystem, e.g. $HOME, for each process
277                  is not scalable, i.e. the shared filesystem may be hanging.
278                  MPE_SAME_TMPDIR=false is provided for cases that MPE_TMPDIR
279                  has to be set differently on different process but it is
280                  in general not scalable when MPI_COMM_WORLD's size >> 1K.
281
282 MPE_DELETE_LOCALFILE:  The boolean value determines whether to delete the
283                        temporary local clog2 file.  When this flag is
284                        set to true, user needs to collect from the temporary
285                        clog2 files from each slave node's MPE_TMPDIR.
286                        Then separate serial programs, clog2_join and 
287                        clog2_repair, can be used to merge the local clog2 
288                        files.  This process is useful e.g. when MPI_Finalize()
289                        fails to complete properly, e.g.  due to user program
290                        overwritten to MPE/MPI internal data structures.
291
292 MPE_CLOCKS_SYNC: The boolean value determines the behavior of
293                  MPE_Log_sync_clocks() and the default clock synchronization
294                  at the end of logging.  Users may way to force MPE
295                  clock synchronization when the MPI implementation has
296                  buggy clock synchronization mechanism, e.g. Some versions
297                  of BG/L MPI's MPI_WTIME_IS_GLOBAL is incorrectly set
298                  to true when 64-ways or 256-ways partition is used.
299
300 MPE_SYNC_ALGORITHM: specifies the clock synchronization algorithm.  The
301                     accepted values are "DEFAULT", "SEQ", "BITREE" 
302                     and "ALTNGBR".
303                     SEQ: a O(N) steps algorithm and is non-scalable and slowest
304                          but is also the most accurate.
305                     BITREE: a O(log2(N)) steps algorithm, scalable and much
306                             faster than SEQ but less accurate than SEQ.
307                             A good compromise.
308                     ALTNGBR: a O(1) steps algorithm, perfectly parallel
309                              is the fastest of 3 algorithms supported.
310                              It is also the least accurate.
311                     DEFAULT: uses SEQ when the number of processes <= 16.
312                              uses BITREE when number of processes > 16.
313
314 MPE_SYNC_FREQUENCY: specifies the number of iterations of selected clock
315                     synchronization.  In general, the higher of
316                     MPI_SYNC_FREQUENCY, the higher the probability of
317                     obtaining a accurate measurement of all the clocks,
318                     i.e. less error.  Keep in mind, this is generally
319                     not a guarantee and is highly dependent of the system
320                     noise.  The default is 3.
321
322 MPE_LOGFILE_PREFIX: specifies the filename prefix of the output logfile.
323                     The file extension will be determined by the output
324                     logfile format, i.e. MPE_LOG_FORMAT.
325
326 MPE_LOG_FORMAT: determines the format of the logfile generated from the 
327                 execution of application linked with MPE logging libraries.  
328                 The allowed value for MPE_LOG_FORMAT is CLOG2 only.
329                 So there is no need to use this variable at the moment.
330
331 MPE_LOG_OVERHEAD: The boolean value determines to log MPE/CLOG2's internal
332                   profiling state CLOG_Buffer_write2disk(). The default
333                   setting is yes.  CLOG_Buffer_write2disk labels region
334                   in each process that MPE/CLOG2 spends on flushing logging
335                   data in the memory to the disk.  The frequency and location
336                   of CLOG_Buffer_write2disk state can be altered by changing
337                   CLOG_BLOCK_SIZE and/or CLOG_BUFFERED_BLOCKS.
338
339 MPE_LOG_RANK2PROCNAME: The boolean value determines if a .clog2.pnm file
340                        that contains the MPI_COMM_WORLD rank to processor
341                        name determined by MPI_Get_processor_name().  The
342                        default is No.
343
344 MPE_WRAPPERS_ADD_LDFLAGS: The variable tells MPE wrappers, mpecc/mpefc
345                           (includes mpich2's mpicc and friends), to use
346                           LDFLAGS added by MPE, e.g. -Wl,--export-dynamic.
347                           The default is yes.  User can override it by
348                           setting it to "no" or "false".
349
350 MPE_USE_FCONSTS_IN_MPIH : The boolean value determines if MPI_F_* constants
351                           from mpi.h will be used.  By default, MPE computes
352                           the MPI_F_* constants instead of reading from mpi.h.
353                           The affected constants are MPI_F_STATUS(ES)_IGNORE.
354
355 Possible boolean values are "true", "false", "yes" and "no" in either
356 all lower or upper cases.
357
358
359 For MPE X11 graphics, environment variables DISPLAY set in each process
360 is read during MPE_Open_graphics.
361
362 DISPLAY: determines where MPE X11 graphics on each process is connected to.
363
364
365
366 VI. c) EXAMPLE MAKEFILE 
367 -----------------------
368
369 The install directories, share/examples_logging, share/example_graphics and
370 share/example_collchk contain some very useful and simple example programs.
371 The Makefiles in these directories illustrate the usage of MPE routines
372 and how to link with various MPE libraries. In most cases, users can simply
373 copy the share/examples_logging/Makefile to their home directory, and do a
374 "make" to compile the suggested targets.  Users don't need to copy the
375 .c and .f files when MPE has been compiled with a MAKE that has VPATH
376 support.  The created executables can be launched with mpiexec or mpirun
377 from the MPI implementation to generate sample logfiles.
378
379
380
381 VI. d) UTILITY PROGRAMS
382 -----------------------
383
384 In bin/, user can find several useful utility programs when manipulating 
385 logfiles.  These includes log format converters, log format print programs,
386 and logfile display program,
387
388
389 Log Format Converters
390 ---------------------
391
392 clog2TOslog2 : a CLOG2 to SLOG-2 logfile convertor.  For more details,
393               do "clog2TOslog2 -h".
394
395 rlogTOslog2 : a RLOG to SLOG-2 logfile convertor.  For more details,
396               do "rlogTOslog2 -h".  Where RLOG is an internal MPICH2 logging
397               format.
398
399 logconvertor : a standalone GUI based convertor that invokes clog2TOslog2
400                or rlogTOslog2 based on logfile extension.  The GUI also
401                shows the progress of the conversion.  The same convertor
402                can be invoked from within the logfile viewer, jumpshot.
403
404 slog2filter : a SLOG-2 to SLOG-2 logfile convertor.  It allows for removal
405               unwanted categories (when used with slog2print -c).  It also
406               allows for changing of the SLOG-2 internal structure, e.g.
407               modify the duration of preview drawable.  The tool reads
408               and writes SLOG-2 file of same version.
409
410 slog2updater: a SLOG-2 file format update utility.  It is essentially
411               a slog2filter that reads in older SLOG-2 file and writes
412               out the latest SLOG-2 file format.
413
414
415 Log Format Print Programs
416 -------------------------
417
418 clog2_print : a stdout print program for CLOG file.
419               Java version is named as clogprint.
420
421 clog2_join  : a clog2 serial merging program that merges clog2 files
422               1) temporary local clog2 files which all are from the
423                  same MPI_COMM_WORLD.
424               2) merged clog2 files from each MPI_COMM_WORLDs
425                  (Incomplete!, timestamps are not sync'ed yet.)
426
427 clog2_repair : a clog2 repair program that tries to fix the missing data
428                of a clog2 file (when the MPI program that is being profiled
429                aborts) so that the file can be processed by other tools
430                like clog2TOslog2.
431
432 rlog_print  : a stdout print program for SLOG-2 file.
433
434 slog2print  : a stdout print program for SLOG-2 file.
435
436
437
438 Log File Display Program 
439 ------------------------
440
441 jumpshot : the Jumpshot-4 launcher script.  Jumpshot-4 does logfile
442            conversion as well as visualization.
443
444 To view a logfile, say fpilog.slog2, do
445
446 jumpshot fpilog.slog2
447
448 The command will select and invoke Jumpshot-4 to display the content
449 of SLOG-2 file if Jumpshot-4 has been built and installed successfully.
450
451 One can also do
452
453 jumpshot fpilog.clog2
454
455 or
456
457 jumpshot barrier.rlog
458
459 Both will invoke the logfile convertor first before visualization.
460
461
462 Collective and Datatype Checking
463 --------------------------------
464
465 Linking an MPI application with the collective and datatype checking library
466 as follows
467
468 mpicc -o mpi_pgm *.o -L<mpe2_libdir> -lmpe_collchk.
469
470 Or using compiler wrappers (more details in next section), e.g.
471
472 (with mpich2's compiler wrapper)
473 mpicc -mpe=mpicheck -o mpi_pgm *.o
474
475 (with MPE's compiler wrapper)
476 mpecc -mpe=mpicheck -o mpi_pgm *.o
477
478
479 Convenient Compiler Wrappers
480 ----------------------------
481
482 Standalone MPE installation with non-MPICH2 will see 2 convenient compiler
483 wrappers mpecc and mpefc which mimic the typical usage of mpicc/mpif77/mpif90
484 in MPICH* by providing convenient compilation and linking switches.
485 mpecc is for C program, and mpefc is for Fortran program.  Typically,
486 user can use mpecc as follows:
487
488 mpecc -mpilog -o cpilog cpilog.c
489
490 which is equivalent to doing
491
492 mpicc -o cpilog cpilog.c -L<mpe2_libdir> -llmpe -lmpe
493
494 Available MPE profiling options for "mpecc" and "mpefc" are as follows:
495
496     -mpilog     : Automatic MPI and MPE user-defined states logging.
497                   This links against -llmpe -lmpe.
498
499     -mpitrace   : Trace MPI program with printf.
500                   This links against -ltmpe.
501
502     -mpianim    : Animate MPI program in real-time.
503                   This links against -lampe -lmpe.
504
505     -mpicheck   : Check MPI Program with the Collective & Datatype
506                   Checking library.  This links against -lmpe_collchk.
507
508     -graphics   : Use MPE graphics routines with X11 library.
509                   This links against -lmpe <X11 libraries>.
510
511     -log        : MPE user-defined states logging.
512                   This links against -lmpe.
513
514     -nolog      : Nullify MPE user-defined states logging.
515                   This links against -lmpe_null.
516
517     -help       : Print this help page.
518
519
520 MPE has been seamlessly integrated into MPICH2 and MPICH distributions,
521
522 In MPICH2, all the convenient compilation and linking switches described above
523 are provided through -mpe= option in mpicc/mpicxx/mpif77/mpif90.  For instance,
524 to compile and link cpilog with automatic MPI logging library can be done
525 as follows
526
527 mpicc -mpe=mpilog -o cpilog cpilog.c
528
529 which is equivalent to the mpecc command
530
531 mpecc -mpilog -o cpilog cpilog.c
532
533
534 In MPICH(the old one), the compiler wrappers, mpicc/mpiCC/mpif77/mpif90 
535 do not provide all the convenient switches listed above, only 3 of them
536 are available.  These options are :
537
538 -mpitrace   - to compile and link with tracing library.
539 -mpianim    - to compile and link with animation libraries.
540 -mpilog     - to compile and link with logging libraries.
541
542 For instance, the following command creates executable, {\tt fpilog}, which
543 generates logfile when it is executed.
544
545 mpif77 -mpilog -o fpilog fpilog.f 
546
547
548
549
550 VII. Using MPE in MPICHx
551 ------------------------
552
553 VII. a) Inheritance of Environmental Variables
554 ----------------------------------------------
555 MPE relies on certain environmental variables (e.g. MPE_TMPDIR).  These
556 variables determine how MPE behaves.  It is important to make sure that
557 all the MPI processes receive the intended value of environmental variables.
558 The complication of this issue comes from the fact that different MPI
559 implementations have different ways of passing environmental varaiable.  For
560 instance, MPICH contains many different devices for different platforms,
561 some of these devices have their unique way of passing of environmental
562 variables to other processes.  The often used devices, like ch_p4 and ch_shmem,
563 do not require special attention to pass the value of the environmental 
564 variable to spawned processes.  The spawned process inherits the value from
565 the launching process when the environmental variable in the launching
566 process has been set.  But this is NOT true for all the devices, for instance,
567 the ch_p4mpd device requires special option of mpirun to set environmental
568 variables to all processes.
569
570 mpirun -np N fpilog -MPDENV- MPE_LOGFILE_PREFIX=fpilog
571
572 In this example, the option -MPDENV- is needed to make sure
573 that all processes have their environmental variable, MPE_LOGFILE_PREFIX,
574 set to the desirable output logfile prefix.
575
576
577 In MPICH2, when using MPD as a process manage, passing MPE_LOGFILE_PREFIX
578 and MPE_TMPDIR can be done as follows:
579
580 mpiexec -env MPE_LOGFILE_PREFIX <output-logname-prefix> \
581         -env MPE_TMPDIR <local-tmp-dir> -n 32 <executable-name>
582
583 Also, with MPE X11 graphics library, the local DISPLAY variable set on each
584 process is read (so ssh tunnelling can be used), for examples assume
585 an mpd ring has been set up by on 2 machines, schwinn and triumph, as follows:
586
587 cat > mpd.hosts << EOF
588 schwinn
589 triumph
590 EOF
591
592 mpdboot -n 2 -f mpd.hosts
593
594 Now launch MPE X11 graphics sample code, cxgraphics, as follows:
595
596 mpiexec -host schwinn -env DISPLAY <display_0> cxgraphics : \
597         -host triumph -env DISPLAY <display_1> cxgraphics
598
599 Where <display_0> and <display_1> are the local DISPLAY variable
600 echoed from consoles connected to schwinn and triumph respectively.
601
602
603 For other MPI implementations, how environmental variables are passed
604 remains unchanged.  User needs to get familar with the runtime environment
605 and set the environmental variables appropriately.
606
607
608 VII. b) Viewing Logfiles
609 ------------------------
610 MPE's install directory structure is the same as MPICH's and MPICH-2's.
611 So all MPE's utility programs will be located in the bin/ directory of 
612 MPICH and MPICH-2.
613