Estimar FLOPS en Linux?

13

Estoy buscando un programa rápido y fácil para estimar FLOPS en mi sistema Linux. Encontré HPL , pero compilarlo está resultando irritante. Todo lo que necesito es una estimación aproximada de los FLOPS, sin necesidad de pasar un día investigando paquetes de referencia e instalando software dependiente. ¿Existe algún programa de este tipo? ¿Sería suficiente escribir un programa en C que multiplique dos flotantes en un bucle?

oso molecular
fuente

Respuestas:

5

La pregunta es ¿qué quieres decir con flops? Si lo único que le importa es cuántas de las operaciones de coma flotante más simples por reloj, probablemente sea el triple de su velocidad de reloj, pero eso es tan insignificante como los bogomips. Algunas operaciones de coma flotante tardan mucho tiempo (dividir, para empezar), sumar y multiplicar suelen ser rápidas (una por unidad de fp por reloj). El siguiente problema es el rendimiento de la memoria, hay una razón por la cual el último CRAY clásico tenía 31 bancos de memoria, en última instancia, el rendimiento de la CPU está limitado por la rapidez con que puede leer y escribir en la memoria, entonces, ¿en qué nivel de almacenamiento en caché encaja su problema? Linpack fue un punto de referencia real una vez, ahora cabe en la memoria caché (L2 si no es L1) y es más un punto de referencia teórico de CPU puro. Y, por supuesto, sus unidades SSE (etc.) también pueden agregar rendimiento de punto flotante.

¿Qué distribución corres?

Esto parecía un buen puntero: http://linuxtoolkit.blogspot.com/2009/04/intel-optimized-linpack-benchmark-for.html

http://onemansjourneyintolinux.blogspot.com/2008/12/show-us-yer-flops.html

http://www.phoronix-test-suite.com/ podría ser una forma más fácil de instalar un punto de referencia de flops.

Aún así, me pregunto por qué te importa, ¿para qué lo estás usando? Si solo desea un número sin sentido, sus bogomips de sistemas todavía están ahí en dmesg.

Ronald Pottol
fuente
1
Phoronix parece ser exactamente lo que estaba buscando, ¡gracias! La única razón por la que quería esto era porque estaba completando una encuesta que preguntaba cuántos teraflops de potencia informática tengo. La encuesta no era terriblemente importante, por lo que no me preocupaba la precisión de la respuesta. Aún así, sería bueno decir: "Nuestro grupo puede hacer X teraflops". Aunque, como usted señala, ese número no necesariamente tiene mucho significado en el mundo real.
molecularbear
7

aparentemente hay un paquete de referencia "sysbench" y un comando:

sudo apt-get install sysbench(o brew install sysbenchOS X)

ejecutarlo así:

sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run

salida para comparaciones:

 total time:                          15.3047s

ref: http://www.midwesternmac.com/blogs/jeff-geerling/2013-vps-benchmarks-linode

rogerdpack
fuente
3
¿Cómo le da esto a los FLOPS?
Martin Thoma
Parece que es más un "punto de referencia de CPU" genérico, consulte también bnikolic.co.uk/blog/hpc-howto-measure-flops.html
rogerdpack
3

Para estimaciones aproximadas:

Linpack

  1. Descárgalo ( enlace )
  2. Extraelo
  3. cd benchmarks_2017/linux/mkl/benchmarks/linpack
  4. ./runme_xeon64
  5. Espere un buen rato (más de 1 hora)

En un Thinkpad T460p ( CPU Intel i7-6700HQ ), proporciona:

