Problem

Próbuję obliczyć wydajność FLOPS CPU / GPU, ale nie jestem pewien, czy robię to poprawnie .

Powiedzmy, że mamy:

  • Procesor Kaby Lake (taktowanie: 2,8 GHz, rdzenie: 4, wątki: 8)
  • Procesor graficzny Pascal (taktowanie: 1,3 GHz, rdzenie: 768).

Ta strona Wiki informuje, że procesory Kaby Lake obliczają 32 FLOPS (pojedyncza precyzja FP32) i Pascal obliczają 2 FLOPS (pojedyncza precyzja FP32), co oznacza, że możemy obliczyć ich całkowitą wydajność FLOPS przy użyciu następujących formuł:

CPU:

TOTAL_FLOPS = 2.8 GHz * 4 cores * 32 FLOPS = 358 GFLOPS 

GPU:

TOTAL_FLOPS = 1.3 GHz * 768 cores * 2 FLOPS = 1996 GFLOPS 

Pytania

  1. [SOLVED] Większość przewodników, które widziałem (np. ten) używają rdzeni fizycznych w formule. Nie rozumiem, dlaczego zamiast używać wątków (rdzeni logicznych)? Weren „t wątków utworzonych specjalnie w celu podwojenia wydajności obliczeń zmiennoprzecinkowych? Dlaczego więc je ignorujemy?

  2. [ROZWIĄZANE] Czy w ogóle robię to poprawnie? Nie mogłem znaleźć ani jednego wiarygodnego źródła do obliczania FLOPS, wszystkie informacje w Internecie są ze sobą sprzeczne. Dla procesora i7 7700HQ Kaby Lake znalazłem wartości FLOPS tak niskie, jak 29 GFLOPS , mimo że powyższy wzór daje nam 358 GFLOPS. Nie wiem, w co wierzyć.

  3. Czy w Node.js / Python / C ++ jest biblioteka wieloplatformowa (Win, Mac, Linux), która po prostu zwraca wszystkie Statystyki GPU, takie jak rdzenie cieniujące, zegar, dostępne zestawy instrukcji (lub wartości FLOPS FP32, FP64), więc mogę sam obliczyć maksymalną teoretyczną wydajność? To dość śmieszne, że nie możemy uzyskać statystyk FLOPS bezpośrednio z CPU / GPU, zamiast tego trzeba pobrać i przeanalizować stronę wiki, aby uzyskać wartość. Wydaje się, że nawet używając C ++ (nie wiem) musimy pobrać zestaw narzędzi CUDA 2 GB tylko po to, aby uzyskać dostęp do podstawowych informacji o GPU Nvidii, takich jak liczba rdzeni – co praktycznie uniemożliwiłoby wykonanie aplikacji dostępne dla innych, ponieważ nikt nie pobierałby aplikacji 2 GB.

Komentarze

  • Częściowo wierzysz, że to, co nazywasz, ” wątki ” to sztuczka, która pozwala rdzeniu hostować coś, co wygląda jak dwa wątki naraz -wątków), podczas gdy rzeczywisty jest tylko jeden rzeczywisty fizyczny rdzeń do obliczeń. Nie jestem do końca pewien szczegółów tego, jak Intel to zrobił, ale myślę, że ma to związek z wypełnianiem dziur w rurociągach itp. W zasadzie tak się nie stanie jeśli przetwarzasz coś ciężkiego, ale w przypadku wielu bardziej typowych przypadków użycia w przypadku stacjonarnego systemu operacyjnego ma to sens. Jeśli interesuje Cię rzeczywista przepustowość obliczeniowa, chociaż zwykle nie jest to unted.
  • @KyleMandli dzięki za wyjaśnienie, myślę, że ma to sens.
  • Jedną z części proponowanych obliczeń jest częstotliwość. Zakładam, że zdajesz sobie sprawę, że przy nowoczesnym sprzęcie nie ma częstotliwości . Częstotliwość robocza będzie się różnić w zależności od temperatury i poboru mocy (np. W przypadku większości procesorów graficznych) lub użycia zestawu instrukcji (np. Większości procesorów x86) i prawdopodobnie wszystkich wymienionych czynników.
  • Ty ' Będziemy musieli wszędzie zastąpić MHz przez GHz.
  • Nie ' nie ma ani jednego ” rzeczywista ” wydajność. Na przykład podczas mnożenia dużych macierzy na procesorach graficznych Volta moja ” rzeczywista ” wydajność jest zbliżona do teoretycznej i wynosi 90 szczytów na sekundę. W międzyczasie ucząc resnet-50, ' jest bardziej jak 20 szczytów / sekundę – medium.com/@yaroslavvb/…

Odpowiedź

Możesz obliczyć stawki GFLOP w ten sposób sposób, ale liczby są dość bez znaczenia na dzisiejszym sprzęcie:

  • Operacje zmiennoprzecinkowe wymagają zmiennej liczby cykli zegara. Dodawanie jest generalnie tańsze niż mnożenie, ale każda z nich generalnie zajmuje więcej niż jeden cykl zegara z 2,8 miliarda cykli.

  • Kiedy masz hiperwątkowość, masz dwa wątki działające na jednym rdzeniu, ale rdzeń nadal będzie miał tylko jeden jednostka dodawania zmiennoprzecinkowego, więc dwa wątki nie mogą wykonywać dodawania zmiennoprzecinkowych w tym samym czasie.

  • Operacje zmiennoprzecinkowe są energochłonne, a energia jest zamieniana na ciepło. Kiedy robisz dużo FLOP-ów, procesory przegrzewają się i zmniejszają częstotliwości taktowania.

  • Jeśli używasz właściwych instrukcji, możesz wykonywać operacje mnożenia zmiennoprzecinkowego mnożenia (FMA), które przyspieszają mnożenie i dodawanie, niż wykonywanie tych operacji oddzielnie.

  • Podobnie, w przypadku instrukcji SIMD, rdzeń może wykonać tę samą operację na wielu fragmentach danych w tym samym czasie – powiedzmy, dodaj cztery pary liczb zmiennoprzecinkowych razem, dając 4 FLOPy w tym samym czasie. Wymaga to jednak problemu, w którym algorytm faktycznie tego wymaga, zamiast wykorzystywania wyników pierwszego dodania do drugiego. W konsekwencji instrukcje SIMD przyczyniają się tylko do szybkości, z jaką niektóre algorytmy mogą być wykonywane, a inne nie.

  • Co najważniejsze, generalnie chcą wykonywać operacje na danych z pamięci, ale przenoszenie danych z pamięci głównej do procesora trwa znacznie dłużej niż wykonywanie jakichkolwiek operacji na danych – na przykład o współczynnik 100 dłużej (rząd wielkości). Więc generalnie nie widać nawet małej części teoretycznej wydajności zmiennoprzecinkowej procesorów w rzeczywistych aplikacjach: generalnie znacznie mniej niż 10% teoretycznej wydajności szczytowej.

Innymi słowy, obliczanie szczytowej wydajności stało się czymś w rodzaju bezsensownej działalności: nie ma to nic wspólnego z rzeczywistą wydajnością procesora.

Komentarze

  • Możesz również omówić, w jaki sposób jednostki zmiennoprzecinkowe SIMD mogą zwiększyć teoretyczną wydajność szczytową.
  • Dziękuję za wkład, chłopaki, rozumiem te punkty i rozumiem, jak zaawansowane instrukcje zestawy wpływają na wydajność zmiennoprzecinkową. Myślę, że ' będę na razie trzymał się teoretycznego maksimum. Chciałbym, żeby istniała przynajmniej formuła, która będzie przybliżać rzeczywistą wydajność FLOPS tylko od czasu Procesor potrzebuje do obliczenia określonej funkcji.
  • @AlekseyHoffman Nie ma wzoru, tylko pomiary. To ' dlaczego lista TOP 500 jest oparta na rzeczywistych pomiarach wydajności, a nie teoretycznej najwyższej wydajności.
  • @BrianBorchers Tak, dobry pomysł.

Odpowiedź

Potrafisz czytać po rosyjsku – jak obliczyć FLOPS .

GHz nie pokazuje FLOPS. Jeden procesor z tym samym GHz może być znacznie szybszy niż drugi z tym samym GHz.

P.S. gpu-s ” rx 590 ” i bardzo stary ” r7 250x mają prawie takie same GHz. Ale … to nawet nie jest poprawne porównanie ich wyników)

Komentarze

  • Witaj w scicomp! W stackexchange lepiej jest mieć post samowystarczalny (patrz tutaj ). Aby ulepszyć post, spróbuj edytować odpowiedź, podając podstawowe informacje z artykułu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *