Para obtener más información sobre el ciclo de recuento y la ejecución fuera de servicio, consulte Agner Fog's microarch pdf y otros enlaces en el x86 tag wiki.
La latencia de uso de carga de Intel Haswell's L1 es de 4 ciclos, lo que es típico de las CPU modernas x86. es decir, qué tan rápido mov eax, [eax]
se puede ejecutar en un bucle, con un puntero que apunta a sí mismo. (O a una pequeña lista de enlaces cerrados).
La latencia de uso de carga es 1 ciclo más alta para los vectores SSE/AVX en las CPU de Intel.
latencia tienda-recarga es de 5 ciclos, y no está relacionada con caché impredecible (que es la tienda de reenvío, no caché L1).
Como comentó harold, el acceso de registro es 0 ciclos. Así, por ejemplo:
inc eax
tiene 1 latencia ciclo (sólo la operación ALU)
inc dword [mem]
tiene 6 ciclo de latencia hasta que una carga de dword [mem]
estará listo. (ALU + reenvío de tienda). p.ej. mantener un contador de bucle en la memoria limita un bucle a una iteración por cada 6 ciclos.
mov rax, [rsi]
tiene una latencia de 4 ciclos de rsi
estar listo para rax
estar listo en un éxito L1 (L1 carga de usar latencia.)
http://www.7-cpu.com/cpu/Haswell.html tiene una tabla de latencia por caché (que voy a copie aquí), y algunos otros números experimentales, incluyendo L2-TLB, alcanzan la latencia (en una falla L1DTLB).
Intel i7-4770 (Haswell), 3,4 GHz (Turbo Boost desactivado), 22 nm. RAM: 32 GB (PC3-12800 cl11 cr2).
- L1 Caché de datos = 32 KB, 64 B/línea, 8 VÍAS.
- L1 caché de instrucciones = 32 KB, 64 B/línea, 8 VÍAS.
- caché L2 = 256 KB, 64 B/línea, 8-WAY
L3 cache = 8 MB, 64 B/línea
L1 Caché de datos Latencia = 4 ciclos para un acceso sencillo a través de puntero (mov rax, [rax]
)
- L1 Latencia del caché de datos = 5 ciclos para el acceso con el cálculo de direcciones complejas (
mov rax, [rsi + rax*8]
).
- L2 Cache de latencia = 12 ciclos
- L3 Cache Latencia = 36 ciclos
- RAM de latencia = 36 ciclos + 57 ns
La página de referencia de nivel superior es http://www.7-cpu.com/utils.html, pero todavía doesn' Realmente explicar qué significan los diferentes tamaños de prueba, pero el código está disponible. Los resultados de la prueba incluyen Skylake, que es casi lo mismo que Haswell en esta prueba.
La respuesta de @ paulsm4 tiene una tabla para un Nehalem Xeon de varios sockets, que incluye algunos números de memoria/L3 remotos (otro zócalo).
Varía según el procesador, pero no sé de dónde sea * bastante * tan rápido como un registro: aproximadamente 1 a 5 relojes más lento es bastante típico. –
No conozco ninguna arquitectura en la que L1 tenga latencia de ciclo único. Además, no conozco ninguna arquitectura x86 donde el acceso de registro tenga una latencia medible en sí misma (puede percibirse cierta latencia debido a otros factores). – harold
Vea http://www.7-cpu.com/cpu/Haswell.html: algunos números de latencia por-caché y por-TLB, y algunos números experimentales. Véase también [pdf de microarmen de Agner Fog] (http://agner.org/optimize/) y otros enlaces en la [wiki de la etiqueta x86] (http://stackoverflow.com/tags/x86/info). La latencia de uso de carga L1 de Haswell es de 4 ciclos, que es típica de las CPU modernas x86. La latencia de recarga de la tienda es de 5 ciclos y no está relacionada con el acierto o fallo de la memoria caché (es el reenvío de la tienda, no la caché). Como dice Harold, el acceso de registro es de 0 ciclos (por ejemplo, 'inc eax' tiene 1 ciclo de latencia,' inc [mem] 'tiene 6 ciclos de latencia (ALU + reenvío de tienda). –