In che modo i "numeri di latenza di Jeff Dean che ogni programmatore dovrebbe sapere" devono essere accurati nel contesto delle diverse implementazioni hardware?

8

Mi riferisco a questo grafico dei numeri di latenza , attribuito a Jeff Dean di Google.

La cosa che non capisco è, questi numeri non variano da un set di hardware all'altro? Come possono essere precisi per tutti i diversi tipi di RAM, CPU, scheda madre, disco rigido, ecc.

    
posta temporary_user_name 11.03.2016 - 19:10
fonte

5 risposte

12

Questi numeri (elencati anche su Programmazione di te stesso di Norvig in 10 anni ) sono approssimativi, utili solo come ( ordine di) magnitudine.

In realtà, l'hardware di oggi (almeno per desktop o laptop) non varia molto anche tra un economico computer portatile da 300 € e una workstation di fascia alta da 10k €. La velocità varia di un fattore di circa 2 o 4 al massimo. Tale workstation può avere un disco più grande, più core, cache e RAM. Tuttavia, questo non ha molto impatto sulle prestazioni raw single-threaded.

Guarda alcuni dati sul link o su alcuni comparatori di CPU.

La cosiddetta legge di Moore è morire . Il mio desktop vecchio di 3 anni a casa (un i3770K) potrebbe essere sostituito (oggi, a marzo 2016) da qualche i6700 che è solo 20% più veloce.

    
risposta data 11.03.2016 - 19:17
fonte
6

I numeri non sono pensati per essere precisi. Sono i rapporti tra gli ordini di grandezza tra livelli che contano.

Tuttavia, quando appare una tecnologia dirompente (es. cloud computing, ethernet da 10 GB / 100 GB, nuovo modulo kernel di rete, reti di storage SSD, virtualizzazione e containerizzazione), questi numeri possono essere invalidati a causa di nuovi livelli che appaiono, scompaiono o vengono rimescolati intorno.

Quando si programma a un livello molto alto - dove tutto il calcolo, il networking, l'analisi, ecc. vengono eseguiti usando librerie non scritte da soli, conoscere le prestazioni di operazioni di basso livello potrebbe non essere di grande aiuto, poiché la tua opportunità migliorare le prestazioni di ogni biblioteca è piuttosto limitato o addirittura impossibile.

Leggi invece attentamente la documentazione relativa alle prestazioni di ciascuna biblioteca. Se una biblioteca non viene con quelle, chiedi a loro - fallo diventare un problema. O impara come confrontare il software nel modo corretto.

Avere una conoscenza di base dei numeri di latenza è importante quando sei assunto da una società che progetta e produce componenti software. Confrontalo con un'azienda che progetta e produce automobili e ogni componente contenuto - la proverbiale "reinventare la ruota" (gomma, pressione dei pneumatici, pedate, ecc.)

La maggior parte delle aziende di software non funziona a livello di componenti: interi sistemi software funzionali possono essere costruiti mettendo insieme i componenti. Queste società di software non devono concentrarsi su come progettare componenti in termini di latenze; devono invece valutare la qualità dei componenti che scelgono.

Per riassumere, (1) è molto probabile che non sia necessario conoscere i numeri di latenza; (2) a meno che non si voglia essere assunti da una società che produce componenti software (librerie), sia in vendita che per uso interno (come in alcune delle più grandi società di software al mondo), (3) se si ha bisogno di quei numeri, il tuo compito è quello di fare da solo i benchmark, in modo scientificamente corretto, altrimenti non dovresti lavorare su componenti software.

    
risposta data 12.03.2016 - 14:22
fonte
2

Non sono perfettamente accurati e non sono pensati per essere.

Sono (specialmente sui numeri più piccoli) un po 'meglio del solo ordine di grandezza. Un altro punto è che può aiutare a capire quali sono le cose vicine, che le persone a volte interpretano male come molto più distanti di quanto non siano realmente. Per un ovvio esempio, molte persone ritengono che la divulgazione errata di rami sia spesso una grande cosa. può essere un grosso problema se viene ripetuto molto, ma non necessariamente vale la pena sacrificare una quantità enorme ovunque e altrove solo per ottenere una migliore previsione delle branche (es. leggere dalla memoria principale, o anche dalla cache L2 per migliorare la previsione del ramo, è probabilmente una perdita netta).

Allo stesso tempo, sì, gli ordini di grandezza possono essere le parti più utili. Ad esempio, ci vuole circa 100 volte più tempo per accedere ai dati dalla memoria principale che da un registro. Sì, su una macchina potrebbe essere circa 97 volte più lungo, e su un'altra potrebbe essere più vicina a 127 volte di più. Quasi certamente sarà più vicino a 100 che a 10 o 1000.

Personalmente, tenderei a pensare che la maggior parte di questi sia simile alle isole, per esempio, nell'Oceano Pacifico. Le velocità del disco rigido (ad esempio) potrebbero essere le isole hawaiane. Le velocità SSD sono le isole filippine. Questo sta mostrando la mappa con una scala abbastanza piccola da rendere ognuno di questi un unico punto. Se eseguiamo lo zoom in avanti, non è chiaramente vero, ma la distanza tra le due catene è molte volte maggiore delle distanze tra le isole in entrambe le catene.

    
risposta data 11.03.2016 - 19:29
fonte
2

Nessuno ha affermato che questi numeri siano precisi per qualsiasi hardware.

Tuttavia, sono molto, molto più accurati delle supposizioni cieche. Questo è ciò su cui molte persone sfortunatamente basano il proprio codice.

    
risposta data 12.03.2016 - 13:14
fonte
0

Ovviamente i numeri non possono essere precisi per ogni macchina. E immagino che non avrebbero mai dovuto. Tuttavia mostrano differenze nell'ordine di grandezza tra diversi tipi di operazioni.

Potresti trovare alcuni link e dati più utili nei commenti dei tuoi dati collegati.

    
risposta data 11.03.2016 - 19:24
fonte

Leggi altre domande sui tag