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 . [1] Los valores faltantes en una tabla de búsqueda utilizada por el algoritmo de división de punto flotante de la FPU provocaron que los cálculos adquirieran pequeños errores. Si bien estos errores en la mayoría de los casos de uso solo ocurren raramente y dan 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. [2]
Se debate la gravedad del error FDIV. Aunque la mayoría de los usuarios rara vez lo encuentran ( la revista Byte estimó que 1 en 9 mil millones de divisiones de coma flotante con parámetros aleatorios produciría resultados inexactos), [3] tanto la falla como el manejo inicial del asunto por parte de Intel fueron fuertemente criticados 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. [4] En su informe anual de 1994, Intel dijo que incurrió en "un cargo de 475 millones de dólares antes de impuestos... para recuperar el reemplazo y la cancelación de estos microprocesadores". [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 desplazamiento 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 del 486 solo puede generar uno. Se implementa utilizando una matriz lógica programable con 2048 celdas, de las cuales 1066 celdas deberían haberse poblado 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. [6]
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 suele limitarse al noveno o décimo dígito significativo. [3]
Sólo ciertas combinaciones de numerador y denominador desencadenan el error. Un ejemplo comúnmente reportado es dividir 4.195.835 por 3.145.727. Realizar este cálculo en cualquier software que utilizara el coprocesador de punto flotante, como la Calculadora de Windows , permitiría a los usuarios descubrir si su chip Pentium se vio afectado. [7]
El valor correcto del cálculo es:
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 a las celdas de la matriz "vacías". Como resultado, el valor devuelto por un procesador Pentium defectuoso es incorrecto en cuatro dígitos o más: [8]
cual es realmente el valor de4.195.579/3.145.727=4.195.835 - 256/3.145.727.
Thomas Nicely, profesor de matemáticas en Lynchburg College, había escrito un código para enumerar primos , primos gemelos , primos tripletes y primos cuatrillizos . 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, conjuntos de chips de placa base , etc.) hasta el 19 de octubre de 1994. [1] El 24 de octubre de 1994, informó del problema a Intel. [9] Según se informa, Intel se había dado cuenta del problema de forma independiente en junio de 1994 y había comenzado a solucionarlo en ese momento, pero decidió no revelar públicamente ningún detalle ni retirar del mercado las CPU afectadas. [10]
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 defecto en 486-DX4 , Pentium y clones de Pentium . [9] Otros verificaron rápidamente el error y la noticia se difundió rápidamente en Internet . El error adquirió el nombre de "error Pentium FDIV" del mnemotécnico del lenguaje ensamblador x86 para la división de punto flotante, la instrucción afectada más utilizada. [9]
La historia apareció por primera vez en la prensa el 7 de noviembre de 1994, en un artículo en Electronic Engineering Times , "Intel fixes a Pentium FPU glitch" de Alexander Wolfe, [11] y posteriormente fue recogida por CNN en un segmento transmitido el 22 de noviembre. También se informó sobre el asunto en el New York Times y el Boston Globe , ocupando la portada de este último. [10] [12]
En este punto, Intel reconoció la falla del punto flotante, pero afirmó que no era grave y que no afectaría a la mayoría de los usuarios. Intel ofreció reemplazar procesadores a los usuarios que pudieran demostrar 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, provocó una prensa negativa significativa para la empresa. Durante una charla de 2019, mientras reflexionaba sobre el desarrollo de Quake , John Romero describió con qué frecuencia y persistencia este error podría reproducirse al describir el comportamiento que Michael Abrash pasó horas rastreando que daría como resultado que partes de un nivel de juego aparecieran inesperadamente cuando se veían desde ciertos ángulos de cámara. . [13] IBM detuvo la venta de PC que contienen CPU Intel y el precio de las acciones de Intel disminuyó significativamente. [14] Algunos miembros de 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 llevó a los compradores corporativos de equipos de PC a exigir reemplazos de las CPU Pentium existentes, y poco después otros fabricantes de PC comenzaron a ofrecer reemplazos "sin preguntas" de chips Pentium defectuosos. [4]
La creciente insatisfacción con la respuesta de Intel llevó a la compañía a ofrecer reemplazar todos los procesadores Pentium defectuosos a pedido el 20 de diciembre. [15] El 17 de enero de 1995, Intel anunció un cargo antes de impuestos de 475 millones de dólares contra las ganancias, aparentemente el costo total asociado con sustitución de los procesadores defectuosos. [9] Esto equivale a 837 millones de dólares en 2022. [16] Intel fue criticada por prohibir a los revendedores y fabricantes de equipos originales participar en el programa de retirada, exigiendo 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". [14]
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 brinda los antecedentes matemáticos y la historia de la constante de Brun , el problema en el que Nicely estaba trabajando cuando descubrió el error. [17]
La respuesta de Intel al error FDIV ha sido citada como un caso del impacto en las relaciones públicas de un problema que eclipsa el impacto práctico de dicho problema en los clientes. [18] 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 estaban 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 generó una demanda de acción incluso por parte de personas que probablemente no se verían afectadas por el problema. Andy Grove , director ejecutivo 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 presumimos decirle a alguien de qué debería o no preocuparse, o debería o no no debería hacer". [4]
A raíz del error y el posterior retiro del mercado, hubo un marcado aumento en el uso de la verificación formal de las operaciones de punto flotante de hardware en toda la industria de semiconductores. Impulsado por el descubrimiento del error, en 1996 se desarrolló una técnica aplicable al algoritmo SRT llamada "verificación de modelo a nivel de palabra". [19] Intel pasó a utilizar ampliamente la verificación formal en el desarrollo de arquitecturas de CPU posteriores. En el desarrollo del Pentium 4 , se utilizó la evaluación de la trayectoria simbólica y la demostración de teoremas para encontrar una serie de errores que podrían haber dado lugar a un incidente de recuperación similar si no hubieran sido detectados. [20] La primera microarquitectura Intel que utilizó la verificación formal como método principal de validación fue Nehalem , desarrollada en 2008. [21]
El error FDIV afecta al Pentium P5 800 de 60 y 66 MHz en niveles escalonados anteriores a D1, y al Pentium P54C 600 de 75, 90 y 100 MHz en niveles escalonados anteriores a B5. Las CPU P54C y P54CQS de 120 MHz no se ven afectadas. [22] [23]
Los fabricantes produjeron varios parches de software para solucionar el error. Un algoritmo específico, descrito en un artículo en IEEE Computational Science & Engineering , es verificar si hay divisores que puedan activar el acceso a las celdas de la matriz lógica programable que contienen erróneamente cero y, si se encuentran, multiplicar tanto el numerador como el denominador por 15/16. Esto los saca del rango de "buggy". Esta solución conlleva una penalización de velocidad mensurable: en el peor de los casos, para un programa que no hace nada más que operaciones FDIV con divisores incorrectos, 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, 10 ciclos agregados para verificar el divisor: solo 5 de 1024 divisores aleatorios activarían la corrección de escala. Dado que FDIV es una operación poco común en la mayoría de los programas, la desaceleración normal con la solución instalada era típicamente de un porcentaje o menos. [8]
El principal desafío al que se enfrentaron las empresas de software fue implementar la solució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 detectaría un controlador de excepciones (también parcheado). Desde aquí, se podría ejecutar código arbitrario para solucionar el error. [2]
Microsoft ofreció soluciones alternativas a nivel del sistema operativo en versiones de Windows hasta Windows XP. Se incluyeron utilidades con el sistema operativo para verificar la presencia del error y desactivar la FPU si se encuentra. [24] [25]