$COPYRIGHT$ This test directory has been modified by the LAM Team at the University of Notre Dame. It is based on a modified version of the IBM test suite which was originally derived from an MPICH test suite (see text below). Questions and comments should be directed to the LAM Team (lam@lam-mpi.org), not to the original IBM or MPICH authors. Overview: ========= NOTE: This test suite *can* be used with other implementations of MPI. See the "make-defs" file, and set a few simple macros at the top. Everything else should be automatic; "make-defs" should be the *only* file that you need to change. The LAM Team requests that you compile and run this test suite after successfully installing LAM on your system. The following caveats apply to this test suite: - You cannot run this test suite as root; root is specifically disallowed to run most LAM/MPI executables (including lamboot and mpirun). - The tests are designed to run on homogeneous groups of machines. Since this test suite is designed to be simplistic, very little is assumed about the target execution environment. For example, a common filesystem between the nodes under test is not required. It is not difficult to edit "make-defs" in the top-level directory to make the test suite fit your environment and test MPI a bit more strenuously. Documentation is included in the make-defs file. - The automated reporting of this test suite uses MPI_Send() and MPI_Recv() to collate results between ranks. As such, it assumes that these functions work properly. If you can run the examples that come with LAM/MPI, these functions can be assumed to be working [at least] well enough to run the automated report collating in this test suite. If the examples don't even work properly, there are some fundamental problems with your installation -- you don't need this test suite to tell you that. The purpose of this package is to run a series of tests against the LAM/MPI implementation. It will highlight potential problems and bugs, and will be very helpful for the validation of the overall LAM/MPI package. As mentioned above, it *must* be run on homogenous systems, and use the -O option to LAM's mpirun (this allows LAM to use "natural" byte ordering and bypass some checks that happen on little endian machines, such as Intel x86 architectures). Instructions (short version): ============================= To compile and run the test suite: 1. lamboot at least 1 node (2 or more is better). 2. Ensure the correct "mpicc" and "mpirun" are in your path. 3. Set the environment variable CFLAGS and/or LDFLAGS if necessary. (e.g., to force 64 bit compilation, or force your compiler to accept ANSI prototypes) 4. Run "make". 5. Wait until the test suite finishes compiling and running. 6. Look for "Total errors: 0" line at the end of the output. 7. If there are any errors, send all relevant information to the LAM mailing list: lam@lam-mpi.org. See http://www.lam-mpi.org/mailman/listinfo.cgi/lam for information on how to join the mailing list. Instructions (long version): ============================ To compile and run the test suite: 1. Boot up a LAM with at least 1 node (i.e., do a successful lamboot). Most tests use 2 nodes. 2. Be sure that the "mpirun" and "mpicc" for the new version of LAM are in your $PATH, and that older versions of LAM are ***not*** in your path. You may need to edit your .cshrc/.profile/.whatever file to ensure that this is true for all nodes that you will be running on. 3. Set the environment variable CFLAGS or LDFLAGS to any relevant values. For example, to compile in 64-bit mode under Solaris 7 (for csh-type shells): unix% setenv CFLAGS -xarch=v9 unix% setenv LDFLAGS -xarch=v9 Using the Bourne shell: unix% CFLAGS=-xarch=v9 unix% LDFLAGS=-xarch=v9 unix% export CFLAGS LDFLAGS Many of the lamtests programs use ANSI C prototypes. Some older C compilers may require additional command line flags to properly compile this code. For example, old C compilers under HP-UX 10.20 require the "-Ae" flag in CFLAGS to compile lamtests properly. Note that some compilers are picky about using the same flags between compiling the LAM MPI library and compiling (and linking) applications to that MPI library. For example, if you compiled LAM/MPI with "-O", you should probably set CFLAGS and LDFLAGS to "-O" before running the test suite. Some compilers (cough cough Sun Workshop 5.0 cough cough) have been known to give odd linking errors when this is the case. 4. Run "make" in the top level directory. This will both compile the test suite and run all the tests. Each test program will be run in "-lamd" and "-c2c" modes to test both aspects of the LAM message passing engine. To capture the output while it is running, you may wish to run (for csh-type shells): % make |& tee make.out 5. Wait for the test suite to finish compiling / running. If some kind of fatal error occurs in the middle of the run, please attempt to finish the rest of the tests. You can do this manually, or use one of the alternate "make" targets from the top-level directory that have been provided to "jump start" the tests: ccl-all ccl-c2c ccl-lamd comm-all comm-c2c comm-lamd dtyp-all dtyp-c2c dtyp-lamd dynamic-all dynamic-c2c dynamic-lamd env-all env-c2c env-lamd group-all group-c2c group-lamd io-all io-c2c io-lamd lam-all lam-c2c lam-lamd onesided-all onesided-c2c onesided-lamd pt2pt-all pt2pt-c2c pt2pt-lamd topo-all topo-c2c topo-lamd For example (for csh-type shells): % make ccl-all topo-lamd |& tee tests.out will run the "ccl" group of tests in both the "-c2c" and "-lamd" modes, and the "topo" group of tests in the "-lamd" mode, as well as capture a copy of the output into the file "tests.out". 6. At the end of the run, a total error count will be printed, along with a summary of any errors encountered. If there were any errors, a report file will be generated in the top-level lamtests directory. If there were no errors, you'll see a "Total errors: 0" message. 7. If any errors occurred, please send the following information to the LAM mailing list (lam@lam-mpi.org): - *All* output (both compilation output and run time output, including all error messages) - The result of "uname -a" on your system - The result of "./config/config.guess" from the top-level LAM source directory. - Output from when you ran "./configure" to configure LAM - The config.log file from the top-level LAM directory - The share/include/lam_config.h file - Output from when you ran "make" to build LAM Only members are allowed to post to the list (mainly to control spam) -- see http://www.lam-mpi.org/mailman/listinfo.cgi/lam to join the list. Thank you for your time. - The LAM Team LAM modifications to this test suite: ===================================== The LAM modifications consist of: - LAM/MPI copyrights were added to the top of all .c files, above the IBM copyright notice - the reporting, dynamic, io, lam, and onesided directories are new for LAM/MPI; they were not included in the original IBM or MPICH test suites - all printf's were changed to lamtest_error() (or lamtest_fatal_error(), depending on context) to utilize centralized error collating functionality - new Makefiles; the target "testing" builds the programs and invokes the targets "testing-lamd" and "testing-c2c" - the mpirun commands use LAM's "-s h" option to ship the binary and thus work nicely in homogeneous clusters without complex setting of the directory names (heterogeneous clusters are not supported; the binaries are built once on the local host) - removal of some success-case and warning printf()s to reduce the output - the cancel-send test cases were deleted (LAM doesn't support it) - the sync-send and wtime test cases were redesigned - the "char*argv" typo was fixed - a datatype test case was fixed as it violated the rule: extent = ub - lb - some programs were renamed to avoid clashes with standard Unix commands - added a few "make" targets to make the test suite a little more user friendly - changed a few "int"s to "MPI_Aint"s where necessary - changed a spurrious "int" to "MPI_Request" - added an endian test to dtype/bakstr.c to ensure that the test happens right - forced -O on mpirun command line to ensure that LAM knows that it's homogeneous (the NULL buffer check in pt2pt/badbuf.c will only happen if LAM thinks we're either on a big endian machine or homogeneous) - added some tidying-up code to some of the programs to make them bcheck clean (a tool similar to purify) - changed some codes to malloc huge arrays rather than try to allocate them on the stack (allocating 100,000 int's on the stack causes seg faults and other Badness on some platforms) - changed some MPI_Send/MPI_Recv pairs to MPI_Sendrecv. This wasn't strictly necessary for the current LAM RPI's, but at least one user (Troy Baer) points out that using the lamtests suite with another MPI (MPICH/gm) causes deadlock. Assumedly, they have a very small "small" message size. Using MPI_Sendrecv is technically more correct, anyway. - changed comm/attr.c to only print a warning when MPI_TAG_UB is not what was expected when not using LAM/MPI. Thanks to Troy Baer for pointing this out. - changed the running part of the tests to be in a script rather than in the makefile; this obviated the need for deep mojo in the makefiles to make everything work nicer - made a bunch of exit(1) statements in dtyp/ tests be exit(0) so that LAM's mpirun wouldn't think that they errored out (they called exit(1) if they were invoked with more than one rank, and we invoke all tests with a default of 2 ranks, with a small number of exceptions) Contact information: ==================== Send feedback and bug reports to: lam@lam-mpi.org Original Copyright/Author Text: =============================== ****************************************************************************** This directory of tests has been modified by William Gropp of Argonne National Laboratory to both conform to the MPI Standard (mostly providing argc and argv to MPI_Init) and to contain MPICH-style makefiles. The original programs were provided by IBM. The target "testing" will build and test the programs, assuming that "mpirun" is used to run programs. To use with MPICH, you'll need to build the Makefiles. The easiest way to do this is with mpireconfig Makefile make makefiles where mpireconfig is the MPICH script to create Makefile's from Makefile.in's. ****************************************************************************** This is a very good (partial) test suite, and I recommend it to all MPI implementors. As of this writing, MPICH passes almost all of the tests, failing only tests of MPI_CANCEL (unimplemented in MPICH). Thanks to IBM for providing it. A few tests tests for particular behavior on errors (such as calling MPI_Barrier before MPI_Init) and as such are undefined. Comments on the differences with the original suite. Many of the programs failed to return a return value to the calling environment; a return 0; was added after most MPI_Finalize calls. A number of bugs of the form "if (a = b)" were fixed by changing to "if (a == b)". Some of the tests tested interpretations of the MPI Standard that do not match clarifications made by MPIF (particularly TEST/WAIT on empty lists); these have been updated to match the current spec. Some of the datatype tests tested a particular interpretation of the "padding" rule that was (a) implementation specific and (b) also changed in a clarification (making the resulting standard more portable). There are reports that some tests check for specific data lengths, for example, assuming that sizeof(int) == 4. If you find any of these, please send mail to mpi-bugs@mcs.anl.gov . Many of the tests created MPI objects (groups, communicators, etc) but did not free them. While this is not a bug, it made it hard to test for storage leaks in the MPI implementation, so I've added code right before the MPI_Finalize to free most objects.