Estimar FLOPS no Linux?

13

Estou procurando um programa rápido e fácil para estimar FLOPS no meu sistema Linux. Encontrei HPL , mas compilá-lo é irritante. Tudo o que preciso é de uma estimativa aproximada dos FLOPS, sem precisar passar um dia pesquisando pacotes de benchmark e instalando software dependente. Existe algum programa desse tipo? Seria suficiente escrever um programa C que multiplica dois carros alegóricos em um loop?

molecularbear
fonte

Respostas:

5

A questão é o que você quer dizer com falhanços? Se tudo o que importa é quantas operações mais simples de ponto flutuante por relógio, provavelmente é 3x a velocidade do relógio, mas isso é tão sem sentido quanto os bogomips. Algumas operações de ponto flutuante demoram muito tempo (dividir, para iniciantes), adicionar e multiplicar são geralmente rápidas (uma por unidade de fp por relógio). O próximo problema é o desempenho da memória; há uma razão para o último CRAY clássico ter 31 bancos de memória; no final, o desempenho da CPU é limitado pela rapidez com que você pode ler e gravar na memória; portanto, em que nível de cache o seu problema se encaixa? O Linpack foi uma referência real uma vez, agora se encaixa no cache (L2, se não L1) e é mais um benchmark teórico puro da CPU. E, é claro, suas unidades SSE (etc) também podem adicionar desempenho de ponto flutuante.

Que distro você executa?

Parecia um bom ponteiro: 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/ pode ser uma maneira mais fácil de instalar uma referência de fracassos.

Ainda me pergunto por que você se importa, para que está usando? Se você quer apenas um número sem sentido, o bogomips do seu sistema ainda está lá no dmesg.

Ronald Pottol
fonte
1
Phoronix parece ser exatamente o que eu estava procurando - obrigado! A única razão pela qual eu queria isso era porque estava preenchendo uma pesquisa que perguntava quantos teraflops de poder computacional eu tenho. A pesquisa não era muito importante, então eu não estava preocupado com a precisão da resposta. Mesmo assim, seria bem legal poder dizer: "Nosso cluster pode executar X teraflops". Embora, como você ressalte, esse número não tenha necessariamente muito significado no mundo real.
molecularbear
7

aparentemente existe um pacote e comando de benchmark "sysbench":

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

execute assim:

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

saída para comparações:

 total time:                          15.3047s

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

rogerdpack
fonte
3
Como isso dá o FLOPS?
Martin Thoma
Parece que é mais de um genérico "CPU Benchmark" ver também bnikolic.co.uk/blog/hpc-howto-measure-flops.html
rogerdpack
3

Para estimativas aproximadas:

Linpack

  1. Faça o download ( link )
  2. Extraia-o
  3. cd benchmarks_2017/linux/mkl/benchmarks/linpack
  4. ./runme_xeon64
  5. Aguarde um pouco (mais de 1 hora)

Em um Thinkpad T460p ( CPU Intel i7-6700HQ ), ele fornece:

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
fonte
1

Uma referência tradicionalmente usada para medir os FLOPS é o Linpack. Outro parâmetro comum do FLOPS é o Whetstone.

Mais leitura: Entrada "FLOPS" da Wikipedia , entrada Whetstone , entrada Linpack

Kolypto
fonte
2
Agradeço sua resposta, no entanto, meu objetivo é obter uma estimativa rápida e suja dos fracassos. Whetstone e Linpack têm o mesmo problema que o HPL - eu começo a ler sobre isso e depois me perco em sites e sites que parecem ter 20 anos. Quando consigo encontrar o código-fonte, não consigo compilá-lo sem instalar um monte de bibliotecas dependentes - mesmo assim, encontro erros. Eu poderia fazer tudo isso funcionar, mas não é importante o suficiente para gastar o tempo. Espero que exista algum software relativamente moderno que funcione para flops de ballard.
23125 molecularbear
1
Estimativa? Então é cerca de 4 * Hz: para 1GHz CPU é sobre 4GFLOPS :))
kolypto
1

Como você mencionou o cluster, usamos o conjunto HPCC . É preciso um pouco de esforço para configurar e ajustar, mas, no nosso caso, o ponto não estava se gabando por si só, fazia parte dos critérios de aceitação do cluster; alguns benchmarking de desempenho são essenciais para garantir que o hardware funcione conforme anunciado, tudo esteja corretamente conectado etc.

Agora, se você quer apenas um número FLOPS de pico teórico, esse é fácil. Basta verificar um artigo sobre a CPU (digamos, no realworldtech.com ou algo assim) para obter informações sobre quantos DP FLOPS um núcleo de CPU pode fazer por ciclo de clock (com as atuais CPUs x86 que geralmente são 4). Então o pico total de FLOPS é apenas

número de núcleos * FLOPS / ciclo * frequência

Então, para um cluster com rede IB, você poderá atingir cerca de 80% do pico de FLOPS no HPL (que BTW é um dos parâmetros de referência no HPCC).

janneb
fonte