Error de Pentium FDIV

Ajustar Compartir Imprimir Citar
Error en la unidad de punta flotante Intel P5 Pentium
66 MHz Intel Pentium (sSpec=SX837) con el fallo IEDV

El error Pentium FDIV es un error de hardware que afecta a la unidad de punto flotante (FPU) de los primeros procesadores Intel Pentium. Debido al error, el procesador devolvía resultados binarios de punto flotante incorrectos al dividir ciertos pares de números de alta precisión. El error fue descubierto en 1994 por Thomas R. Nicely, profesor de matemáticas en Lynchburg College. Los valores faltantes en una tabla de búsqueda utilizada por el algoritmo de división de punto flotante de la FPU llevaron a que los cálculos adquirieran pequeños errores. Si bien estos errores en la mayoría de los casos de uso solo ocurrirían en raras ocasiones y darían como resultado pequeñas desviaciones de los valores de salida correctos, en ciertas circunstancias los errores pueden ocurrir con frecuencia y dar lugar a desviaciones más significativas.

Se debate la gravedad del error FDIV. Aunque la mayoría de los usuarios rara vez lo encuentran (la revista Byte estimó que 1 de cada 9 mil millones de puntos flotantes se divide con parámetros aleatorios produciría resultados inexactos), tanto la falla como el manejo inicial del asunto por parte de Intel fueron en gran medida criticado por la comunidad tecnológica.

En diciembre de 1994, Intel retiró los procesadores defectuosos en lo que fue el primer retiro completo de un chip de computadora. En su informe anual de 1994, Intel dijo que incurrió en 'un cargo antes de impuestos de 475 millones de dólares... para recuperar el reemplazo y la cancelación de estos microprocesadores'.

Descripción

Gráfico mostrando una manifestación del fallo de IEDV. Cada punto de datos debe ser ~3.1789 x 10−8 más alto en el eje y que su predecesor a la izquierda, pero en la región 4195834.4 el resultado difiere del valor esperado por ~8.14 x 10; 5 -.

Para mejorar la velocidad de los cálculos de división de punto flotante en el chip Pentium sobre el 486DX, Intel optó por reemplazar el algoritmo de división de cambio y resta con el algoritmo de Sweeney, Robertson y Tocher (SRT). El algoritmo SRT puede generar dos bits del resultado de la división por ciclo de reloj, mientras que el algoritmo 486 solo puede generar uno. Se implementa utilizando una matriz lógica programable con 2048 celdas, de las cuales 1066 celdas deberían haberse llenado con uno de cinco valores: −2, −1, 0, +1, +2. Cuando se compiló la matriz original para el Pentium, cinco valores no se descargaron correctamente en el equipo que graba las matrices en los chips; por lo tanto, cinco de las celdas de la matriz contenían cero cuando deberían haber contenido +2.

Como resultado, los cálculos que se basan en estas cinco celdas adquieren errores; estos errores pueden acumularse repetidamente debido a la naturaleza recursiva del algoritmo SRT. En casos patológicos el error puede alcanzar el cuarto dígito significativo del resultado, aunque esto es raro. El error generalmente se limita al noveno o décimo dígito significativo.

Solo ciertas combinaciones de numerador y denominador activan el error. Un ejemplo comúnmente reportado es dividir 4,195,835 por 3,145,727. Realizar este cálculo en cualquier software que utilice el coprocesador de punto flotante, como Windows Calculator, permitiría a los usuarios descubrir si su chip Pentium se vio afectado.

El valor correcto del cálculo es:

