GNU/Linux >> Tutoriales Linux >  >> Linux

HPL (Linpack de alto rendimiento):Evaluación comparativa de Raspberry PI

La evaluación comparativa es el proceso de ejecutar algunos de los programas estándar para evaluar la velocidad alcanzada por un sistema. Hay una serie de programas estándar de evaluación comparativa y en este tutorial comparamos el sistema Linux utilizando un programa bien conocido llamado HPL, también conocido como High Performance Linpack.

Introducción

En este tutorial, cubrimos cómo hacer una evaluación comparativa de un sistema de un solo procesador, el Raspberry Pi. Primero evaluaremos un solo nodo y luego continuaremos evaluando múltiples nodos, cada nodo representando una Raspberry Pi. Hay algunas cosas a tener en cuenta aquí. En primer lugar, la evaluación comparativa de un solo nodo o varios nodos tiene algunas dependencias que se deben satisfacer y que se tratarán en este tutorial. PERO, en varios nodos hay aún más dependencias, como la implementación de MPI (como MPICH u OpenMPI) que debe construirse y ejecutarse para que HPL funcione. Entonces, para comparar múltiples nodos, asumo que sus nodos tienen MPICH instalado y ejecutándose.

¿Qué es HPL?

HPL es un paquete de software que resuelve un sistema lineal denso (aleatorio) en aritmética de doble precisión (64 bits) en computadoras con memoria distribuida. El paquete HPL proporciona un programa de prueba y cronometraje para cuantificar la precisión de la solución obtenida, así como el tiempo necesario para calcularla. El mejor rendimiento que este software puede lograr en su sistema depende de una gran variedad de factores. Esta implementación es escalable en el sentido de que su eficiencia paralela se mantiene constante con respecto al uso de memoria por procesador. Por lo tanto, podemos usar esto para comparar un solo procesador o una serie de procesadores distribuidos en paralelo. Así que comencemos a instalar HPL.

1 Instalación de dependencias

HPL tiene algunas dependencias de software que deben satisfacerse antes de poder instalarlo. Ellos son:

  • gfortran - compilador de programas fortran
  • MPICH2:una implementación de MPI
  • mpich2-dev - herramientas de desarrollo
  • BLAS - Subprogramas básicos de álgebra lineal

Aquí asumimos que tiene MPICH2 instalado. Para instalar otras dependencias y paquetes, use el siguiente comando:

sudo apt-get install libatlas-base-dev libmpich2-dev gfortran

Solo hay que repetir este paso en cada uno de los nodos (Pis) presentes en el clúster.

2 Descarga HPL y configúralo

Descargue el paquete HPL desde aquí. Lo siguiente que debe hacer es extraer el archivo tar y crear un archivo MAKE basado en la plantilla dada. Abra la terminal y cambie el directorio a donde se almacena el archivo tar de HPL descargado. Ejecute el siguiente conjunto de comandos uno tras otro.

tar xf hpl-2.1.tar.gz
cd hpl-2.1/setup
sh make_generic
cd ..
cp setup/Make.UNKNOWN Make.rpi

El último comando copia el contenido de Make.UNKNOWN en Make.rpi. Hacemos esto porque el archivo make contiene todos los detalles de configuración del sistema (The raspberry pi) y también los detalles de varias bibliotecas como mpich2, paquetes atlas/blas, directorio de inicio, etc. En el siguiente paso, hacemos cambios al archivo Make.rpi.

3 Ajuste el archivo Make.rpi

Este es un paso importante. Los cambios que se muestran a continuación varían según su sistema. Aquí lo muestro con respecto a mi sistema. Tenga en cuenta que los siguientes cambios muestran parámetros que se distribuyen por todo el archivo Make.rpi. Por lo tanto, le sugiero que busque cada parámetro y reemplace o agregue los cambios y solo luego continúe con el siguiente parámetro.

Abra el archivo Make.rpi usando un editor de texto usando el comando:

nano Make.rpi

Realice los siguientes cambios en el archivo.

ARCH         = rpi
TOPdir       = $(HOME)/hpl-2.1
MPdir        = /usr/local/mpich2
MPinc        = -I $(MPdir)/include
MPlib        = $(MPdir)/lib/libmpich.a
LAdir        = /usr/lib/atlas-base/
LAlib        = $(LAdir)/libf77blas.a $(LAdir)/libatlas.a

4 Compilando el HPL

Una vez que el archivo Make está listo, podemos comenzar con la compilación del HPL. El archivo ".xhpl" estará presente en la carpeta "bin/rpi" dentro de la carpeta HPL. Ejecute el siguiente comando:

makeh arch=rpi

5 Creando el archivo de entrada HPL

El siguiente es un ejemplo del archivo "HPL.dat". Este es el archivo de entrada para HPL cuando se ejecuta. Los valores proporcionados en este archivo se utilizan para generar y calcular el problema. Puede usar este archivo directamente para ejecutar pruebas para un solo nodo. Cree un archivo dentro de la carpeta "bin/rpi" y asígnele el nombre "HPL.dat". copie el contenido a continuación en ese archivo.

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
5040         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
1            Ps
1            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

El contenido de este archivo debe variarse mediante el método de prueba y error, hasta que se obtenga un resultado satisfactorio. Para conocer cada uno de los parámetros y cómo cambiarlos, consulte un artículo aquí. Para saltar al punto principal, comience a leer desde la página no. 6 en ese documento.

6 Ejecución de HPL en un solo nodo

Una vez que el archivo HPL.dat esté listo, podemos ejecutar el HPL. El archivo HPL.dat anterior es para un solo nodo o procesador. El producto de los valores P*Q en el archivo anterior da la cantidad de procesadores para los que se está probando el HPL. Por lo tanto, del archivo anterior P=1 y Q=1, 1*1=1, por lo que es para un solo procesador. Ahora para ejecutarlo usa los comandos:

cd bin/rpi
./xhpl

El resultado es algo similar a lo que se muestra a continuación:

================================================================================
HPLinpack 2.1  --  High-Performance Linpack benchmark  --   October 26, 2012
Written by A. Petitet and R. Clint Whaley,  Innovative Computing Laboratory, UTK
Modified by Piotr Luszczek, Innovative Computing Laboratory, UTK
Modified by Julien Langou, University of Colorado Denver
================================================================================

An explanation of the input/output parameters follows:
T/V    : Wall time / encoded variant.
N      : The order of the coefficient matrix A.
NB     : The partitioning blocking factor.
P      : The number of process rows.
Q      : The number of process columns.
Time   : Time in seconds to solve the linear system.
Gflops : Rate of execution for solving the linear system.

The following parameter values will be used:

N      :   5040 
NB     :     128 
PMAP   : Row-major process mapping
P      :       1 
Q      :       1 
PFACT  :   Right 
NBMIN  :       4 
NDIV   :       2 
RFACT  :   Crout 
BCAST  :  1ringM 
DEPTH  :       1 
SWAP   : Mix (threshold = 64)
L1     : transposed form
U      : transposed form
EQUIL  : yes
ALIGN  : 8 double precision words

--------------------------------------------------------------------------------

- The matrix A is randomly generated for each test.
- The following scaled residual check will be computed:
      ||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )
- The relative machine precision (eps) is taken to be               1.110223e-16
- Computational tests pass if scaled residuals are less than                16.0

Además, tenemos que concentrarnos en el resultado final. La salida final que viene en la terminal se verá similar a la que se muestra a continuación. El último valor da la velocidad y los valores anteriores muestran los diferentes parámetros proporcionados. En el contenido a continuación, la velocidad se muestra en Gflops y su valor es de alrededor de 1.21e-01 Gflops, que cuando se convierte da 121 Mega FLOPS (MFLOPS).

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR11C2R4       21400   128     3    11              537.10              1.210e-01
HPL_pdgesv() start time Mon Jun 23 17:29:42 2014

HPL_pdgesv() end time   Mon Jun 23 17:55:19 2014

--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0020152 ...... PASSED
================================================================================

Tenga en cuenta que dependiendo de su Raspberry Pi, la velocidad y el tiempo pueden ser significativamente diferentes. Por lo tanto, no use estos resultados como una comparación con su nodo o clúster.

7 Ejecución de HPL en varios nodos

Cuando queramos ejecutar HPL para múltiples nodos, tendremos que cambiar el archivo HPL.dat. Aquí supongamos que tenemos 32 nodos. Entonces el producto de P*Q debería ser 32. Elegí P=4, Q=8, por lo tanto, 4*8=32. Entonces, aparte de este cambio, tendremos que cambiar el valor de N, por prueba y error, obtuvimos la velocidad máxima para N =17400. El contenido final del archivo se muestra a continuación. haga esos cambios en consecuencia en su archivo "HPL.dat".

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
17400         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
4            Ps
8            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

Una vez hecho esto tendremos que volver a ejecutar el HPL. Utilice el siguiente comando. Recuerde cambiar la ruta en el siguiente comando para representar la ruta del archivo de la máquina en su sistema.

cd bin/rpi
mpiexec -f ~/mpi_testing/machinefile -n 32 ./xhpl

El resultado de esto será similar al que se muestra arriba para un nodo, pero definitivamente tendrá una velocidad más alta.

Este tipo de cambios se pueden realizar según la cantidad de nodos o procesadores en el sistema y se pueden encontrar los resultados de referencia. Y como mencioné anteriormente, para obtener más información sobre cómo configurar los valores en el archivo HPL.dat, diríjase al documento aquí y léalo.


Linux
  1. ¿Orden de redirecciones?

  2. Linux:¿determinación del archivo específico responsable de la E/S alta?

  3. ¿Inconveniente al usar un chroot en computación de alto rendimiento?

  4. Cómo ajustar el sistema de archivos Btrfs para un mejor rendimiento

  5. ¿Cuáles son las opciones de montaje para mejorar el rendimiento del sistema de archivos ext4 en Linux?

Editor VIM

Clúster de Cómputo de Alto Rendimiento en un entorno de nube

Mejora del rendimiento mediante el uso de un servidor de archivos estático adicional

cp -L frente a cp -H

¿Qué protocolo de intercambio de archivos de red tiene el mejor rendimiento y confiabilidad?

¿Cuáles son las implicaciones de rendimiento para millones de archivos en un sistema de archivos moderno?