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.