Oszacować FLOPS w systemie Linux?

14

Szukam szybkiego i łatwego programu do oszacowania FLOPS w moim systemie Linux. Znalazłem HPL , ale kompilacja okazuje się irytująca. Wszystko, czego potrzebuję, to oszacowanie FLOPS, bez konieczności spędzania dnia na badaniu pakietów testów i instalowaniu zależnego oprogramowania. Czy istnieje taki program? Czy wystarczy napisać program C, który zwielokrotnia dwa zmiennoprzecinkowe w pętli?

molekularny
źródło

Odpowiedzi:

6

Pytanie brzmi: co masz na myśli przez flop? Jeśli zależy ci tylko na tym, ile najprostszych operacji zmiennoprzecinkowych przypada na zegar, prawdopodobnie jest to trzykrotnie większa prędkość zegara, ale jest to tak samo bezsensowne jak bogomips. Niektóre operacje zmiennoprzecinkowe zajmują dużo czasu (dzielenie, na początek), dodawanie i mnożenie są zazwyczaj szybkie (jedna na jednostkę fp na zegar). Kolejnym zagadnieniem jest wydajność pamięci. Jest powód, dla którego ostatni klasyczny CRAY miał 31 banków pamięci. Ostatecznie wydajność procesora jest ograniczona przez szybkość odczytu i zapisu w pamięci, więc na jakim poziomie buforowania mieści się twój problem? Linpack był kiedyś prawdziwym testem porównawczym, teraz mieści się w pamięci podręcznej (L2, jeśli nie L1) i jest bardziej teoretycznym testem wydajności procesora. I oczywiście jednostki SSE (itp.) Mogą również zwiększyć wydajność zmiennoprzecinkową.

Jaką dystrybucją prowadzisz?

To wyglądało jak dobry wskaźnik: 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/ może być łatwiejszym sposobem na zainstalowanie testu porównawczego flops.

Nadal zastanawiam się, dlaczego cię to obchodzi, do czego go używasz? Jeśli chcesz tylko bezsensownej liczby, bogomips twojego systemu jest nadal w dmesg.

Ronald Pottol
źródło
1
Phoronix wydaje się być dokładnie tym, czego szukałem - dziękuję! Jedynym powodem, dla którego tego chciałem, było wypełnienie ankiety, w której zapytałem, ile mam teraflopów mocy obliczeniowej. Ankieta nie była strasznie ważna, więc nie martwiłem się o dokładność odpowiedzi. Mimo to fajnie byłoby powiedzieć: „Nasz klaster może wykonywać teraflopy X”. Chociaż, jak zauważyłeś, liczba ta niekoniecznie ma wiele rzeczywistych znaczeń.
cząsteczkowy
7

najwyraźniej istnieje pakiet testowy „sysbench” i polecenie:

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

uruchom to w ten sposób:

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

dane wyjściowe do porównań:

 total time:                          15.3047s

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

rogerdpack
źródło
3
Jak to daje FLOPS?
Martin Thoma,
Wygląda to bardziej ogólny „CPU Benchmark” zobacz także bnikolic.co.uk/blog/hpc-howto-measure-flops.html
rogerdpack
3

W przypadku szacunków typu ballpark:

Linpack

  1. Pobierz ( link )
  2. Wyodrębnij to
  3. cd benchmarks_2017/linux/mkl/benchmarks/linpack
  4. ./runme_xeon64
  5. Poczekaj dość długo (ponad 1 godzinę)

Na Thinkpad T460p ( procesor Intel i7-6700HQ ) daje:

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
źródło
1

Jednym z wzorców tradycyjnie stosowanych do pomiaru FLOPS jest Linpack. Innym popularnym wzorcem FLOPS jest Whetstone.

Więcej czytanie: Wikipedii „japonki” wejścia , Whetstone wejścia , wejście Linpacka

kolypto
źródło
2
Doceniam twoją odpowiedź, jednak moim celem jest uzyskanie szybkiej i brudnej oceny flopów. Whetstone i Linpack mają ten sam problem co HPL - zaczynam o tym czytać, a potem gubię się w kolejnych witrynach, które wyglądają na 20 lat. Kiedy udaje mi się znaleźć kod źródłowy, nie mogę go skompilować bez zainstalowania kilku zależnych bibliotek - nawet wtedy popełniam błędy. Mógłbym sprawić, żeby wszystkie te rzeczy działały, ale nie jest wystarczająco ważne, aby spędzać czas. Mamy nadzieję, że istnieje jakieś stosunkowo nowoczesne oprogramowanie, które działa po prostu na flopach.
cząsteczkowy
1
Oszacowanie? Potem jest około 4 * Hz: dla procesora 1GHz to około 4GFLOPS :))
kolypto
1

Jak wspomniałeś o klastrze, skorzystaliśmy z pakietu HPCC . Konfiguracja i dostrojenie wymaga trochę wysiłku, ale w naszym przypadku nie było to chwalenie się, było częścią kryteriów akceptacji dla klastra; niektóre testy porównawcze wydajności są niezbędne IMHO, aby zapewnić, że sprzęt działa zgodnie z reklamą, wszystko jest poprawnie połączone razem itp.

Teraz, jeśli chcesz tylko teoretycznej liczby szczytowej FLOPS, ta jest łatwa. Wystarczy przeczytać artykuł na temat procesora (powiedzmy na realworldtech.com lub jakiś inny), aby uzyskać informacje o tym, ile DP FLOPS może wykonać rdzeń procesora na cykl zegara (przy obecnych procesorach x86, które zwykle wynoszą 4). Zatem całkowity szczyt FLOPS jest po prostu

liczba rdzeni * częstotliwość FLOPS / cykl *

Następnie w przypadku klastra z siecią IB powinieneś być w stanie osiągnąć około 80% szczytowego FLOPS na HPL (który BTW jest jednym z punktów odniesienia w HPCC).

janneb
źródło