Apr 08

Installing MPPTest for RPi Cluster Performance Measurenebt

Overview

This post documents my experience installing and executing MPPTest. MPPTest is distributed with the MPICH package’s. I used the “logscale” test to verify the install. A future post will describe the tests available in MPPTest and hopefully analysis information.

The following is in the description:
“”The greatest challenge in performing these experiments in making the results reproducible.  On many (most?) systems, there are various events that  perturb timings; these can occur on the scale of 10′s of milliseconds.  To attempt to remove the effect of these events, we make multiple tests, taking the minimum of many tests, each of which gives an average time.  To reduce the effect of transient perturbations, the entire sequence of tests is run several times, taking the best (fastest) time on each test.  Finally,  a post-processing step retests any anomolies, defined as single peaks peaks that are significantly greater than the surrounding times (using a locally linear-fit model).”

Installing MPPTest

  • Using MPPTEST – Measuring MPI Performance  Follow the README instructions.
  • Downloaded version of mpptest for any MPI implementation
    $ mkdir ~mpptest
  • Download MPPTest
    $ cd ~/mpptest
    $ sudo wget ftp://ftp.mcs.anl.gov/pub/mpi/tools/perftest.tar.gz
    $ tar -xzvf perftest.tar.gz
  • Prepare for execution
    $ cd  ~/mpptest/perftest-1.5
    $ export PATH=$PATH:/home/rpimpi/mpich-install/bin
    $ ./configure –with-mpich
    (See Appendix A for results)
    $ make  (makes the mpptest program. See Appendix B for output)

    Important!

    Clone the mpptest directory to the other computer.

Testing using Logscale function

  • Testing 2 processes in single computer
    $ cd  ~/mpptest/perftest-1.5
    $ export PATH=$PATH:/home/rpimpi/mpich-install/bin
    $ mpirun -np 2 ~/mpptest/perftest-1.5/mpptest -logscale -bisect
    (See Appendix C for outpit of 2 processes in a single computer)
    (It took around 10 minutes)
  • Testing 2 node cluster
    Now for a 2node cluster I created “machinefile” and added 192.168.1.5 and 192.168.1.6 lines)
    $ mpiexec  -f ~/mpptest/perftest-1.5/machinefile  ~/mpptest/perftest-1.5/mpptest -logscale -bisect
    (See Appendix D Outputput for a 2 Node cluster)
    (It took around 10 minutes)
  • I had to set up RSA keys
    $ cd ~
    $ sudo ssh-keygen -t rsa -C “raspberrypi@raspberrypi”
    $ sudo cat ~/.ssh/id_rsa.pub | ssh pi@192.168.1.6 “ls .ssh; cat >> .ssh/authorized_keys”
    $ chmod 777 ~/mpptest/perftest-1.5  (Not sure about this)

Appendix A – Results of Configure

checking for a BSD-compatible install… /usr/bin/install -c
checking whether build environment is sane… yes
checking for a thread-safe mkdir -p… /bin/mkdir -p
checking for gawk… no
checking for mawk… mawk
checking whether make sets $(MAKE)… yes
checking for grep that handles long lines and -e… /bin/grep
checking for fgrep… /bin/grep -F
checking for gcc… gcc
checking for C compiler default output file name… a.out
checking whether the C compiler works… yes
checking whether we are cross compiling… no
checking for suffix of executables…
checking for suffix of object files… o
checking whether we are using the GNU C compiler… yes
checking whether gcc accepts -g… yes
checking for gcc option to accept ISO C89… none needed
checking for style of include used by make… GNU
checking dependency style of gcc… none
checking for mpicc… /home/rpimpi/mpich-install/bin/mpicc
checking for mpif77… /home/rpimpi/mpich-install/bin/mpif77
checking for mpif90… /home/rpimpi/mpich-install/bin/mpif90
checking for mpiCC… no
checking for mpiexec… /home/rpimpi/mpich-install/bin/mpiexec
checking for mpirun… /home/rpimpi/mpich-install/bin/mpirun
checking for mpichboot… no
checking for mpichstop… no
checking for cc… (cached) /home/rpimpi/mpich-install/bin/mpicc
checking whether the C compiler sets its return status correctly… yes
checking whether we are using the GNU Fortran 77 compiler… yes
checking whether /home/rpimpi/mpich-install/bin/mpif77 accepts -g… yes
checking for make… make
checking whether clock skew breaks make… no
checking whether make supports include… yes
checking whether make allows comments in actions… yes
checking for virtual path format… VPATH
checking whether make sets CFLAGS… yes
checking for perl… /usr/bin/perl
checking for cit… no
checking for gnuplot… no
checking whether C compiler accepts option -O4 -Ofast… yes
checking whether routines compiled with -O4 -Ofast can be linked with ones compiled without -O4 -Ofast… yes
checking whether C compiler accepts option -fomit-frame-pointer… yes
checking whether routines compiled with -fomit-frame-pointer can be linked with ones compiled without -fomit-frame-pointer… yes
checking whether C compiler accepts option -finline-functions… yes
checking whether routines compiled with -finline-functions can be linked with ones compiled without -finline-functions… yes
checking whether C compiler accepts option -funroll-loops… yes
checking whether routines compiled with -funroll-loops can be linked with ones compiled without -funroll-loops… yes
checking for library containing fabs… -lm
checking how to run the C preprocessor… /home/rpimpi/mpich-install/bin/mpicc -E
checking for egrep… /bin/grep -E
checking for ANSI C header files… yes
checking for sys/types.h… yes
checking for sys/stat.h… yes
checking for stdlib.h… yes
checking for string.h… yes
checking for memory.h… yes
checking for strings.h… yes
checking for inttypes.h… yes
checking for stdint.h… yes
checking for unistd.h… yes
checking for library containing MPI_Init… none required
checking mpi.h usability… yes
checking mpi.h presence… yes
checking for mpi.h… yes
checking for ANSI C header files… (cached) yes
checking sys/time.h usability… yes
checking sys/time.h presence… yes
checking for sys/time.h… yes
checking for stdlib.h… (cached) yes
checking for string.h… (cached) yes
checking whether time.h and sys/time.h may both be included… yes
checking whether struct tm is in sys/time.h or time.h… time.h
checking for an ANSI C-conforming const… yes
checking for C/C++ restrict keyword… __restrict
checking for long long… yes
Compile MPI programs with /home/rpimpi/mpich-install/bin/mpicc     -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops
Link MPI programs with /home/rpimpi/mpich-install/bin/mpicc
Run MPI programs with /home/rpimpi/mpich-install/bin/mpiexec -n n
configure: creating ./config.status
config.status: creating Makefile
config.status: creating runhalo
config.status: creating extractdata
config.status: creating rundefs
config.status: creating mpptestconf.h
config.status: executing depfiles commands

Appendix B – Output from MPPTest make

make  all-am
make[1]: Entering directory `/home/pi/mpptest/perftest-1.5′
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c mpptest.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c gopf.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c grph.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c ovlap.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c pair.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c pattern.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c getopts.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c rate.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c mpe_seq.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c copy.c
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c halo.c
/home/rpimpi/mpich-install/bin/mpicc -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops    -o mpptest mpptest.o gopf.o grph.o ovlap.o pair.o pattern.o getopts.o rate.o mpe_seq.o copy.o halo.o  -lm
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c goptest.c
/home/rpimpi/mpich-install/bin/mpicc -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops    -o goptest goptest.o gopf.o grph.o ovlap.o pair.o pattern.o getopts.o rate.o mpe_seq.o copy.o  -lm
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c buflimit.c
/home/rpimpi/mpich-install/bin/mpicc -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops    -o buflimit buflimit.o  -lm
/home/rpimpi/mpich-install/bin/mpicc -DHAVE_CONFIG_H -I.    -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops  -c winoverhead.c
/home/rpimpi/mpich-install/bin/mpicc -O4 -Ofast -fomit-frame-pointer -finline-functions -funroll-loops    -o winoverhead winoverhead.o  -lm
make[1]: Leaving directory `/home/pi/mpptest/perftest-1.5′

Appendix C – Output from -logscale – bisect (2 processes/single computer)

ptest -logscale -bisect
set default
set font variable
set curve window y 0.15 0.90
set order d d d x y d
set scale x log y log
title left ‘time (us)’, bottom ‘Size (bytes)’,
top ‘Comm Perf for MPI (raspberrypi01)’,
‘type = blocking-bisect’

#p0    p1    dist    len    ave time (us)    rate
0         1       1    4        9199.690819    434.80
0         1       1    8        9499.711990    842.13
0         1       1    16       9099.769592    1.758e+3
0        1       1    32        9399.688244    3.404e+3
0         1       1    64      9149.191380    6.995e+3
0         1       1    128    8999.700546    14.223e+3
0         1       1    256    9199.728966    27.827e+3
0         1       1    512     9299.438000    55.057e+3
0         1       1    1024    9499.371052    107.797e+3
0         1       1    2048    9399.499893    217.884e+3
0         1       1    4096     9299.831390    440.438e+3
0         1       1    8192     9299.709797    880.888e+3
0         1       1    16384    9566.910267    1.713e+6
0         1       1    32768    9499.740601    3.449e+6
0         1       1    65536    28899.719715    2.268e+6
0        1       1    131072    29099.459648    4.504e+6
plot square
join
wait
new page

Appendix D – Output from -logscale – bisect (2 node cluster)

hinefile  ~/mpptest/perftest-1.5/mpptest -logscale -bisect
set default
set font variable
set curve window y 0.15 0.90
set order d d d x y d
set scale x log y log
title left ‘time (us)’, bottom ‘Size (bytes)’,
top ‘Comm Perf for MPI (raspberrypi01)’,
‘type = blocking-bisect’

#p0    p1    dist    len    ave time (us)    rate
0        1       1       4      517.961979    7.723e+3
0        1       1       8      514.299870    15.555e+3
0        1       1      16    508.129597    31.488e+3
0        1       1      32    546.710491    58.532e+3
0         1       1      64    564.990044    113.276e+3
0         1       1    128    568.900108    224.996e+3
0         1       1    256    588.250160    435.189e+3
0         1       1    512    654.530525    782.240e+3
0         1       1    1024    835.330486    1.226e+6
0         1       1    2048    1136.760712    1.802e+6
0         1       1    4096    1408.660412    2.908e+6
0         1       1    8192    1896.660328    4.319e+6
0         1       1    16384    2856.578827    5.736e+6
0         1       1    32768    4220.640659    7.764e+6
0         1       1    65536    7274.751663    9.009e+6
0         1    1    131072    14639.809132    8.953e+6
plot square
join
wait
new page

Older posts «