vistas tablas rendimiento rapidos rapido querys query para optimizar optimizacion mas lento hacer grandes datos consultas como cantidades performance caching memory cpu cpu-registers

performance - tablas - sql mas rapido



Caché o registros, ¿cuál es más rápido? (2)

Lo siento si este es el lugar equivocado para preguntar esto, pero he buscado y siempre he encontrado una respuesta diferente. Mi pregunta es:

¿Cual es mas rápido? ¿Registro de caché o CPU?

Según yo, los registros son los que cargan directamente los datos para ejecutarlo, mientras que la memoria caché es solo un lugar de almacenamiento cercano o interno en la CPU.

Aquí están las fuentes que encontré que me confunden:

2 para caché | 1 para los registros

http://in.answers.yahoo.com/question/index?qid=20110503030537AAzmDGp

El caché es más rápido.

http://wiki.answers.com/Q/Is_cache_memory_faster_than_CPU_registers

Entonces, ¿cuál es realmente?


Específicamente en la arquitectura x86:

  • La lectura del registro tiene una latencia de 0 o 1 ciclo.
  • Escribir en los registros tiene una latencia de 0 ciclos.
  • La lectura / escritura del caché L1 tiene una latencia de 3 a 5 ciclos (varía según la antigüedad de la arquitectura)
  • Las solicitudes reales de carga / almacenamiento pueden ejecutarse dentro de 0 o 1 ciclos debido a las funciones de reescritura de reescritura y reenvío de almacén (detalles a continuación)

La lectura del registro puede tener una latencia de 1 ciclo en las CPU Intel Core 2 (y modelos anteriores) debido a su diseño: si se están leyendo suficientes instrucciones de ejecución simultánea de diferentes registros, el banco de registros de la CPU no podrá atender todas las solicitudes en un ciclo único. Esta limitación de diseño no está presente en ningún chip x86 que se haya colocado en el mercado de consumo desde 2010 (pero está presente en algunos chips Xeon lanzados en 2010/11).

Las latencias de caché L1 son fijas por modelo, pero tienden a ser más lentas a medida que se retrocede en el tiempo hacia modelos más antiguos. Sin embargo, tenga en cuenta tres cosas:

  1. Los chips x86 en estos días tienen una memoria caché de escritura que tiene una latencia de 0 ciclos. Cuando almacena un valor en la memoria, cae en ese caché y la instrucción puede retirarse en un solo ciclo. Entonces, la latencia de la memoria solo se vuelve visible si emite suficientes escrituras consecutivas para llenar la memoria caché de escritura. Las memorias caché de reescritura han sido prominentes en el diseño de chips de escritorio desde aproximadamente el 2001, pero hasta hace poco más estaban ausentes en los mercados de chips móviles basados ​​en ARM.

  2. Los chips x86 en estos días tienen un reenvío desde la memoria caché de escritura. Si almacena una dirección en el caché de WB y luego vuelve a leer la misma dirección varias instrucciones más adelante, la CPU obtendrá el valor del caché de WB en lugar de acceder a la memoria L1 para ello. Esto reduce la latencia visible en lo que parece ser una solicitud L1 a 1 ciclo. Pero, de hecho, el L1 no se hace referencia en absoluto en ese caso. El reenvío de la tienda también tiene otras reglas para que funcione correctamente, que también varía mucho entre las diferentes CPU disponibles en el mercado hoy en día (que generalmente requieren una alineación de direcciones de 128 bits y un tamaño de operando coincidente).

  3. La función de reenvío de almacenamiento puede generar falsos positivos cuando la CPU piensa que la dirección está en el búfer de reescritura en función de una rápida comprobación de bits parciales (generalmente de 10 a 14 bits, según el chip). Utiliza un ciclo extra para verificar con un cheque completo. Si eso falla, entonces la CPU debe volver a enrutar como una solicitud de memoria normal. Esta falla puede agregar una latencia adicional de 1-2 ciclos a los accesos de caché L1 que califican. En mis mediciones, los errores de reenvío de tiendas ocurren con bastante frecuencia en el Bulldozer de AMD, por ejemplo; suficiente para que su tiempo de latencia de caché L1 sea aproximadamente un 10-15% más alto que sus 3 ciclos documentados. Es casi un factor no en la serie Core de Intel.

Referencia principal: http://www.agner.org/optimize/ y específicamente http://www.agner.org/optimize/microarchitecture.pdf

Y luego grafica manualmente la información de eso con las tablas en arquitecturas, modelos y fechas de lanzamiento de las diferentes páginas de la Lista de CPUs en wikipedia.


Intentar hacer que esto sea lo más intuitivo posible sin perderse en la física subyacente a la pregunta: existe una correlación simple entre la velocidad y la distancia en electrónica. Cuanto más lejos realice el recorrido de la señal, más difícil será llegar al otro extremo del cable para que la señal no se corrompa. Es el principio de diseño electrónico "no hay almuerzo gratis".

El corolario es que cuanto más grande es más lento. Porque si haces algo más grande, inevitablemente las distancias se harán más grandes. Algo que fue automático durante un tiempo, al reducir el tamaño de la característica en el chip, se produjo automáticamente un procesador más rápido.

El archivo de registro en un procesador es pequeño y se encuentra físicamente cerca del motor de ejecución. Lo más alejado del procesador es la memoria RAM. Puedes sacar el estuche y ver los cables entre los dos. En el medio se encuentran los escondites, diseñados para cerrar la brecha dramática entre la velocidad de esos dos opuestos. Cada procesador tiene un caché L1, relativamente pequeño (32 KB tipo) y ubicado más cerca del núcleo. Más abajo está el caché L2, relativamente grande (4 MB typ) y ubicado más lejos del núcleo. Los procesadores más caros también tienen un caché L3, más grande y más lejos.

Entonces, lo que sigue es que un registro de CPU siempre es más rápido que el caché L1. Es lo mas cercano La diferencia es aproximadamente un factor de 3.