Multinúcleo Programación de la caché de la CPU

Perfil caché

Caché, es decir, la memoria caché. Caché puede mejorar el rendimiento de lectura, el principio es contenido con el mejor rendimiento del medio de almacenamiento que almacena una parte de la conexión de alta frecuencia, la velocidad de acceso para mejorar la probabilidad global.

En el desarrollo, nuestra caché boca puede ser una variable, o Redis. Dentro de la CPU de la computadora, CPU a menudo se refiere a todos los niveles de caché de la CPU.

 

 

principio Caché de la CPU

Caché funciona es cuando la CPU para leer un dato, primero desde la caché de la CPU, que se encuentra lee inmediatamente y enviado a la CPU; no lo encuentra, la tasa de lectura de la memoria relativamente lenta y se envía a la CPU procesamiento, mientras que el bloque de datos donde los datos transferidos a la memoria caché, puede provocar más tarde la totalidad de los datos leídos de la caché, sin tener que llamar a la memoria. Es este mecanismo se permite que la CPU lee la tasa de aciertos de caché de lectura es muy alta (más de la CPU hasta un 90%), que es la CPU al lado de datos de lectura 90% de la caché de la CPU, sólo el 10 % necesita ser leído desde la memoria. Esto ahorra la CPU lee directamente la memoria de las veces, cuando la CPU lee la base de datos sin tener que esperar. En general, una CPU lee la secuencia de datos después de la primera memoria caché. (Extracto de Wikipedia)

El modelo de simplificación después, si quieres contenido de la memoria de acceso de la CPU:

CPU Core1 -> L1 Cache -> L2 Cache -> L3 Cache -> RAM

CPU Core2 -> L1 Cache -> L2 Cache -> L3 Cache -> RAM

Cabe señalar que los casos simples, cada núcleo de CPU tiene su propia caché multinivel independiente, hay tres común. La velocidad de acceso, L1> L2> L3, la capacidad es generalmente inversamente proporcional a la velocidad. popular punto de que en algún lugar de la declaración de variable int foo foo = 1 ;, CPU es obtener el valor de la caché L1 ~ L3 en el caso en el que hay, sin multinivel memoria caché de golpe antes de ir a tomar.

Ahora un número relativamente nuevos modelos de CPU de Intel, la caché ya no es independiente el uno del otro diseñado, de doble núcleo será compartida caché de nivel 2, es decir, "caché inteligente" compartida tecnología de caché.

 

 

de línea de caché

El caché en una longitud de corte abierta, hay un montón de línea de caché. Cache Cache Line es la unidad más pequeña, por lo general de 64 bytes. Si la caché L1 es 6400 bytes, entonces él puede ser dividido en 100 de línea de caché. En el lenguaje C, que puede sentir las unidades de memoria más pequeñas deben ser variable, int, largo, largo, etc., por lo general sólo 4 bytes u 8 bytes. caché de la CPU para el rendimiento, y es por lo general de línea de caché en unidades de una gran memoria caché aliento. Cache Cache Line será un valor en una serie de variables. Si la línea de caché tienen datos sucios, sino también para actualizarlo para toda la unidad.

 

 

 

la coherencia de caché

El equipo debe asegurar que los datos en la memoria caché es siempre nuevo. Si ha cambiado el valor de la memoria, CPU caché no está sincronizado con el tiempo, ha habido datos inconsistentes. Bajo la arquitectura multi-núcleo de la CPU, para asegurar la consistencia es más compleja, tales como múltiples CPU caché se almacenan en caché el valor de una variable, pero esa variable es uno de los núcleos cambia el valor de la memoria caché en el núcleo de la CPU cómo otras percepción oportuna y de actualización caché?

protocolo MESI puede resolver el CPU multi-core de coherencia de caché.

 

MESI (Modificado exclusivo compartido o no válido)  摘自https://www.cnblogs.com/shangxiaofei/p/5688296.html

 MESI  es también conocido como el acuerdo de Illinois, porque el acuerdo propuesto de apoyo es un ampliamente utilizado por la Universidad del Estado de Illinois, la política de escritura no simultánea del protocolo de coherencia de caché, el protocolo se utiliza en la CPU Intel Pentium serie.

estado del protocolo MESI

Cada línea caché de la CPU (línea CACEH) marcada usando cuatro estados (dos adicionales (bits) se muestra):

M: es modificada (modificada)

La única línea de caché se almacena en caché en la memoria caché de la CPU, y es un modificado (sucio), que es inconsistente con los datos en la memoria principal, la línea de caché en la memoria necesita algún momento en el futuro (CPU permite otra Por favor leer la memoria principal antes de la memoria correspondiente) write-back (reescritura) de memoria principal.

Después de ser escrita de nuevo a la memoria principal, el estado de la línea de caché se convertirá en exclusiva del Estado (exclusivo).

E: exclusivo (Exclusivo)

La única línea de caché se almacena en caché en la memoria caché de la CPU, lo que no se modifica (Limpio), datos consistentes con la memoria principal. Este estado puede ser un estado cuando no se convierte en una memoria compartida para leer la otra CPU (compartido) en cualquier momento.

Del mismo modo, cuando la CPU modificar el contenido de la línea de caché en el estado de modificación puede convertirse en estado.

S: Shared (Compartidos)

Este medio de estado que la línea de caché puede ser una pluralidad de caché de la CPU, y coherencia de los datos en cada memoria caché y la memoria de datos principal (Clean), cuando hay una CPU para modificar la línea de caché,

Otro CPU en la línea de caché puede ser cancelada (se vuelve inactivo (no válida)).

I: no válido (no válida)

La memoria caché es válido (otra CPU podría tener que modificar la línea de caché).

 Un resumen breve:

Hay una comunicación entre los distintos modo de núcleo de la CPU, que se utiliza para notificar a otros núcleos en una línea de caché ha expirado. CPU  antes de la operación de escritura de la caché, éste determinará qué estado se encuentra la línea.

Cuando el estado de la caché en compartida, un núcleo de operaciones de escritura del procesador, será transmitido a informar a otro núcleo de la CPU.

De esta manera, asegurar la consistencia de la caché.

 

 

caché señorita

Necesitamos saber CPU caché para mejorar los datos de velocidad de lectura. Si desea acceder a una memoria, CPU, memoria caché no era, le llamamos caché señorita. Caché señorita hará que su cabeza grande, la CPU tuvo que pasar mucho tiempo en los datos de la memoria caché cargados en. Generalmente, tasa de fallos L1 es aproximadamente 10%. Al revés y pensar en ello, en realidad hay un 90 por ciento desde el campo, hay que admirar la capacidad de los programadores gran Dios.

 

Falso Intercambio Intercambio falsa

Es decir, la falsa compartición MESI poco saludable  Compartidos / no válida  estado. Considere este escenario.

 

1

2

3

4

struct {

    int thread1_data;   // 线程1只读写它

    int thread2_data;   // 线程2只读写它

};

  

Al mismo tiempo, hay dos hilos (Thread1 y Thread2) sólo para leer y escribir su propia esa variable. Al parecer, todo el juego cada uno, independientemente entre sí, debido a que las dos variables consiguen realmente muy cerca, tienden a ser colocado en una línea de caché. Thread1 leer y escribir thread1_data hará que el núcleo Core 2 de thread2_data caché se marca como no válida inválida, con el fin de actualizar la caché. Sabemos que será cargado en la memoria caché es muy lento, si el disparador con demasiada frecuencia causará una degradación del rendimiento.

En la gama de lectura y escritura multi-hilo, con especial atención al problema de la falsa compartición.

 La naturaleza de compartir falsa es que el concepto de lengua superior, entre los aparentemente las variables son independientes, pero a nivel de CPU Cache, dos direcciones variables de sufrir demasiado cerca (en un rango de línea de caché) sólo puede línea de caché en su conjunto punto de vista.

 

 

instrucciones de la CPU fuera de orden con la barrera barrera

Debido a la señorita de caché y otros trabajos que consume tiempo, pero la CPU puede cargar datos al mismo tiempo, haciendo otra cosa, entonces la directiva ciertamente será interrumpida.

En resumen, las instrucciones de la CPU se ejecutan fuera de servicio durante un rendimiento más rápido y una mayor eficiencia.

Instrucciones fuera de orden tuvieron lugar alrededor de nosotros, dar un ejemplo muy conocido,

1

2

a = 1;

b = 2;

 

En el caso de instrucciones de la CPU fuera de orden, a y b están asignados el que no se conoce. Esto causará un problema muy grave si varios hilos dependen de su orden, desbloqueado el caso.

comando de barrera puede resolver el problema de las instrucciones de la CPU fuera de orden. Cuenta la CPU en algunos lugares no fuera de orden. Se trata de un instrucciones de bajo nivel para los usuarios avanzados de idiomas, el bloqueo se debe utilizar, operaciones atómicas de resolver.

Publicado 74 artículos originales · ganado elogios 337 · Vistas 1.3 millones +

Supongo que te gusta

Origin blog.csdn.net/kebu12345678/article/details/103990909
Recomendado
Clasificación