Problemă

Încerc să calculez performanța FLOPS-ului CPU / GPU, dar nu sunt sigur dacă o fac corect .

Să spunem că avem:

  • Un procesor Kaby Lake (ceas: 2,8 GHz, nuclee: 4, fire: 8)
  • Un GPU Pascal (ceas: 1,3 GHz, nuclee: 768).

Această pagină Wiki spune că procesorii Kaby Lake calculează 32 FLOPS (single precision FP32) și cardurile Pascal calculează 2 FLOPS (single precision FP32), ceea ce înseamnă că putem calcula performanța lor totală FLOPS folosind următoarele formule:

CPU:

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

GPU:

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

Întrebări

  1. [REZOLVAT] Majoritatea ghidurilor pe care le-am văzut (cum ar fi acesta) folosesc nuclee fizice în formulă. Ceea ce nu înțeleg este de ce nu folosiți în schimb fire (nuclee logice)? Nu au fost create subiecte special pentru a dubla performanța calculelor în virgulă mobilă? De ce le ignorăm atunci?

  2. [REZOLVAT] O fac deloc corect? Nu aș putea găsi o singură sursă de încredere pentru calcularea FLOPS, toate informațiile de pe internet sunt în contradicție. Pentru CPU i7 7700HQ Kaby Lake am găsit valori FLOPS de la 29 GFLOPS chiar dacă formula de mai sus ne oferă 358 GFLOPS. Nu știu ce să cred.

  3. Există o bibliotecă pe mai multe platforme (Win, Mac, Linux) în Node.js / Python / C ++ care returnează doar toate Statistici GPU cum ar fi nuclee de umbrire, ceas, seturi de instrucțiuni disponibile (sau valori FLOPS FP32, FP64), așa că aș putea calcula și eu performanța teoretică maximă? Este destul de ridicol că nu putem obține statisticile FLOPS direct de la CPU / GPU, trebuie să descărcați și să analizați o pagină wiki pentru a obține valoarea. Chiar și atunci când se utilizează C ++, se pare (nu știu de fapt) că trebuie să descărcăm setul de instrumente CUDA de 2 GB doar pentru a avea acces la informațiile de bază Nvidia GPU, cum ar fi cantitatea de nuclee – ceea ce ar face practic imposibilă realizarea aplicației disponibil pentru alții, deoarece nimeni nu ar descărca o aplicație de 2 GB.