4.195.8353,145,727=1.333820449136241002{displaystyle textstyle {dfrac {4{,}195{,}835}{3{,}145{,}}=1.333820449136241002}

Cuando se convierte al valor hexadecimal utilizado por el procesador, 4 195 835 = 0x4005FB y 3 145,727 = 0x2FFFFF. El '5' en 0x4005FB activa el acceso al 'vacío' celdas de matriz. Como resultado, el valor devuelto por un procesador Pentium defectuoso es incorrecto en o más de cuatro dígitos:

4.195.8353,145,727=1.333739068902037589{displaystyle textstyle {dfrac {4{,}195{,}835}{3{,}145{,}=1.333{color {red}{739068902037589}}

Descubrimiento y respuesta

Thomas Nicely, profesor de matemáticas en Lynchburg College, había escrito un código para enumerar primos, primos gemelos, trillizos primos y cuatrillizos primos. Nicely notó algunas inconsistencias en los cálculos el 13 de junio de 1994, poco después de agregar un sistema Pentium a su grupo de computadoras, pero no pudo eliminar otros factores (como errores de programación, chipsets de placa base, etc.) hasta el 19 de octubre de 1994. El 24 de octubre de 1994, informó del problema a Intel. Según los informes, Intel se había dado cuenta del problema de forma independiente en junio de 1994 y había comenzado a solucionarlo en este punto, pero optó por no revelar públicamente ningún detalle ni retirar las CPU afectadas.

El 30 de octubre de 1994, Nicely envió un correo electrónico describiendo el error a varios contactos académicos, solicitando informes de las pruebas del error en 486-DX4, Pentium y clones de Pentium. El error fue rápidamente verificado por otros, y la noticia se difundió rápidamente en Internet. El error adquirió el nombre "error de Pentium FDIV" de la mnemónica del lenguaje ensamblador x86 para la división de coma flotante, la instrucción afectada más utilizada.

La historia apareció por primera vez en la prensa el 7 de noviembre de 1994, en un artículo en Electronic Engineering Times, "Intel corrige un error en la FPU de Pentium" por Alexander Wolfe, y posteriormente fue recogido por CNN en un segmento emitido el 22 de noviembre. También fue informado por el New York Times y el Boston Globe, haciendo que el portada en este último.

En este punto, Intel reconoció la falla de punto flotante, pero afirmó que no era grave y que no afectaría a la mayoría de los usuarios. Intel ofreció reemplazar los procesadores a los usuarios que pudieran probar que estaban afectados. Sin embargo, aunque la mayoría de las estimaciones independientes encontraron que el error tendría un impacto muy limitado en la mayoría de los usuarios, causó una presión negativa significativa para la empresa. IBM detuvo la venta de PC que contenían CPU Intel y el precio de las acciones de Intel disminuyó significativamente. Algunos en la industria cuestionaron el motivo detrás de la decisión de IBM; IBM produjo las CPU PowerPC en ese momento y potencialmente se beneficiaría de cualquier daño a la reputación del Pentium o Intel como empresa. Sin embargo, la decisión hizo que los compradores corporativos de equipos de PC exigieran reemplazos de las CPU Pentium existentes y, poco después, otros fabricantes de PC comenzaron a ofrecer 'sin preguntas'. reemplazos de chips Pentium defectuosos.

La creciente insatisfacción con la respuesta de Intel llevó a la empresa a ofrecer reemplazar todos los procesadores Pentium defectuosos a pedido el 20 de diciembre. El 17 de enero de 1995, Intel anunció "un cargo antes de impuestos de $ 475 millones contra las ganancias, aparentemente el costo total asociado con el reemplazo de los procesadores defectuosos." Esto equivale a $ 783 millones en 2021. Intel fue criticado por prohibir a los revendedores y OEM participar en el programa de retiro, lo que requiere que los usuarios finales reemplacen los chips ellos mismos. La justificación de Intel para esto, publicada en su página web de soporte, fue que 'es decisión individual del usuario final determinar si la falla está afectando la precisión de su aplicación'.

Un artículo de 1995 en Science describe el valor de los problemas de teoría de números para descubrir errores informáticos y proporciona los antecedentes matemáticos y la historia de la constante de Brun, el problema en el que estaba trabajando Nicely cuando descubrió el bicho.

La respuesta de Intel al error FDIV se ha citado como un caso del impacto de un problema en las relaciones públicas que eclipsa el impacto práctico de dicho problema en los clientes. Si bien era poco probable que la mayoría de los usuarios encontraran la falla en su computación diaria, la reacción inicial de la compañía de no reemplazar los chips a menos que los clientes pudieran garantizar que se vieron afectados provocó el rechazo de una minoría vocal de expertos de la industria. La publicidad posterior generada sacudió la confianza de los consumidores en las CPU y provocó una demanda de acción incluso de personas que probablemente no se verían afectadas por el problema. Andrew Grove, el director general de Intel en ese momento, fue citado en The Wall Street Journal diciendo: "Creo que el núcleo del problema que pasamos por alto... fue que nos atrevimos a decir alguien de lo que debería o no debería preocuparse, o debería o no debería hacer.

Después del error y el posterior retiro, hubo un marcado aumento en el uso de la verificación formal de las operaciones de punto flotante de hardware en la industria de los semiconductores. Impulsado por el descubrimiento del error, una técnica aplicable al algoritmo SRT llamada "verificación del modelo a nivel de palabra" fue desarrollado en 1996. Intel pasó a utilizar ampliamente la verificación formal en el desarrollo de arquitecturas de CPU posteriores. En el desarrollo del Pentium 4, se utilizaron la evaluación de la trayectoria simbólica y la demostración de teoremas para encontrar una serie de errores que podrían haber llevado a un incidente de recuperación similar si no se hubieran detectado. La primera microarquitectura de Intel que utilizó la verificación formal como método principal de validación fue Nehalem, desarrollada en 2008.

Modelos afectados

El error de FDIV afecta al Pentium P5 800 de 60 y 66 MHz en niveles anteriores a D1, y al Pentium P54C 600 de 75, 90 y 100 MHz en niveles anteriores a B5. Las CPU P54C y P54CQS de 120 MHz no se ven afectadas.

Parches de software

Los fabricantes produjeron varios parches de software para solucionar el error. Un algoritmo específico, descrito en un artículo en IEEE Computational Science & Ingeniería, consiste en comprobar si hay divisores que puedan activar el acceso a las celdas de la matriz lógica programable que erróneamente contienen cero y, si se encuentran, multiplicar tanto el numerador como el denominador por 15/16. Esto los saca del 'buggy' alcance. Esta solución conlleva una penalización de velocidad medible: en el peor de los casos para un programa que no hace nada más que operaciones FDIV con malos divisores, el tiempo de ejecución se duplicaría, ya que cada FDIV tomaría alrededor de 80 en lugar de 40 ciclos de reloj. Con más divisores aleatorios, el tiempo promedio por FDIV fue de aproximadamente 50 ciclos de reloj, es decir, se agregaron 10 ciclos para verificar el divisor: solo 5 de 1024 divisores aleatorios activarían la corrección de escala. Dado que FDIV es una operación rara en la mayoría de los programas, la ralentización normal con la corrección instalada era típicamente de un porcentaje o menos.

El principal desafío al que se enfrentaron las empresas de software fue implementar la corrección en software preexistente, gran parte del cual dependía de bibliotecas fuera de su control. Algunas empresas, como Wolfram Research, optaron por parchear directamente el código de máquina de los ejecutables existentes para reemplazar el código de operación FDIV con una instrucción ilegal. Esto desencadenaría una excepción que un controlador de excepciones (también parcheado) detectaría. Desde aquí, se podría ejecutar código arbitrario para evitar el error.

Microsoft ofreció soluciones a nivel de sistema operativo en versiones de Windows hasta Windows XP. Se incluyeron utilidades con el sistema operativo para verificar la presencia del error y deshabilitar la FPU si se encuentra.