This is a SAMPLE run script for SMP LINPACK. Change it to reflect
the correct number of CPUs/threads, problem input files, etc..
./runme_xeon64: 33: [: -gt: unexpected operator
Mi 21. Dez 11:50:29 CET 2016
Intel(R) Optimized LINPACK Benchmark data

Current date/time: Wed Dec 21 11:50:29 2016

CPU frequency:    3.491 GHz
Number of CPUs: 1
Number of cores: 4
Number of threads: 4

Parameters are set to:

Number of tests: 15
Number of equations to solve (problem size) : 1000  2000  5000  10000 15000 18000 20000 22000 25000 26000 27000 30000 35000 40000 45000
Leading dimension of array                  : 1000  2000  5008  10000 15000 18008 20016 22008 25000 26000 27000 30000 35000 40000 45000
Number of trials to run                     : 4     2     2     2     2     2     2     2     2     2     1     1     1     1     1    
Data alignment value (in Kbytes)            : 4     4     4     4     4     4     4     4     4     4     4     1     1     1     1    

Maximum memory requested that can be used=9800701024, at the size=35000

=================== Timing linear equation system solver ===================

Size   LDA    Align. Time(s)    GFlops   Residual     Residual(norm) Check
1000   1000   4      0.014      46.5838  1.165068e-12 3.973181e-02   pass
1000   1000   4      0.010      64.7319  1.165068e-12 3.973181e-02   pass
1000   1000   4      0.009      77.3583  1.165068e-12 3.973181e-02   pass
1000   1000   4      0.010      67.0096  1.165068e-12 3.973181e-02   pass
2000   2000   4      0.064      83.6177  5.001027e-12 4.350281e-02   pass
2000   2000   4      0.063      84.5568  5.001027e-12 4.350281e-02   pass
5000   5008   4      0.709      117.6800 2.474679e-11 3.450740e-02   pass
5000   5008   4      0.699      119.2350 2.474679e-11 3.450740e-02   pass
10000  10000  4      4.895      136.2439 9.069137e-11 3.197870e-02   pass
10000  10000  4      4.904      135.9888 9.069137e-11 3.197870e-02   pass
15000  15000  4      17.260     130.3870 2.052533e-10 3.232773e-02   pass
15000  15000  4      18.159     123.9303 2.052533e-10 3.232773e-02   pass
18000  18008  4      31.091     125.0738 2.611497e-10 2.859910e-02   pass
18000  18008  4      31.869     122.0215 2.611497e-10 2.859910e-02   pass
20000  20016  4      44.877     118.8622 3.442628e-10 3.047480e-02   pass
20000  20016  4      44.646     119.4762 3.442628e-10 3.047480e-02   pass
22000  22008  4      57.918     122.5811 4.714135e-10 3.452918e-02   pass
22000  22008  4      57.171     124.1816 4.714135e-10 3.452918e-02   pass
25000  25000  4      86.259     120.7747 5.797896e-10 3.297056e-02   pass
25000  25000  4      83.721     124.4356 5.797896e-10 3.297056e-02   pass
26000  26000  4      97.420     120.2906 5.615238e-10 2.952660e-02   pass
26000  26000  4      96.061     121.9924 5.615238e-10 2.952660e-02   pass
27000  27000  4      109.479    119.8722 5.956148e-10 2.904520e-02   pass
30000  30000  1      315.697    57.0225  8.015488e-10 3.159714e-02   pass
35000  35000  1      2421.281   11.8061  1.161127e-09 3.370575e-02   pass

Performance Summary (GFlops)

Size   LDA    Align.  Average  Maximal
1000   1000   4       63.9209  77.3583 
2000   2000   4       84.0872  84.5568 
5000   5008   4       118.4575 119.2350
10000  10000  4       136.1164 136.2439
15000  15000  4       127.1586 130.3870
18000  18008  4       123.5477 125.0738
20000  20016  4       119.1692 119.4762
22000  22008  4       123.3813 124.1816
25000  25000  4       122.6052 124.4356
26000  26000  4       121.1415 121.9924
27000  27000  4       119.8722 119.8722
30000  30000  1       57.0225  57.0225 
35000  35000  1       11.8061  11.8061 

Residual checks PASSED

End of tests

Done: Mi 21. Dez 12:58:23 CET 2016
Martin Thoma
fuente
1

Un punto de referencia que se ha utilizado tradicionalmente para medir FLOPS es Linpack. Otro punto de referencia común de FLOPS es Whetstone.

Más información: la entrada de Wikipedia "FLOPS" , la entrada de Whetstone , la entrada de Linpack

Kolypto
fuente
2
Agradezco su respuesta, sin embargo, mi objetivo es obtener una estimación rápida y sucia de los fracasos. Whetstone y Linpack tienen el mismo problema que el HPL: empiezo a leer sobre él y luego me pierdo en un sitio tras otro, que todos parecen tener 20 años. Cuando consigo encontrar el código fuente, parece que no puedo compilarlo sin instalar un montón de bibliotecas dependientes, incluso cuando me encuentro con errores. Podría hacer que todo esto funcione, pero no es lo suficientemente importante como para pasar el tiempo. Esperemos que exista algún software relativamente moderno que Just Works para los juegos de pelota.
molecularbear
1
¿Estimar? Entonces se trata de 4 * Hz: para CPU de 1 GHz se trata de 4GFLOPS :))
kolypto
1

Como menciona el clúster, hemos utilizado la suite HPCC . Se necesita un poco de esfuerzo para configurar y ajustar, pero en nuestro caso el punto no era alardear per se, era parte de los criterios de aceptación para el clúster; alguna evaluación comparativa de rendimiento es vital en mi humilde opinión para garantizar que el hardware funciona como se anuncia, todo está conectado correctamente, etc.

Ahora, si solo quieres un número máximo de FLOPS teórico, ese es fácil. Simplemente consulte un artículo sobre la CPU (por ejemplo, en realworldtech.com o somesuch) para obtener información sobre cuántos DP FLOPS puede hacer un núcleo de CPU por ciclo de reloj (con CPU x86 actuales que normalmente son 4). Entonces, el pico total FLOPS es solo

número de núcleos * FLOPS / ciclo * frecuencia

Luego, para un clúster con red IB, debería poder alcanzar alrededor del 80% de los FLOPS máximos en HPL (que por cierto es uno de los puntos de referencia en HPCC).

janneb
fuente