HPCC cluster Benchmark
La présentation est une traduction du site web hpcc.
Le Benchmark HPCC (http://icl.cs.utk.edu/hpcc) est constitué de sept tests
- HPL – Le benchmark linpack TPP qui mesure la rapidité d’exécution en virgule flottante pour la résolution d’une système d’équations linéaires.
- DGEMM – mesure la rapidité d’exécution en virgule flottante pour le produit de matrices en double précision.
- STREAM – un simple benchmark qui mesure la bande passante de la mémoire (en GB/s) et un autre truc lié au kernel (??? avis aux traducteurs avisés).
- PTRANS (Transposition de matrice en Parralèlle) – met sous contrainte les communications entre processeurs pour le calcul parallèle. Ce test est pratique pour connaître la capacité totale du réseau du point de vue des échanges de données.
- RandomAccess – mesure la vitesse de mise à jour de la mémoire par un test mettant en jeu des entiers aléatoires.
- FFT – mesure la rapidité d’exéction en double précision à virgule flottante en complexe pour une transformation de Fourrier complexe.
- Communication bandwidth and latency – un panel de tests pour mesurer la latence et la bande passante pour un nombre de communications simultanées, basé sur b_eff (effective bandwidth benchmark).
Mise en oeuvre du Benchmark:
wget http://icl.cs.utk.edu/projectsfiles/hpcc/download/hpcc-1.4.1.tar.gz tar -xvzf hpcc-1.4.1.tar.gz cd hpcc-1.4.1
Il fut installer les paquets nécessaires au fonctionnement du Benchmark:
pacman -S yaourt #Si pas déjà fait yaourt -S openmpi yaourt -S mpich2 yaourt -S atlas-lapack
Là il faut installer un Makefile dans le répertoire hpl. Des fichiers exemple sont données dans hpl/setup.
Ci-joint celui que j’ai pour exemple (marche sur Archlinux). Je l’ai appelé Make.Linux.
# ---------------------------------------------------------------------- # - shell -------------------------------------------------------------- # ---------------------------------------------------------------------- # SHELL = /bin/sh # CD = cd CP = cp LN_S = ln -s MKDIR = mkdir RM = /bin/rm -f TOUCH = touch # # ---------------------------------------------------------------------- # - Platform identifier ------------------------------------------------ # ---------------------------------------------------------------------- # ARCH = $(arch) # # ---------------------------------------------------------------------- # - HPL Directory Structure / HPL library ------------------------------ # ---------------------------------------------------------------------- # TOPdir = ../../.. INCdir = $(TOPdir)/include BINdir = $(TOPdir)/bin/$(ARCH) LIBdir = $(TOPdir)/lib/$(ARCH) # HPLlib = $(LIBdir)/libhpl.a # # ---------------------------------------------------------------------- # - Message Passing library (MPI) -------------------------------------- # ---------------------------------------------------------------------- # MPinc tells the C compiler where to find the Message Passing library # header files, MPlib is defined to be the name of the library to be # used. The variable MPdir is only used for defining MPinc and MPlib. # MPdir = /opt/mpich2/ MPinc = -I$(MPdir)/include MPlib = $(MPdir)/lib/libmpich.a # # ---------------------------------------------------------------------- # - Linear Algebra library (BLAS or VSIPL) ----------------------------- # ---------------------------------------------------------------------- # LAinc tells the C compiler where to find the Linear Algebra library # header files, LAlib is defined to be the name of the library to be # used. The variable LAdir is only used for defining LAinc and LAlib. # LAdir = /usr/lib LAinc = LAlib = $(LAdir)/libf77blas.a $(LAdir)/libatlas.a # # ---------------------------------------------------------------------- # - F77 / C interface -------------------------------------------------- # ---------------------------------------------------------------------- # You can skip this section if and only if you are not planning to use # a BLAS library featuring a Fortran 77 interface. Otherwise, it is # necessary to fill out the F2CDEFS variable with the appropriate # options. **One and only one** option should be chosen in **each** of # the 3 following categories: # # 1) name space (How C calls a Fortran 77 routine) # # -DAdd_ : all lower case and a suffixed underscore (Suns, # Intel, ...), [default] # -DNoChange : all lower case (IBM RS6000), # -DUpCase : all upper case (Cray), # -DAdd__ : the FORTRAN compiler in use is f2c. # # 2) C and Fortran 77 integer mapping # # -DF77_INTEGER=int : Fortran 77 INTEGER is a C int, [default] # -DF77_INTEGER=long : Fortran 77 INTEGER is a C long, # -DF77_INTEGER=short : Fortran 77 INTEGER is a C short. # # 3) Fortran 77 string handling # # -DStringSunStyle : The string address is passed at the string loca- # tion on the stack, and the string length is then # passed as an F77_INTEGER after all explicit # stack arguments, [default] # -DStringStructPtr : The address of a structure is passed by a # Fortran 77 string, and the structure is of the # form: struct {char *cp; F77_INTEGER len;}, # -DStringStructVal : A structure is passed by value for each Fortran # 77 string, and the structure is of the form: # struct {char *cp; F77_INTEGER len;}, # -DStringCrayStyle : Special option for Cray machines, which uses # Cray fcd (fortran character descriptor) for # interoperation. # F2CDEFS = -DAdd_ -DF77_INTEGER=int -DStringSunStyle # # ---------------------------------------------------------------------- # - HPL includes / libraries / specifics ------------------------------- # ---------------------------------------------------------------------- # HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc) HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib) -lm # # - Compile time options ----------------------------------------------- # # -DHPL_COPY_L force the copy of the panel L before bcast; # -DHPL_CALL_CBLAS call the cblas interface; # -DHPL_CALL_VSIPL call the vsip library; # -DHPL_DETAILED_TIMING enable detailed timers; # # By default HPL will: # *) not copy L before broadcast, # *) call the BLAS Fortran 77 interface, # *) not display detailed timing information. # HPL_OPTS = # # ---------------------------------------------------------------------- # HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES) # # ---------------------------------------------------------------------- # - Compilers / linkers - Optimization flags --------------------------- # ---------------------------------------------------------------------- # CC = mpicc CCNOOPT = $(HPL_DEFS) CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall # # On some platforms, it is necessary to use the Fortran linker to find # the Fortran internals used in the BLAS library. # LINKER = mpif77 LINKFLAGS = $(CCFLAGS) # ARCHIVER = ar ARFLAGS = r RANLIB = echo # # ----------------------------------------------------------------------
Ensuite , il faut compiler :
make all arch=Linux
Arch est égal à Linux car le makefile s’appelle Make.Linux.
Il faut ensuite lancer le programme:
mv _hpccinf.txt hpccinf.txt # l'Editer pour ajuster les paramètres mpirun -np 4 hpcc
Bilan: SpareBabasse fait 2.69 Gflops au test hpl avec -np 1 et 2.41 + 2.39 avec -np 2
Pas si mal pour elle!
Edit: Si vous avez effectués des tests, n’hésitez pas à mettre les résultats en commentaires avec une description de vos machines.