El error de Intel de 475 millones de dólares: el problema de silicio detrás del bug FDIV de Pentium
(righto.com)El bug FDIV de Pentium
-
Antecedentes: En 1993, Intel lanzó el procesador Pentium de alto rendimiento. Pentium incorporaba muchas mejoras, incluido un algoritmo de división de punto flotante más rápido que el de los anteriores procesadores Intel 486. Sin embargo, un año después, el profesor de matemáticas Nicely descubrió que Pentium generaba resultados incorrectos al realizar divisiones de punto flotante mientras investigaba los recíprocos de los primos gemelos.
-
Descubrimiento e impacto del bug: Intel consideró este problema como un "problema técnico muy menor", pero el bug se convirtió en un gran tema mediático. Intel finalmente decidió reemplazar todos los chips Pentium defectuosos, lo que le costó a la empresa 475 millones de dólares.
-
Causa del bug: El algoritmo de división de Pentium usa una tabla de consulta. En 1994, Intel anunció que la causa del bug había sido un error de script que dejó fuera cinco entradas de la tabla, pero en realidad faltaban 16 entradas debido a un error matemático. Cinco de esas entradas faltantes provocaban el bug FDIV.
-
Resumen de los números de punto flotante: Los números de punto flotante permiten representar números muy grandes y números muy pequeños. El coprocesador de punto flotante 8087 de Intel contribuyó al desarrollo del estándar IEEE 754, y la mayoría de las computadoras, incluido Pentium, implementaban ese estándar.
-
División SRT: Pentium realiza la división con el algoritmo SRT, que es dos veces más rápido que la división binaria estándar. El algoritmo SRT usa un enfoque inusual que facilita la selección de los dígitos del cociente.
-
Estructura de la tabla de consulta: La tabla de consulta de Pentium contiene 2048 entradas, y la ausencia de cinco de ellas provocaba el bug FDIV. Esta tabla está implementada como un arreglo lógico programable (PLA).
-
Límite matemático del bug: El paso clave del algoritmo de división consiste en dividir el residuo parcial entre el divisor para obtener un dígito del cociente. Si en este proceso se elige un valor
qincorrecto, el algoritmo no puede recuperarse. -
Sumadores carry-save y carry-lookahead: El circuito de división de Pentium usa un sumador carry-save para realizar sumas y restas de forma eficiente. Este sumador desempeña un papel importante en la aparición del bug FDIV.
-
Corrección del bug: Intel corrigió el bug llenando con 2 todas las entradas no utilizadas de la tabla. Esto eliminó la posibilidad de acceder a entradas erróneas y simplificó las ecuaciones del PLA, haciendo que el PLA fuera más pequeño.
1 comentarios
Opiniones de Hacker News
El autor está dispuesto a responder preguntas sobre el bug del Pentium
En el libro blanco de Intel se afirmaba que un usuario común tendría el problema una vez cada 27,000 años, pero IBM analizó que sus clientes podían encontrar el problema cada pocos días
Solo hubo una persona que descubrió el bug durante el uso real
Comparte la experiencia de haber tenido que agregar código especial a una biblioteca para resolver el problema, porque no podía controlar el CPU del cliente
Señala un problema en el algoritmo de generación de tablas de Intel, y enfatiza que en relaciones públicas lo describieron como un problema menor, pero en realidad era más grave
Se pregunta por qué Intel llenó con 2 todas las entradas no utilizadas de la tabla