Hai una metafora per latenze cache / dati? [chiuso]

3

Da questa risposta sulle latenze, abbiamo alcuni numeri (sì, caveat caveat) per le latenze durante la codifica (leggermente modificato ):

  • Riferimento cache L1 0,5 ns
  • Sorgente errata 5 ns
  • Riferimento cache L2 7 ns
  • Riferimento memoria principale 100 ns
  • Invia 2K byte su una rete da 1 Gbps 20.000 ns
  • Leggere 1 MB sequenzialmente dalla memoria 250.000 ns
  • Disco cerca 10.000.000 ns
  • Leggi 1 MB in sequenza dalla rete 10.000.000 ns
  • Leggi 1 MB sequenzialmente dal disco 30.000.000 ns
  • Invia pacchetto CA- > Paesi Bassi- > CA 150.000.000 ns

Hai una metafora che la mette in termini umani? Ad esempio, un essere umano potrebbe trovare un valore in una tabella sulla propria scrivania (L1) in 15 secondi, quindi il tempo equivalente per andare a trovare la stessa cosa se la pagina è ancora nel libro sullo scaffale (L2) sarebbe 14 volte più lungo, o 3,5 minuti.

So che questo sembra un ELI5, ma penso che la maggior parte dei programmatori (incluso me) manchi davvero di come variano gli ordini di grandezza, rendendo difficile ragionare sulla possibilità di memorizzare alcune funzioni o pre-memorizzare alcuni dati. Espanderò l'esempio in una risposta.

Se hai un handle sulla pipeline della CPU e cicli invece, sarebbe un grande vantaggio per capire le CPU. Anche prestazioni mutex, paralellismo SIMD, multi-threading, multi-core ...

    
posta Phil H 15.05.2014 - 13:33
fonte

1 risposta

4

Espansione dell'esempio:

È necessario il risultato di un calcolo del registro, log (7.2), ma si ha solo una regola di scorrimento e nessun computer. Ti porta:

  • 15s [1x] per cercare il valore per 7.2 in una tabella sulla tua scrivania (L1), perché hai la pagina da 7,1 a 7,2 fotocopiata.
  • 3,5 min [14x] per la tua segretaria di andare a trovare la stessa cosa da un libro sullo scaffale dell'ufficio (L2), anche se questo è condiviso con i tuoi colleghi (core) quindi potresti dover aspettare.
  • 50 minuti [200x] per l'assistente del tuo segretario per trovare il libro appropriato dalla biblioteca del campus (memoria principale) se non hai una copia sullo scaffale dell'ufficio.
  • 9.5 anni [2e7 x] per il tuo valore da reperire nell'archivio nazionale che prevede la creazione di una catena umana fino a un remoto villaggio di montagna (ricerca disco).
  • 143 anni [3e8 x] per trovare il tuo valore inviando un razzo al sistema stellare vicino e viceversa (richiesta pacchetto con 150ms round trip).

Come sempre, gli dei galattici sono disposti ad aspettare circa 250 anni se hai solo la risposta 1, ma si aspettano di vedere qualche segno di progresso (l'utente si aspetta una risposta in 250 ms).

Se avessi fatto alcuni di questi e avessi pensato che il risultato sarebbe stato inferiore a 0.85 (permettendoti di portare avanti il tuo lavoro su quella base), quando realizzi che in realtà sono 0.857, ti ci vorranno 2,5 minuti per cancella tutte le cose che hai scritto da quell'errore (misfatto filiale).

Se hai bisogno di più di 1 valore, pronuncia molti valori dello stesso libro:

  • 43 giorni [5e5 x] per ricevere un milione o più di questi dalla biblioteca del campus in sequenza; che funziona a circa 7,5s ciascuno, rispetto ai 50 minuti per ottenere 1.
  • 3,5 giorni per inviare una grande richiesta per un carico di valori a livello internazionale (richiesta di rete locale).
  • 9.5 anni [2e7 x] per ricevere circa un milione di questi (ricezione della rete locale), supponendo che li abbiano tutti a portata di mano e non debbano cercare nel proprio archivio nazionale (ricerca disco), che funziona a circa 5 minuti ciascuno.
  • 29 anni [6e7 x] per ricevere un milione o più di questi dall'archivio nazionale in sequenza; che funziona a circa 15 minuti ciascuno, rispetto ai 9,5 anni per ottenere 1.

Se sembra strano che l'archivio nazionale impieghi più tempo di una richiesta internazionale, allora sì è strano. Ma questo è quanto sono lenti i dischi rigidi; è più rapido chiedere alla macchina successiva se ha i valori da consegnare (cioè memorizzati nella cache) che eseguire la scansione della testina sul bit appropriato di disco pronto per iniziare a ricevere i valori.

Speriamo che se la metafora non sia troppo tortuosa, puoi iniziare a vedere come potresti usare il caching, il pre-fetching e così via per evitare di dover chiedere all'archivio nazionale (disco), o ci sia vietato fare una richiesta di rete ( Proxima centauri, preparati per una nave generazionale tra diversi decenni). Ad esempio, se qualcuno ha detto "perché non ho appena calcolato tutti i risultati del registro e li ho messi su disco in modo che io possa trovarne uno se ne ho bisogno", dovrebbe essere abbastanza evidente perché potrebbe essere più veloce calcolarlo semplicemente ogni volta (suggerimento: 9,5 anni!), ma anche perché a volte è ancora più veloce memorizzare nella cache roba per un grande batch sequenziale (7,5s ciascuno in media dalla RAM (biblioteca del campus) invece di dire 30s da calcolare).

    
risposta data 15.05.2014 - 13:33
fonte

Leggi altre domande sui tag