Per ulteriori dettagli sul ciclo di conteggio e sull'esecuzione fuori servizio, vedere Agner Fog's microarch pdf e altri collegamenti nello x86 tag wiki.
La latenza di caricamento L1 di Intel Haswell è di 4 cicli, tipica delle moderne CPU x86. cioè quanto velocemente mov eax, [eax]
può essere eseguito in un ciclo, con un puntatore che punta a se stesso. (O in una piccola lista collegata a circuito chiuso).
La latenza di utilizzo del carico è 1 ciclo superiore per i vettori SSE/AVX nelle CPU Intel.
Store-reload latenza è 5 cicli, e non è correlato al riscontri cache o perdere (è store-forwarding, non L1 cache).
Come commentato da harold, l'accesso al registro è di 0 cicli. Così, ad esempio:
inc eax
ha 1 ciclo latenza (solo l'operazione ALU)
inc dword [mem]
ha 6 ciclo latenza finché un carico da dword [mem]
sarà pronto. (ALU + store-forwarding). per esempio. mantenere un contatore di loop in memoria limita un loop a un'iterazione per 6 cicli.
mov rax, [rsi]
ha latenza 4 ciclo da rsi
essere pronto per essere pronto rax
su un colpo L1 (carico L1-uso latenza.)
http://www.7-cpu.com/cpu/Haswell.html ha una tabella di latenza per cache (che io copia qui) e alcuni altri numeri sperimentali, inclusa la latenza di hit L2-TLB (su una miss L1DTLB).
Intel i7-4770 (Haswell), 3,4 GHz (Turbo Boost spento), 22 nm. RAM: 32 GB (PC3-12800 cl11 cr2).
- L1 Cache dati = 32 KB, 64 B/linea, 8-VIE.
- Cache di istruzioni L1 = 32 KB, 64 B/linea, 8-WAY.
- cache L2 = 256 KB, 64 B/linea, 8 VIE
L3 cache = 8 MB, 64 B/linea
L1 cache dati Latenza = 4 cicli per semplice accesso tramite puntatore (mov rax, [rax]
)
- Latenza cache dati L1 = 5 cicli per l'accesso con calcolo dell'indirizzo complesso (
mov rax, [rsi + rax*8]
).
- L2 cache latency = 12 cicli
- L3 Cache Latenza = 36 cicli
- RAM Latenza = 36 cicli + 57 ns
La pagina di riferimento di primo livello è http://www.7-cpu.com/utils.html, ma ancora doesn' t davvero spiegare cosa significano le diverse dimensioni di test, ma il codice è disponibile. I risultati del test includono Skylake, che è quasi lo stesso di Haswell in questo test.
La risposta di @ paulsm4 ha una tabella per un Nehalem Xeon multi-socket, inclusi alcuni numeri di memoria/L3 remoti (altri socket).
fonte
2016-08-24 22:10:50
Varia a seconda del processore, ma non so di dove sia * abbastanza * veloce come un registro - circa 1 a 5 orologi più lento è abbastanza tipico. –
Non conosco nessuna architettura in cui L1 ha una latenza a ciclo singolo. Inoltre, non conosco architetture x86 in cui l'accesso al registro abbia una latenza misurabile di per sé (una certa latenza può essere percepita a causa di altri fattori). – harold
Vedere http://www.7-cpu.com/cpu/Haswell.html: alcuni numeri di latenza per-cache e per-TLB e alcuni numeri sperimentali. Vedi anche [pdf microarch di Agner Fog] (http://agner.org/optimize/), e altri link nella [wiki dei tag x86] (http://stackoverflow.com/tags/x86/info). La latenza di caricamento L1 di Haswell è di 4 cicli, tipica delle moderne CPU x86. La latenza di ricarica del negozio è di 5 cicli, e non correlata alla cache in caso di errore (è il forwarding del negozio, non la cache). Come dice harold, l'accesso al registro è di 0 cicli (ad es. 'Inc eax' ha una latenza di 1 ciclo,' inc [mem] 'ha una latenza di 6 cicli (ALU + store-forwarding) –