El procesador que no sabía dividir

12 enero, 2016

Como sociedad estamos muy acostumbrados a los fallos de software. De hecho, el «reinicia el ordenador» como solución mágica a cualquier problema ya forma parte de la cultura popular. Sin embargo, en lo que se refiere al hardware, tenemos expectativas muy diferentes: como todas las cosas «físicas» funciona siempre, y cuando se estropea se substituye por otro nuevo y todo vuelve a funcionar mágicamente. Pero no siempre es así….

Retrocedamos un poco en el tiempo. En 1993 Intel, uno de los principales fabricantes de procesadores del mundo, lanza una nueva gama de procesadores. Sus procesadores anteriores (80286, 80386 y 80406) habían tenido mucho éxito, hasta el punto que compañías rivales como AMD habían buscado nombres similares a sus procesadores compatibles (como Am386 o Am486). Intel ya había lanzado una campaña muy agresiva de márqueting para diferenciarse («Intel Inside«), que busca continuar creando una marca registrada para sus procesadores que no pudiera utilizar la competencia. Se decidió llamar a esta nueva gama de procesadores Pentium, como guiño al «5» en 80586.

En 1994, el profesor de matemáticas Thomas Nicely estaba escribiendo un programa para un proyecto de investigación. El programa estudiaba propiedades de números primos muy grandes, buscando por ejemplos números primos gemelos. Se trataba de un proyecto de cálculo intensivo, que llevaba 13 años ejecutándose en diversos sistemas y al que se añadió un ordenador con un procesador Pentium en marzo de 1994. El 13 de junio detectó algunas inconsistencias en los resultados, que atribuyó a un problema en el código generado por el compilador. En septiembre se volvió a ejecutar el código corregido, sólo para detectar un mes más tarde que un nuevo error estaba apareciendo: una discrepancia en el resultado de algunas operaciones de coma flotante, que era demasiado grande para ser causada por el redondeo.

El ordenador donde se descubrió el fallo del procesador Pentium: Fuente: wc097 @ vintage-computer.com.
El ordenador donde se descubrió el fallo del procesador Pentium: Fuente: wc097 @ vintage-computer.com.

Después analizar el código en detalle, el profesor Nicely pudo acotar el punto concreto donde estaba produciendo el error. Después empezó un proceso de ensayo y error para detectar cuál era el componente defectuoso. Para ello, cambió de compilador, cambió de placa base, usó otro ordenador con procesador Pentium, … Como resultado, el 22 de octubre pudo acotar su error: el problema estaba en la unidad de coma flotante (FPU) del procesador Pentium. Y no se trataba de una unidad defectuosa, ya que otras personas también podían reproducir el bug en sus equipos. Así pues, se trataba de un defecto en el diseño del procesador.

El error, explicado en gran detalle (aquíaquí), producía un resultado incorrecto en la instrucción FDIV, la división entre dos números de coma flotante. Este cálculo utiliza una tabla intermedia de 2048 posiciones donde se almacenan ciertas constantes. Pues bien, 5 de las celdas de esa tabla contenían un 0 cuando deberían tener un «+2». No era un problema fácil de reproducir: probando aleatoriamente sólo se producía en 1 de cada 9 billones de operaciones. Sin embargo, la posibilidad que el procesador calculará un resultado erróneo era un riesgo excesivo aunque fuera improbable.

Este bug fue una crisis tremenda para Intel, que no quizás no supo reaccionar con suficiente rapidez. El tema se convirtió en noticia de portada, IBM anunció que dejaría de vender ordenadores con procesadores Pentium, las quejas y preguntas de los usuarios se multiplicaban… El resultado: 400 millones en pérdidas. Como consecuencia de este error, el control de calidad se convirtió en la máxima preocupación de Intel para sus futuros procesadores. Nota mental: si fabricas millones de X, asegúrate que X funciona a la perfección.

(Visited 177 times, 1 visits today)
Autor / Autora
Robert Clarisó Viladrosa
Comentarios
Antonio12 enero, 2016 a las 5:33 pm

He seguido gran parte de la historia de AMD vs Intel, así que agradezco el post de hoy. Desconocía éstos datos y me parece una cagada por parte de intel como muchas otras. Amd también ha tenido las suyas pero siempre se puede decir que son muy económicos. No quiero ni pensar si ésto pasara en un todopoderoso i7 de 5ª generación.

Responder
Deja un comentario