Problema

Sto cercando di calcolare le prestazioni di FLOPS CPU / GPU ma non sono sicuro di farlo correttamente .

Supponiamo di avere:

  • Una CPU Kaby Lake (clock: 2.8 GHz, core: 4, thread: 8)
  • Una GPU Pascal (clock: 1.3 GHz, core: 768).

Questa pagina Wiki dice che le CPU Kaby Lake elaborano 32 FLOPS (FP32 a precisione singola) e le schede Pascal calcolano 2 FLOPS (FP32 a precisione singola), il che significa che possiamo calcolare le loro prestazioni FLOPS totali utilizzando le seguenti 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 

Domande

  1. [SOLVED] La maggior parte delle guide che” ho visto (come questa) utilizzano core fisici nella formula. Quello che non capisco è il motivo non utilizzare invece thread (core logici)? I thread non sono stati creati specificamente per raddoppiare le prestazioni dei calcoli in virgola mobile? Perché li ignoriamo allora?

  2. [RISOLTO] Lo sto facendo correttamente? Non sono riuscito a trovare una singola fonte affidabile per il calcolo dei FLOPS, tutte le informazioni su Internet sono contraddittorie. Per la CPU i7 7700HQ Kaby Lake ho trovato valori FLOPS a partire da 29 GFLOPS anche se la formula sopra ci dà 358 GFLOPS. Non so cosa credere.

  3. Esiste una libreria multipiattaforma (Win, Mac, Linux) in Node.js / Python / C ++ che restituisce solo tutti i Statistiche GPU come shading core, clock, set di istruzioni disponibili (o FP32, valori FLOPS FP64) in modo da poter calcolare da solo le prestazioni teoriche massime? È abbastanza ridicolo non poter ottenere le statistiche FLOPS direttamente dalla CPU / GPU, invece scaricare e analizzare una pagina wiki per ottenere il valore. Anche quando si utilizza C ++, sembra (non lo so davvero) dobbiamo scaricare il toolkit CUDA da 2 GB solo per accedere alle informazioni di base della GPU Nvidia come la quantità di core, il che renderebbe praticamente impossibile realizzare lapp disponibile per altri, poiché nessuno scaricherà unapp da 2 GB.

Commenti

  • Come risposta parziale I credi che quello che stai chiamando ” thread ” è un trucco che consente a un core di ospitare quelli che sembrano due thread alla volta (hyper -threading) pur avendo solo un vero core fisico con cui calcolare. Non sono del tutto sicuro sui dettagli di come Intel abbia fatto questo, ma penso che abbia a che fare con il riempimento di buchi nelle condutture e simili. In linea di principio non accadrà se stai elaborando qualcosa di pesante ma per molti casi duso più comuni per un sistema operativo desktop questo ha senso.Se sei interessato alla velocità effettiva di elaborazione sebbene questo di solito non sia co unted.
  • @KyleMandli grazie per il chiarimento, suppongo che abbia senso
  • Una parte del calcolo proposto è la frequenza. Presumo che tu sappia che con lhardware moderno, non cè la frequenza. La frequenza operativa varia in base alla temperatura e allassorbimento di potenza (ad es. La maggior parte delle GPU), o allutilizzo e allutilizzo del set di istruzioni (ad es. La maggior parte delle CPU x86) e probabilmente a tutti i fattori menzionati.
  • Tu ‘ dovrò sostituire ovunque MHz con GHz.
  • Non ‘ nessun ” rendimento ” effettivo. Ad esempio, quando si moltiplicano matrici di grandi dimensioni su GPU Volta, le prestazioni ” effettive ” sono vicine a quelle teoriche, 90 Top / secondo. Nel frattempo, addestrando resnet-50, ‘ è più simile a 20 Tops / secondo – medium.com/@yaroslavvb/…

Risposta

Puoi calcolare i tassi GFLOP questo modo, ma i numeri sono piuttosto privi di significato sullhardware di oggi:

  • Le operazioni in virgola mobile richiedono un numero variabile di cicli di clock. Unaddizione è generalmente più economica di una moltiplicazione, ma generalmente ciascuna richiede più di un ciclo di clock dei 2,8 miliardi di cicli che hai abbastanza.

  • Quando hai lhyperthreading, hai due thread in esecuzione su un core, ma il core ne avrà comunque solo uno unità di addizione in virgola mobile e quindi i due thread non possono eseguire addizioni in virgola mobile contemporaneamente.

  • Le operazioni in virgola mobile sono affamate di energia e lenergia viene convertita in calore. Quando si eseguono molti FLOP, i processori si surriscaldano e riducono le loro frequenze di clock.

  • Se si utilizzano le istruzioni corrette, è possibile eseguire operazioni di moltiplicazione-addizione (FMA) in virgola mobile che rendono una moltiplicazione e unaddizione più veloce rispetto a queste operazioni separatamente.

  • Allo stesso modo, con le istruzioni SIMD, un core può eseguire la stessa operazione su più pezzi di dati contemporaneamente – ad esempio, aggiungere quattro coppie di numeri in virgola mobile insieme, ottenendo 4 FLOP allo stesso tempo. Ma questo richiede un problema in cui un algoritmo richiede effettivamente che ciò accada, piuttosto che utilizzare i risultati della prima aggiunta nella seconda. Di conseguenza, le istruzioni SIMD contribuiscono solo alla velocità con cui alcuni algoritmi possono essere eseguiti, ma non altri.

  • Soprattutto, generalmente desidera eseguire operazioni sui dati dalla memoria, ma lo spostamento dei dati dalla memoria principale al processore richiede molto più tempo rispetto a qualsiasi operazione sui dati, ad esempio un fattore 100 in più (ordine di grandezza). Quindi in genere non si vede nemmeno una piccola frazione delle prestazioni teoriche in virgola mobile dei processori nelle applicazioni reali: generalmente sostanzialmente meno del 10% delle prestazioni di picco teoriche.

In altre parole, il calcolo delle prestazioni massime è diventato una sorta di attività senza senso: non ha nulla a che fare con le prestazioni effettive di un processore.

Commenti

  • Potreste anche discutere di come le unità a virgola mobile SIMD possono aumentare le prestazioni di picco teoriche.
  • Grazie per il vostro contributo, ragazzi, capisco questi punti e capisco come le istruzioni avanzate i set influenzano le prestazioni in virgola mobile. Immagino che ‘ per ora mi limiterò al massimo teorico. Vorrei che ci fosse almeno una formula che approssimasse le prestazioni effettive di FLOPS solo dal momento serve alla CPU per calcolare una funzione specifica.
  • @AlekseyHoffman Non esiste una formula, solo misurazioni. div id = “fd68a555a6”>

è il motivo per cui lelenco TOP 500 si basa su misurazioni effettive delle prestazioni, non sulle prestazioni teoriche massime.

  • @BrianBorchers Sì, buona idea.
  • Risposta

    Yoy sa leggere in russo – come calcolare FLOP .

    GHz non mostra FLOPS. Un processore con lo stesso GHz può essere molto più veloce dellaltro con lo stesso GHz.

    P.S. gpu-s ” rx 590 ” e molto vecchi ” r7 250x ” hanno quasi gli stessi GHz. Ma … questo non è nemmeno corretto per confrontare le loro prestazioni)

    Commenti

    • Ciao, benvenuto a scicomp! In stackexchange è meglio avere un post autonomo (vedi qui ). Per favore, per migliorare il post, prova a modificare la risposta con le informazioni di base dellarticolo.

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *