¿Cuál es el número esperado de veces que una computadora puede calcular 1 + 1 correctamente sin cometer un error?

Los errores matemáticos dentro de los sistemas informáticos modernos son increíblemente raros, y también es un teorema poco comprobado y agradable llamado problema de detención, que dice que en un caso general es imposible demostrar que un programa determinado realmente se detendrá.

Para estimar si ese programa se detendrá y cuándo, necesitamos saber:

  • El tamaño del software detrás del código (como se parece a Python, así que esa es la máquina virtual de Python)
  • La huella de memoria del código que se ejecuta:
    • Mientras bucle
    • Suma entera
    • Comparación de enteros
    • La variable ‘correcto’
    • Memoria asociada a las constantes 1 y 2.

Asumimos que, dado que el código es pequeño, todo el código se carga en la RAM y nada se intercambia. También estamos asumiendo que el código y la CPU en sí son correctos cuando se inicia el código. Si el código es grande, es posible que también necesitemos tener en cuenta la tasa de falla de bits de su dispositivo de memoria virtual.

También necesitamos conocer la tasa de error de bit promedio de la memoria en su sistema, que será en términos de errores de bit por millón de operaciones (o una medida similar), o errores de bit por año / década. Dada la huella de memoria de todo el código en la memoria, y la probable cubierta de corrupción de memoria podríamos (en teoría) obtener una medida para un error de un solo bit en cualquiera de los códigos o la memoria que usa la aplicación.

También necesitamos saber qué tan probable sería un error de un solo bit para afectar realmente el funcionamiento del código (en lugar de simplemente causar un bloqueo), lo que requeriría aún más análisis. En la memoria moderna, es más probable que se detecte un error de un solo bit y se cree alguna forma o error, por lo que en realidad podríamos estar buscando un error de doble bit indetectable en la misma dirección de memoria.

Por ejemplo, el MTBF (tiempo medio entre fallas) de un chip RAM comercial es de muchos cientos de años: SRC Forum – RAM MTBF, y esas son medidas para fallas detectadas que bien podrían ser errores de un solo bit (dependiendo de la detección de errores utilizada dentro del RAM. Necesitaríamos medidas para errores no fatales no detectados.

También necesitamos saber qué tan probable es que su CPU obtenga un resultado incorrecto basado en corrupciones, y el entorno en el que opera su CPU. Estoy seguro, por ejemplo, puedo hacer que su CPU se bloquee debido a errores al sobrecalentarlo, pero en eso caso no obtendrá una salida. Por lo tanto, debe conocer los cambios reales que harán que la CPU realice la suma de manera incorrecta o ejecute la comparación de manera incorrecta de modo que el programa todavía se ‘ejecute’, pero salga en lugar de continuar.

El MTBF de una CPU comercial estará en millones de horas, pero nuevamente es una falla fatal total de la CPU, en lugar de un error de operación no detectado, que es aún menos probable debido a la corrección de errores en la CPU: solo pude encuentre este que es el MTBF para un Pentium II: me imagino que las CPU más modernas tienen al menos este nivel o mejor: MTBF para la CPU Pentium II 333Mhz

Con todos esos detalles, tenemos una medida de la probabilidad de que ocurra una condición de error de memoria por bucle, y la probabilidad de que ocurra un error de CPU por operación y también tenemos cifras de la cantidad de tiempo que su memoria y CPU pueden estar antes de romper.

Entonces podríamos estar en condiciones de calcular una idea aproximada de hasta qué punto la aplicación puede contar antes de que falle, lo que, por supuesto, dependerá en parte de la rapidez con que su código pueda ejecutar ese ciclo.

Te sugiero que esperes mucho tiempo antes de que algo haga que este código se detenga de forma controlada, y es muy probable que la causa final de una parada sea otra cosa (fuente de alimentación, ventilador, etc.) antes de que la electrónica falle. una manera de darte la respuesta incorrecta. Dependiendo de su arquitectura, es posible que la variable de contador ‘correcta’ se desborde muchas veces antes de que el código realice el cálculo incorrecto.

Todo eso es una forma muy larga de decir que es imposible responder a su pregunta sin detalles muy profundos de su hardware y cómo funciona, cómo está protegido contra la radiación u otros impactos ambientales, qué tipo de verificación de errores se emplea, exactamente software que se usa y ejecuta en su sistema, y ​​muchos, muchos otros detalles. Incluso entonces, es posible que solo podamos darle una estimación aproximada de un posible valor, y su ciclo en realidad nunca se detendrá antes de que su computadora se detenga por otra razón. Asumir que tiene un hardware perfecto que nunca fallará tampoco ayuda, porque, por supuesto, el hardware perfecto nunca encontrará esos errores de bits aleatorios o errores de CPU que harán que los cálculos fallen.

Buena suerte al recopilar toda esa información y hacer los cálculos 🙂

Hasta que algo se queme (memoria, CPU, placa base) o coloque una lámpara fluorescente u otro elemento para sabotear el circuito eléctrico.

¿Cuál es el número esperado de veces que una computadora puede calcular 1 + 1 correctamente sin cometer un error?