¿Puede el intercambio falso conducir a resultados no válidos en CPU de múltiples núcleos y multiprocesadores o es solo una cuestión de degradación del rendimiento?

El intercambio falso no conduce a resultados no válidos si existen protocolos de coherencia de caché. El efecto principal es que aumenta la invalidación de las líneas de caché, lo que en realidad no es necesario para un resultado correcto.
Ahora consideremos un ejemplo. Supongamos que hay una matriz de 8 enteros compartidos entre 2 procesadores. (Cuando digo procesadores, puede suponer que son centrales también compartiendo, por ejemplo, caché L2). Digamos que la matriz es un [0] -a [7]. Ahora veamos los pasos:

  • El núcleo 0 quiere leer un [2].
  • El núcleo 1 quiere escribir un [5]. Ahora la línea de caché está presente en 2 núcleos privados / locales (digamos L1).
  • Ahora digamos que Core 1 quiere escribir en un [5]. Por lo tanto, debido a esta línea de caché en un [2] se invalidará.

Pero ahora piénsalo. ¿Fue necesario? La respuesta es no. Core 0 ni siquiera estaba accediendo al elemento a [5], pero aún así fue invalidado. Esto es falso intercambio.
En lo que respecta a sus preguntas, encuentre las respuestas de la siguiente manera:
Efecto del uso compartido falso: provoca invalidación innecesaria y esto obviamente aumenta el tráfico en el bus a medida que se transmiten más mensajes de invalidación innecesarios. No es responsable del resultado incorrecto. Los resultados incorrectos se deben a la implementación incorrecta del protocolo de coherencia de caché.
La CPU de hoy tiene protocolos de coherencia de caché como MESIF, MOESI, etc. Detectan el uso compartido, pero no creo que tenga sentido detectar si el uso compartido es verdadero o falso. Los arquitectos de la comunidad están interesados ​​en conocer el valor, ya que les ayuda a diseñar el protocolo y encontrar el tamaño de línea de caché óptimo.
No, no puede conducir a condiciones de carrera. Eso dependerá nuevamente del protocolo de coherencia de caché.

Respuesta corta: No. El intercambio falso conduce a rendimientos de caché ineficientes. No afecta la corrección del programa.

Los cachés se organizan como fragmentos de 32/64/128 bytes llamados líneas. La modificación de cualquier byte se trata como una modificación de toda la línea.
La coherencia de la memoria caché en las CPU multinúcleo sincroniza líneas enteras, no bytes individuales.

Suponga que la CPU 1 actualiza con frecuencia un contador de bucles que almacené en la memoria 0x1002, la CPU 2 escribe con frecuencia una suma variable en la memoria 0x1004.
Ambas ubicaciones de memoria residen en la misma línea. Las CPU NO comparten los mismos datos (ubicación de memoria), sino la misma línea. De ahí el término falso intercambio.
Cuando cualquiera de las ubicaciones de memoria se actualiza, ambas cachés de CPU L1 se sincronizan, aunque la ubicación de memoria actualizada no es utilizada por la otra CPU. Esto causa tráfico de bus innecesario, ralentizando otros accesos a la memoria.


La mayoría de los otros usuarios han respondido esta pregunta en detalle. Agregaré algo nuevo. Creo que confundió el intercambio falso con los modelos de coherencia de memoria .

El modelo de coherencia de memoria de un multiprocesador de memoria compartida proporciona una especificación formal de cómo el sistema de memoria se mostrará al programador, eliminando la brecha entre el comportamiento esperado por el programador y el comportamiento real soportado por un sistema.

Modelo de consistencia | Modelos de coherencia de memoria compartida: un tutorial
Página en hp.com

Espero que esto ayude.

Sí, es mejor que todos los sistemas multi-core o multiprocesador tengan un mecanismo robusto para la coherencia de caché, de lo contrario la memoria se dañará. Un error en el diseño de la CPU o del controlador de memoria que da como resultado una coherencia de caché poco confiable sería muy grave.

Su uso del término “intercambio falso” es un poco confuso:

  • Parece que lo está utilizando para describir un caso en el que un sistema no puede mantener correctamente la coherencia de la memoria caché.
  • Parece que el término se usa normalmente para describir un problema que es más o menos lo contrario, en el que un sistema multiprocesador accede a la memoria compartida de manera ineficiente precisamente porque está tratando de mantener la coherencia de la memoria caché de un bloque de memoria que está utilizando dos CPU . Las dos CPU en realidad no están tocando los mismos bytes dentro de ese bloque, por lo que no hay una preocupación real con la coherencia de caché a nivel de corrección de software. Sin embargo, debido a restricciones en el tamaño y la alineación del bloque de caché, todo el bloque debe almacenarse y cargarse repetidamente desde la memoria principal.