Skip to content

HPCC cluster Benchmark

7 septembre 2010

La présentation est une traduction du site web hpcc.

Le Benchmark HPCC (http://icl.cs.utk.edu/hpcc) est constitué de sept tests

  1. 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.
  2. DGEMM – mesure la rapidité d’exécution en virgule flottante pour le produit de matrices en double précision.
  3. 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).
  4. 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.
  5. RandomAccess – mesure la vitesse de mise à jour de la mémoire par un test mettant en jeu des entiers aléatoires.
  6. FFT – mesure la rapidité d’exéction en double précision à virgule flottante en complexe pour une transformation de Fourrier complexe.
  7. 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.

One Comment leave one →
  1. 8 septembre 2010 10 h 16 mi

    Sur un vrai cluster (petit tout de même), 32 coeurs assez vieux (AMD de 5 ans 2.6 GHz) avec un réseau en Gigabit, j’arrive à 74 GFlops/s au HPL, une latence sur des paquets de 8b de 8.5 ns un bande passante sur des paquets de 2 Mb variant de 100 à 5OO Mo/s (je n’espérais pas plus de 300, donc c’est pas mal).

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :