Articulo de referencia

Error en Pentium FDIV

Intel Pentium de 66 MHz (sSpec=SX837) con el error FDIV El error FDIV de Pentium es un error de hardware que afecta a la unidad de punto flotante (FPU) de los primeros procesado...

Intel Pentium de 66 MHz (sSpec=SX837) con el error FDIV

El error FDIV de Pentium 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 devolvería resultados de punto flotante binario 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 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 raramente 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. [2]

La gravedad del error FDIV es objeto de debate. Aunque la mayoría de los usuarios rara vez se topan con él ( la revista Byte estimó que 1 de cada 9 mil millones de divisiones de punto flotante con parámetros aleatorios produciría resultados inexactos), [3] tanto el error como la gestión inicial del asunto por parte de Intel fueron duramente criticados por la comunidad tecnológica.

En diciembre de 1994, Intel retiró del mercado los procesadores defectuosos, en lo que fue el primer retiro completo de un chip de computadora. [4] En su informe anual de 1994, Intel afirmó que había incurrido en "un cargo antes de impuestos de 475 millones de dólares... para recuperar el reemplazo y la amortización de estos microprocesadores". [5]

Descripción

Para mejorar la velocidad de los cálculos de división de punto flotante en el chip Pentium con respecto al 486DX , Intel optó por reemplazar el algoritmo de división por desplazamiento y resta con el algoritmo 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 podía generar uno. Se implementa utilizando una matriz lógica programable con 2048 celdas [ cita requerida ] , 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 Pentium, cinco valores no se enviaron correctamente al equipo que graba las matrices en los chips [ cita requerida ] , por lo que 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 poco frecuente. El error suele limitarse al noveno o décimo dígito significativo. [3]

Sólo ciertas combinaciones de numerador y denominador activan el error. Un ejemplo que se suele mencionar es dividir 4.195.835 por 3.145.727. Al realizar este cálculo en cualquier software que utilice el coprocesador de punto flotante, como la Calculadora de Windows , los usuarios podrían descubrir si su chip Pentium se vio afectado. [7]

El valor correcto del cálculo es:

4.195.835 3.145.727 = 1.333820449136241002 {\displaystyle \textstyle {\dfrac {4{,}195{,}835}{3{,}145{,}727}}=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 a las celdas de la matriz "vacías". Como resultado, el valor devuelto por un procesador Pentium defectuoso es incorrecto en o más de cuatro dígitos: [8]

4.195.835 3.145.727 = 1.333 739068902037589 {\displaystyle \textstyle {\dfrac {4{,}195{,}835}{3{,}145{,}727}}=1.333{\color {rojo}{739068902037589}}}

que en realidad es el valor de . 4.195.579 3.145.727 = 4.195.835 256 3.145.727 {\displaystyle \textstyle {\dfrac {4{,}195{,}579}{3{,}145{,}727}}={\dfrac {4{,}195{,}835-256}{3 {,}145{,}727}}}

Descubrimiento y respuesta

Thomas Nicely, un profesor de matemáticas en el Lynchburg College, había escrito un código para enumerar primos , primos gemelos , tripletes 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 la placa base , etc.) hasta el 19 de octubre de 1994. [1] El 24 de octubre de 1994, informó el 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 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 pruebas para el fallo en los 486-DX4 , Pentium y clones de Pentium . [9] El error fue verificado rápidamente por otros, y la noticia se difundió rápidamente en Internet . El error adquirió el nombre de "error Pentium FDIV" del mnemónico del lenguaje ensamblador x86 para la división de punto flotante, la instrucción afectada más frecuentemente 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 arregla un fallo en la FPU de Pentium" de Alexander Wolfe, [11] y posteriormente fue retomada por CNN en un segmento emitido el 22 de noviembre. También fue reportada por el New York Times y el Boston Globe , apareciendo en la portada de este último. [10] [12]

En este punto, Intel reconoció la falla de punto flotante, pero afirmó que no era grave y no afectaría a la mayoría de los usuarios. Intel ofreció reemplazar los 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, causó 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 podía ser reproducido por Michael Abrash . Abrash pasó horas rastreando las condiciones exactas necesarias para producir el error, lo 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 contenían CPU Intel y el precio de las acciones de Intel disminuyó significativamente. [14] El motivo detrás de la decisión de IBM fue cuestionado por algunos en la industria; IBM produjo las CPU PowerPC en ese momento y potencialmente se beneficiaría de cualquier daño a la reputación de Pentium o Intel como empresa. Sin embargo, la decisión llevó a 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 reemplazos "sin hacer preguntas" de chips Pentium defectuosos. [4]

El creciente descontento 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 contra las ganancias, aparentemente el costo total asociado con el reemplazo de los procesadores defectuosos. [9] Esto equivale a $868 millones en 2023. [16] Intel fue criticada por prohibir a los revendedores y fabricantes de equipos originales participar en el programa de retiro, lo que obligaba a los usuarios finales a reemplazar 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 el defecto 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 fallo FDIV ha sido citada como un caso de cómo el impacto de un problema en las relaciones públicas eclipsa el impacto práctico de dicho problema en los clientes. [18] Aunque era poco probable que la mayoría de los usuarios se encontraran con el fallo en su trabajo diario, la reacción inicial de la empresa 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 que se generó sacudió la confianza de los consumidores en las CPU y condujo a una demanda de acción incluso de personas que probablemente no se verían afectadas por el problema. Andy Grove , el CEO 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 decirle a alguien de qué debería o no debería preocuparse, o debería o no debería hacer". [4]

A raíz del error y la posterior retirada del producto, se produjo un marcado aumento del uso de la verificación formal de las operaciones de punto flotante de hardware en toda la industria de los semiconductores. Impulsada por el descubrimiento del error, en 1996 se desarrolló una técnica aplicable al algoritmo SRT denominada "verificación de modelos a nivel de palabra". [19] Intel siguió utilizando la verificación formal de forma extensiva en el desarrollo de arquitecturas de CPU posteriores. En el desarrollo del Pentium 4 , se utilizaron la evaluación de trayectorias simbólicas y la demostración de teoremas para encontrar una serie de errores que podrían haber provocado un incidente de retirada similar si no se hubieran detectado. [20] La primera microarquitectura de Intel que utilizó la verificación formal como método principal de validación fue Nehalem , desarrollada en 2008. [21]

Modelos afectados

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

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 & Engineering , es verificar los divisores que pueden activar el acceso a las celdas de la matriz lógica programable que contienen cero por error y, si se encuentran, multiplicar tanto el numerador como el denominador por 15/16. Esto los saca del rango de "errores". 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 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 era 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 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 luego desencadenaría una excepción que un controlador de excepciones (también parcheado) detectaría. A partir de aquí, se podría ejecutar código arbitrario para solucionar el error. [2]

Microsoft ofreció soluciones alternativas 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 desactivar la FPU si se encontraba. [24] [25]

Véase también

Referencias

  1. ^ ab Edelman, Alan (1 de enero de 1997). "Las matemáticas del error de división del Pentium" (PDF) . SIAM Review . 39 (1): 54– 67. Bibcode :1997SIAMR..39...54E. doi :10.1137/S0036144595293959. Archivado (PDF) desde el original el 14 de agosto de 2024 . Consultado el 11 de abril de 2021 .
  2. ^ ab "'Una discusión y solución para el error FDIV de Pentium' del Notebook Archive (2002)". notebookarchive.org . Wolfram Research, Inc . Consultado el 11 de abril de 2021 .
  3. ^ ab Tom R. Halfhill (marzo de 1995). "Un error en una tabla de búsqueda creó el infame fallo en el último procesador de Intel". BYTE . N.º de marzo de 1995. Archivado desde el original el 9 de febrero de 2006 . Consultado el 19 de diciembre de 2006 .
  4. ^ abc Carlton, Jim; Yoder, Stephen K. (21 de diciembre de 1994). "Computadoras: Humble Pie: Intel reemplazará sus chips Pentium". The Wall Street Journal (edición oriental). pág. B1.
  5. ^ "1994 - Informe anual". Intel. 20 de junio de 2020. Archivado desde el original el 26 de febrero de 2017. Consultado el 20 de junio de 2020 .
  6. ^ Sharangpani, HP; Barton, ML (30 de noviembre de 1994). Análisis estadístico de la falla de punto flotante en el procesador Pentium (1994) (PDF) (Informe). Intel Corporation. Archivado desde el original (PDF) el 19 de marzo de 2022. Consultado el 11 de abril de 2021 .
  7. ^ "Error en el Pentium FDIV: una imagen". Instituto de Política e Investigación Social de la Universidad de Kansas. 30 de noviembre de 1994. Archivado desde el original el 3 de noviembre de 2021. Consultado el 3 de noviembre de 2010 .
  8. ^ ab Coe, T.; Mathisen, T.; Moler, C.; Pratt, V. (1995). "Aspectos computacionales del asunto Pentium" (PDF) . IEEE Computational Science and Engineering . 2 (1): 18– 30. doi :10.1109/99.372929. Archivado (PDF) del original el 23 de junio de 2021 . Consultado el 13 de abril de 2021 .
  9. ^ abcd Nicely, Thomas (19 de agosto de 2011). "Preguntas frecuentes sobre la falla FDIV en Pentium". trnicely.net . Archivado desde el original el 18 de junio de 2019 . Consultado el 18 de junio de 2019 .
  10. ^ ab Markoff, John (24 de noviembre de 1994). "NOTICIAS DE LA EMPRESA; Un fallo socava la precisión de los chips Pentium". The New York Times . Archivado desde el original el 14 de agosto de 2024. Consultado el 11 de abril de 2021 .
  11. Alexander Wolfe (9 de noviembre de 1994). «Intel corrige un fallo en la FPU de Pentium». Electronic Engineering Times . Archivado desde el original el 18 de diciembre de 2010. Consultado el 19 de enero de 2011 .
  12. ^ Moler, Cleve (invierno de 1995). "A Tale of Two Numbers" (PDF) . Noticias y notas de MATLAB . MathWorks. Archivado (PDF) del original el 14 de agosto de 2024. Consultado el 21 de abril de 2021 .
  13. ^ "BTD12: Los principios de programación de Id Software". TNG Technology Consulting GmbH. 6 de agosto de 2019. Archivado desde el original el 25 de agosto de 2023. Consultado el 17 de julio de 2023 .
  14. ^ ab Yeraswork, Zewde (30 de marzo de 2011). "Lecciones aprendidas: los defectos de Pentium ayudan a Intel a retirar el chipset Sandy Bridge". CRN . Archivado desde el original el 14 de agosto de 2024 . Consultado el 11 de abril de 2021 .
  15. ^ "Intel adopta una política de reemplazo a pedido de procesadores Pentium con falla de punto flotante; asumirá el cargo del cuarto trimestre contra las ganancias". Business Wire. 20 de diciembre de 1994. Archivado desde el original el 10 de julio de 2012. Consultado el 24 de diciembre de 2006 .
  16. ^ Johnston, Louis; Williamson, Samuel H. (2023). "¿Cuál era el PIB de Estados Unidos en ese momento?". MeasuringWorth . Consultado el 30 de noviembre de 2023 .Las cifras del deflactor del producto interno bruto de Estados Unidos siguen la serie de MeasuringWorth .
  17. ^ Cipra, Barry Arthur (13 de enero de 1995). "Cómo la teoría de números consiguió lo mejor del chip Pentium". Science . 267 (5195): 175. Bibcode :1995Sci...267..175C. doi :10.1126/science.267.5195.175. PMID  17791336. S2CID  19898103.
  18. ^ Price, D. (abril de 1995). "Lecciones aprendidas sobre los defectos del Pentium FDIV". IEEE Micro . 15 (2): 86– 88. doi :10.1109/40.372360.
  19. ^ Clarke, EM; Khaira, M.; Zhao, X. (1996). "Verificación de modelos a nivel de palabra: cómo evitar el error FDIV de Pentium". Actas de la 33.ª conferencia anual sobre automatización del diseño - DAC '96 . págs.  645– 648. doi :10.1145/240518.240640. ISBN 0897917790. S2CID  2500033. Archivado desde el original el 29 de abril de 2021 . Consultado el 29 de abril de 2021 .
  20. ^ O'Leary, J. (2004). "Verificación formal en el diseño de CPU Intel". Actas. Segunda Conferencia Internacional de ACM e IEEE sobre Métodos y Modelos Formales para Co-Diseño, 2004. MEMOCODE '04 . p. 152. doi :10.1109/MEMCOD.2004.1459841. ISBN 0-7803-8509-8Archivado del original el 29 de abril de 2021 . Consultado el 29 de abril de 2021 .
  21. ^ Kaivola, Roope; Gughal, Rajnish; Narasimhan, Naren; Telfer, Ámbar; Whittemore, Jesse; Pandav, Sudhindra; Slobodová, Anna; Taylor, Cristóbal; Frolov, Vladimir; Reeber, Erik; Naik, Armaghan (2009). "Reemplazo de pruebas con verificación formal en la validación del motor de ejecución del procesador Intel® Core ™ i7". Verificación asistida por computadora . 5643 : 414– 429. doi : 10.1007/978-3-642-02658-4_32 .
  22. ^ "Procesadores de quinta generación P5 (586) | Tipos y especificaciones de microprocesadores | InformIT". www.informit.com . 8 de junio de 2001. Archivado desde el original el 13 de abril de 2021 . Consultado el 13 de abril de 2021 .
  23. ^ "Programa de reemplazo de FDIV: preguntas frecuentes". Intel . 20 de marzo de 2009. Identificación de solución CS-012748. Archivado desde el original el 11 de mayo de 2009 . Consultado el 10 de noviembre de 2009 .
  24. ^ Slob, Arie. "Solución de problemas de Windows 95: Cómo comprobar si hay un coprocesador matemático defectuoso". www.helpwithwindows.com . Archivado desde el original el 14 de agosto de 2024. Consultado el 23 de abril de 2019 .
  25. ^ "Pentnt". Microsoft TechNet . Microsoft . 11 de septiembre de 2009. Archivado desde el original el 3 de febrero de 2018 . Consultado el 23 de abril de 2019 .
  • Sitio web personal del Dr. Nicely, quien descubrió el error
  • Una página con información precisa, también sobre la causa.
  • Archivo de la página de información oficial de Intel sobre el error
  • Caja de CPU Intel sin abrir del programa de reemplazo FDIV
Obtenido de "https://es.wikipedia.org/w/index.php?title=Error_FDIV_del_Pentium&oldid=1257414654"