Diga si el núcleo A está modificando una variable X y el núcleo B está leyendo esa variable (X). Por supuesto, en este caso, un protocolo de coherencia de caché actualizará el caché del núcleo B, porque X ha sido modificado por el núcleo A y, por supuesto, la coherencia del caché reducirá la ejecución en el núcleo B. Sin embargo, ¿afectará esta coherencia al funcionamiento del núcleo A? suponiendo que la variable X reside en su caché.Cómo la coherencia de la memoria caché afecta el rendimiento en este caso
Respuesta
Sí. Hay varias formas en que puede afectar el rendimiento. El protocolo estándar que las personas utilizan es una variante de MSI (Modificado, Compartido, Inválido), a veces con O (Propietario) y, a menudo, E (Exclusivo) agregado al protocolo. En su ejemplo, el núcleo A comenzaría en el estado Modificado (o Exclusivo), y la lectura del núcleo B obligaría al núcleo A a cambiarlo al estado Compartido. Esta acción ocupa ciclos en la memoria caché, ya que solo hay tantas operaciones que el núcleo puede realizar en cualquier momento dado. El impacto de esto en el Core A no es muy alto, ya que no está en la ruta crítica. El mayor impacto es si Core A hace una escritura nuevamente. Como la línea de caché está en el estado compartido (o inválido), debe emitir una solicitud para actualizarse a M o E. Esa solicitud debe ir al Core B. Esta operación se encuentra en la ruta crítica y la escritura no puede finalizar hasta que el bloque de caché se actualiza. Dicho esto, las escrituras generalmente se almacenan en búfer y, por lo general, el procesador no se bloqueará en esta operación.
Sí, en las microarquitecturas actuales que usan protocolos de coherencia SI (O) SI, ralentizará también las actualizaciones de A a X
. La razón de esto es que la lectura de B colocará la línea de caché que contiene X
en el estado 'compartido' antes de copiarla, y luego la escritura de A tendrá que invalidar la copia de B para ingresar el estado 'exclusivo' antes de que pueda modificarlo nuevamente.
Dicho todo esto, las escrituras de A a X
podrían no detener realmente la tubería de ejecución de A. Esto depende del modelo de coherencia de memoria de la arquitectura y el lenguaje de programación, y de si la escritura se expulsa como una operación atómica o una valla de escritura posterior.
- 1. ¿Cómo afecta el almacenamiento en caché el consumo de memoria?
- 2. ¿La ofuscación afecta el rendimiento?
- 3. ¿Cuál es el punto de la coherencia del caché?
- 4. ¿Cómo mantener la coherencia de la memoria caché de Hibernate con dos aplicaciones Java?
- 5. ¿Cómo afecta la cláusula IN el rendimiento en Oracle?
- 6. Caché Postgresql (memoria) rendimiento + cómo calentar el caché
- 7. ¿El número de columnas afecta el rendimiento de la consulta?
- 8. ¿El tamaño de la tabla afecta el rendimiento de INSERTAR?
- 9. ¿Cómo afecta la llamada al método el rendimiento en Java?
- 10. Rendimiento al generar falta de memoria caché de la CPU
- 11. z-index, ¿cómo afecta el rendimiento?
- 12. ¿Cómo funciona la memoria caché?
- 13. ¿Cómo corrijo la envidia de la característica en este caso?
- 14. ¿La cantidad de espacios de nombres afecta el rendimiento?
- 15. ¿La colocación de un bloque try-catch afecta el rendimiento?
- 16. ¿Cómo uso la memoria caché en CakePHP?
- 17. Sobrecarga de Spin Loop en términos de coherencia de caché
- 18. En SQL, ¿cómo afecta el uso de DISTINCT al rendimiento?
- 19. ¿Usa la memoria caché del sistema de UIImage objetos con imágenes cargadas de la memoria caché de disco (NSCachesDirectory)?
- 20. ¿Por qué el orden de JIT afecta el rendimiento?
- 21. ¿Qué es el aliasing y cómo afecta el rendimiento?
- 22. ¿Cómo afecta el uso de memoria a la vida útil de la batería?
- 23. Cómo configurar la memoria caché: falso en la llamada jQuery.get
- 24. Deshabilitar la memoria caché en Apache Felix
- 25. Cómo deshabilitar la memoria caché de Oracle para las pruebas de rendimiento
- 26. ¿La inicialización de la variable local con nulo afecta el rendimiento?
- 27. ¿Cómo mejorar el rendimiento de este código?
- 28. ¿Por qué el relleno no está sucediendo en este caso?
- 29. Borrar la memoria caché de Sitecore para un elemento de la memoria caché mediante programación
- 30. Cómo eliminar la memoria caché de UIWebview o dealloc UIWebview
En mi caso, el Core A escribe con frecuencia, y el core B a veces lee con frecuencia, así que supongo que dañará bastante el rendimiento. ¿derecho? – pythonic
Si la mayoría de lo que hace el núcleo a es escribir y la mayoría de lo que el núcleo b está haciendo es leer, entonces sí, puede tener problemas. Esto generalmente se llama ping-ponging. ¿Qué tipo de comunicación estás tratando de hacer? Hay toneladas de documentos sobre esto. Por ejemplo, si está produciendo algo en el núcleo A y desea consumirlo en el núcleo B, entonces debe usar una estructura de fila de la cola que no se pueda cerrar y que evite tanto ping-ponging como sea posible. (Debe tener conceptos como shadow head y shadow tail.) –
Nathan, gracias por un comentario tan informativo. Voy a analizar este ping-ponging con más detalle. – pythonic