Comentarii

  • Ca răspuns parțial I credeți că ceea ce numiți ” fire ” este un truc care permite unui nucleu să găzduiască ceea ce arată ca două fire la un moment dat (hyper nu sunt sigur în totalitate despre detaliile despre modul în care Intel a făcut acest lucru, dar cred că are de-a face cu completarea găurilor din conducte și altele. În principiu, acest lucru nu se va întâmpla dacă calculați ceva greu, dar pentru o mulțime de cazuri de utilizare mai frecvente pentru un sistem de operare desktop, acest lucru are sens. Dacă sunteți interesat de transferul efectiv de calcul, deși acest lucru nu este de obicei co unted.
  • @KyleMandli mulțumim pentru clarificare, presupun că are sens
  • O parte a calculului propus este frecvența. Presupun că sunteți conștient de faptul că, cu hardware-ul modern, nu există frecvența . Frecvența de funcționare va diferi în funcție de temperatura și consumul de energie (de exemplu, majoritatea GPU-urilor) sau de utilizarea și utilizarea setului de instrucțiuni (de exemplu, majoritatea procesorelor x86) și, probabil, toți factorii menționați.
  • Tu ‘ va trebui să înlocuiască MHz peste tot cu GHz.
  • Nu există ‘ fără ” performanță actuală „. De exemplu, atunci când înmulțiți matrici mari pe GPU-urile Volta, performanța mea ” actuală ” este aproape de cea teoretică, 90 de topuri / secundă. Între timp, formarea resnet-50, ‘ seamănă mai mult cu 20 de topuri / secundă – medium.com/@yaroslavvb/…

Răspuns

Puteți calcula aceste rate GFLOP într-adevăr, dar numerele sunt destul de lipsite de sens pe hardware-ul de astăzi:

  • Operațiile în virgulă mobilă necesită un număr variabil de cicluri de ceas. durează mai mult de un ciclu de ceas din cele 2,8 miliarde de cicluri pe care le aveți.

  • Când aveți hiperthreading, aveți două fire care rulează pe un nucleu, dar nucleul va avea în continuare doar unul unitate de adăugare în virgulă mobilă și astfel cele două fire nu pot executa adaosuri în virgulă mobilă în același timp.

  • Operațiunile în virgulă mobilă sunt înfometate de energie, iar energia este transformată în căldură. Când faceți o mulțime de FLOP-uri, procesoarele se supraîncălzesc și își reduc frecvențele de ceas.

  • Dacă utilizați instrucțiunile corecte, puteți efectua operații de multiplicare-adăugare în virgulă mobilă (FMA) care fac o înmulțire și o adunare mai rapidă decât efectuarea acestor operații separat.

  • În mod similar, cu instrucțiuni SIMD, un nucleu poate face aceeași operație pe mai multe bucăți de date în același timp – să zicem, adăugați patru perechi de numere în virgulă mobilă, obținând 4 FLOP-uri în același timp. Dar acest lucru necesită o problemă în care un algoritm necesită efectiv acest lucru, mai degrabă decât utilizarea rezultatelor primei adăugări în a doua. În consecință, instrucțiunile SIMD contribuie doar la viteza cu care unii algoritmi pot fi executați, dar nu și alții.

  • Cel mai important, în general doresc să facă operațiuni pe date din memorie, dar mutarea datelor din memoria principală pe procesor durează mult mai mult decât efectiv efectuarea oricăror operații pe date – cum ar fi un factor de 100 mai lung (ordinul de mărime). Deci, în general, nu vedeți nici măcar o mică parte din performanța teoretică în virgulă mobilă a procesoarelor în aplicații reale: în general substanțial mai puțin de 10% din performanța teoretică de vârf.

Cu alte cuvinte, calcularea performanței de vârf a devenit un fel de afacere lipsită de sens: nu are nimic de-a face cu performanța efectivă a unui procesor.

Comentarii

  • De asemenea, ați putea discuta despre modul în care unitățile SIMD în virgulă mobilă pot crește performanța teoretică de vârf.
  • Vă mulțumim pentru contribuție, băieți, înțeleg aceste puncte și înțeleg cât de avansate sunt instrucțiunile seturile afectează performanța în virgulă mobilă. Cred că ‘ voi rămâne deocamdată cu maximul teoretic pentru moment. Mi-aș dori să existe cel puțin o formulă care să aproximeze performanța reală FLOPS chiar din momentul este nevoie ca procesorul să calculeze o anumită funcție.
  • @AlekseyHoffman Nu există o formulă, ci doar măsurători. Asta ‘ de ce lista TOP 500 se bazează pe măsurători reale ale performanței, nu pe performanțe teoretice de top.
  • @BrianBorchers Da, idee bună.

Răspuns

Yoy poate citi în rusă – cum se calculează FLOPS .

GHz nu afișează FLOPS. Un procesor cu același GHz poate fi mult mai rapid decât celălalt cu același GHz.

P.S. gpu-s ” rx 590 ” și foarte vechi ” r7 250x au aproape același GHz. Dar … acest lucru nu este chiar corect pentru a le compara performanța)

Comentarii

  • Bună, bine ai venit la scicomp! În stackexchange este mai bine să aveți postare autonomă (consultați aici ). Vă rugăm, pentru a îmbunătăți postarea, încercați să editați răspunsul cu informațiile de bază ale articolului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *