¿Con qué frecuencia las CPU cometen errores de cálculo?


22

En las Notas de Dijkstra sobre Programación Estructurada , habla mucho sobre la posibilidad de probar los programas de computadora como entidades abstractas. Como corolario, comenta que las pruebas no son suficientes. Por ejemplo, señala el hecho de que sería imposible probar una función de multiplicación f (x, y) = x * y para cualquier valor grande de x e y en todos los rangos de x e y. Mi pregunta se refiere a su misceláneo. observaciones sobre "hardware pésimo". Sé que el ensayo fue escrito en la década de 1970 cuando el hardware del ordenador era menos fiable, pero los ordenadores todavía no son perfectos, por lo que deben cometer errores de cálculo veces . ¿Alguien sabe con qué frecuencia sucede esto o si hay alguna estadística al respecto?



Aquí está la página de wikipedia sobre el error Pentium FDIV , mencionado por las dos respuestas existentes actualmente.
Cascabel

Nos las arreglamos sin ningún tipo de respaldo o verificación de errores en las operaciones básicas de la CPU, por lo que podemos estimar fácilmente un límite superior para la frecuencia de errores computacionales transitorios aleatorios. La mayoría de las instrucciones de CPU involucran matemática (en el cálculo de direcciones para operaciones de memoria y cómputo), y las CPU modernas realizan miles de millones de operaciones por segundo, llámelo> 1e14 operaciones por día. Si 1 de cada 10 errores matemáticos tendría un efecto obvio en el programa (probablemente una estimación baja), y no vemos tales errores diariamente, la tasa de error básica para la ALU debe ser <1e-13, y yo adivinaría <1e-15.
Russell Borogove

@NickC: ¿estás insinuando que no hay nada práctico sobre esta pregunta? ¿Entonces cree que la pregunta de si el hardware funciona o no no importa? ¿Qué pasa cuando realmente importa si el programa funciona correctamente (la programación en tiempo real es solo teórica o demasiado avanzada para las personas en este sitio)? ¿Qué pasa con el hardware donde un usuario puede robar claves de otros usuarios debido a la filtración de información a través del canal lateral? Maldición, desearía que hubiera un botón de voto negativo para comentarios.
Longpoke

1
@Longpoke Me también.
Nicole

Respuestas:


14

Dejando a un lado los errores reales / reales en el diseño de una CPU, creo que está buscando esta pregunta SO: Rayos cósmicos. ¿Cuál es la probabilidad de que afecten a un programa ? No puedo obtener citas porque SO está bloqueado nuevamente en el trabajo aquí ( suspiro ).

Ignorando lo anterior, parece recordar que hubo algunos errores de cálculo de FPU en los primeros Pentium, por lo que ciertamente no son infalibles.

No tengo pruebas contundentes, pero mi instinto me dice que probablemente debería estar más preocupado por los bits de caché / RAM / disco corruptos que el cálculo incorrecto.


40
¿SO está bloqueado en el trabajo? ¿Alguien en su empresa está tratando de sabotear el desarrollo de software?
Nicole

3
Dices eso como si fuera una sola persona y aún no han tenido éxito ...;)
Dan McGrath

99
Nunca pude entender la razón de bloquear los sitios de SFW a nivel corporativo. Como los motores de búsqueda son una herramienta extremadamente valiosa, debería poder ver la información que producen.
Tim Post

@ Dan, desbloquéalo. Debería poder hacer túneles https a casa.

44
Quedar atrapado sin pasar por el sistema fue solo motivo de terminación. Me mudé a los Estados Unidos y obtuve un nuevo trabajo.
Dan McGrath el

6

Un gran problema al responder esta pregunta en estos días es que los fabricantes de CPU envuelven las erratas para el chip en un NDA (Acuerdo de No Divulgación). Intel hace esto, IIRC.

Muchos fabricantes menos reservados emiten correcciones a la hoja de datos, pero no le dicen qué cambió, por lo que a menos que desee comparar las 300 páginas, tendrá dificultades para contarlo.

Ha habido muchas instrucciones malas en la CPU, ver un informe del kernel de Linux sobre cuáles encuentra en el arranque es moderadamente interesante.

Muy relacionado es el papel de Google sobre errores de memoria, son más comunes de lo que piensas. "Errores de DRAM en la naturaleza: un estudio de campo a gran escala" Schoeder, Pinheiro y Weber publicaron originalmente en ACM SIGMETRICS en 2009. Publicado en Comunicaciones de la ACM Feb 2011

Lo que todos estos errores de memoria significan para su pregunta es que, sin memoria ECC, obtendrá cálculos incorrectos de todos modos.


5

Cuando trabajaba para un proveedor de hardware, se afirmaba que ninguna CPU construida nunca tenía errores. Y eso es solo errores lógicos. Por lo general, el fabricante encuentra la mayoría de ellos y resuelve el chip, o encuentra la configuración del BIOS que funciona a su alrededor. Pero además del hecho de que cosas como los rayos cósmicos ocasionalmente cambian un poco de memoria (y la memoria generalmente tiene bits de paridad o circuitos SECDED para guardar su tocino), siempre existe una posibilidad limitada de que un bit se lea incorrectamente. Tenga en cuenta que los bits no son ceros y unos lógicos reales, sino cosas ruidosas como voltajes y corrientes, y dado el ruido finito en el sistema, siempre existe la posibilidad de que se lea un bit incorrecto. En los viejos tiempos (como programador de aplicaciones), encontré algunos errores de HW, ambos del tipo de lógica incorrecta, y de la unidad X en la CPU Y ocasionalmente me da un tipo de resultado malo, Es hora de que los chicos de HW reemplacen una variedad de chips. Los circuitos reales se desvían con el tiempo y el uso, y si el suyo se está preparando para fallar, puede comenzar a detectar errores de bits, especialmente si realiza un overclocking o excede el rango operativo recomendado.

Es un problema real para la supercomputación, donde se contemplan cálculos que implican 1e18 o más operaciones de coma flotante.


3

El siguiente contenido puede ser sobre errores de cálculo en GPU.

Con suficiente tiempo, Intel i7-3610QM y una Nvidia GeForce GTX 660 estarán en desacuerdo entre sí con las mismas instrucciones. (Cuda 5.5, compute_20, sm_20)

Entonces, queda uno para concluir que uno de los dos comete un error.

Durante un estudio comparativo de factibilidad de simulación de partículas, noté que después de aproximadamente mil transformaciones de doble precisión (transformaciones que incluyen pecado, cos, multiplicación, división, suma y resta) los errores comenzaron a aparecer.

Te daré un pequeño extracto de números para comparar (el primer número siempre es CPU, la segunda GPU)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(tenga en cuenta que no todas las secuencias de transformación producen un error)

Si bien el error máximo es casi insignificante (0.0000000000000401%), todavía existe y contribuye al error acumulativo.

Ahora este error podría deberse a una diferencia en la implementación de una de las bibliotecas intrínsecas. De hecho, parece que la GPU prefiere redondear hacia abajo o truncar donde se redondea la CPU. Curiosamente, esto solo parece suceder en números negativos.

Pero el punto es que las instrucciones idénticas no necesariamente garantizan resultados idénticos, incluso en máquinas digitales.

Espero que esto haya contribuido.

EDITAR como nota al margen: en el caso de errores aritméticos de GPU, esto (ctrl + f "Primera GPU con soporte de memoria ECC") también podría ser de interés, aunque no necesariamente relevante para los errores anteriores.


Los cálculos de punto flotante pueden resultar de manera diferente en función de dónde se almacenan. Los registros internos de FPU de algunas CPU tienen una longitud diferente a la RAM, por lo que dependiendo de dónde carga los operantes, puede llegar a resultados diferentes. Para obtener más información, recomiendo floating-point-gui.de . Esto, sin embargo, no es un error de cálculo: es por diseño de cómo funcionan las aritméticas de coma flotante.
Philipp

2
Para aquellos que no saben cómo funcionan las matemáticas de FP, solo para aclarar el comentario de Philipp, estas diferencias podrían muy bien ser correctas (ya que en sus diferencias no se deben a errores de software o errores de hardware). Es probable que las diferencias se deban a implementaciones de software o de hardware. Uno debe usar la noción de una máquina fija épsilon para determinar si estos tienen errores: en.wikipedia.org/wiki/Machine_epsilon (esencialmente esta constante describe cuán precisa debe ser una sola operación de FP)
Thomas Eding

1

En términos de lo que usted considera la "CPU" real (unidades de ejecución, canalización ... etc.) casi nunca sucede. Hubo un problema conocido con uno de los sabores Pentium hace un tiempo, pero ese es el único del que he oído hablar. Ahora, si considera los conjuntos de chips que están integrados en los procesadores o al menos el mismo paquete que los controladores USB, TSEC, controlador DMA o controlador de memoria, entonces hay muchas erratas por ahí. Sin embargo, dudo que haya algún tipo de información estadística al respecto.


0

Otro problema de "hardware pésimo" a considerar en este contexto es que el hardware de coma flotante es inherentemente "con pérdidas": tiene una precisión limitada y con números suficientemente grandes (consulte la cita original de Dijkstra) no podrá distinguir entre xy x + 1, o incluso x + 1000000. Puede obtener bibliotecas de coma flotante de precisión "infinita", pero son lentas y, en última instancia, aún están limitadas por la memoria disponible.

En resumen, Dijkstra estaba trabajando en el ámbito de la teoría, y el hardware / software real no se ajusta muy bien a los ideales teóricos. (Recuerde, la "máquina de Turing" original especificaba una cinta de papel infinita).


2
Sin embargo, esto no necesariamente afecta la demostrabilidad, que fue el contexto de la pregunta. Los límites superiores en este tipo de pérdidas pueden ser, y a menudo son, teóricamente explicados con precisión. En otras palabras, los programas aún pueden ser demostrablemente correctos dentro de un cierto margen de error predeterminado. ¡En ciertos campos consideraría que cualquiera que no haya tenido en cuenta estos problemas no está haciendo su trabajo correctamente!
Elias Vasylenko

(1 - .7) * 100 debería ser 30, aunque JavaScript devolverá, lo 30.000000000000004cual es un error. Si se trata de hardware o software, no estoy personalmente seguro.
John
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.