PENTIUM: ERRATA INSIDE

por Jose Emilio Mori Recio
Mucho se ha escrito sobre el error del microprocesador de mayor proyección en los tiempos actuales. Ahora te ofrecemos una perspectiva diferente, que no pretende influir decisivamente en la compra de tu próximo PC, sino proporcionarte elementos suficientes como para que puedas formarte tu propio criterio sobre el particular.
Me quiero comprar un nuevo PC... Pero, no sé si hacerme con un Pentium por eso del fallo que dicen que tiene... tú que me aconsejas?.

Éste y otros comentarios similares se escuchan en nuestros días con frecuencia. Casi nadie de los que se precian de estar en el mundillo de la informática (unos con mejores argumentos para asegurarlo que otros, quién lo duda) ignora lo que ha ocurrido con el procesador de quinta generación de Intel, el famoso Pentium, que ya fuera comentado, poco después de aparecer, en nuestro número 7 por nuestro principal y de sobra conocido experto en la materia, Ciriaco García de Celis, y que ha sido puesto en entredicho tras aparecer un error que le hace dividir mal . Pero, es realmente tan importante el error, tanto como para que Intel nunca recupere el prestigio perdido? O hay intereses de terceros que fomentan la difusión y exageración del fallo? En el presente artículo intentaremos responder a estas preguntas de la forma más objetiva posible, exponiendo brevemente los hechos relacionados con el descubrimiento, naturaleza y difusión del error.

Aquí hay algo que falla

El 30 de octubre de 1.994, el doctor Thomas R. Nicely, profesor de Matemáticas del Lynchburg College del Estado de Virginia (U.S.A.), enviaba un mensaje mediante correo electrónico a Andrew Schulman, coautor del libro Undocumented DOS y autor de Undocumented Windows (bien conocidos por los programadores de sistemas, por tratar de interrupciones y opciones diversas no documentadas de estos sistemas) como uno más de los comentarios o informaciones sobre este tipo de asuntos que Andrew solicitaba que le enviaran por este procedimiento.

En el mensaje, el doctor Nicely le comunicaba que mientras investigaba con el programa Matlab sobre números primos elevados con un Pentium, observó que éste le dio un resultado erróneo a una determinada operación de división con punto flotante, lo que inducía a pensar en un error en la FPU (Floating Point Unit, Unidad de punto flotante o coprocesador) del Pentium, por resultar correcta idéntica operación en los 486. Andrew envió copia del mensaje a Richard Smith, de la casa de software Phar Lap, para que pudiese comprobar el fallo en algún equipo Pentium, de los que él no disponía. Hecho esto, y a la vista de la importancia que podría tener el asunto, lo notificó públicamente la noche del 1 de noviembre en el fórum de discusión Canopus de Compuserve. Las pruebas se multiplicaron, y sencillamente desde la calculadora de Windows, resultaba fácil constatar que las matemáticas no eran exactas, al menos para el Pentium. Poco después Alex Wolfe, de la revista Electronic Engeneering Times, se interesaba por la nota que aparecía en Canopus y, comprendiendo su importancia, publicó el primer artículo escrito sobre el error, en la primera plana de la edición del 7 de noviembre de la revista. Antes, notificó lo que estaba investigando a Terje Mathisen, de Noruega, quien estaba escribiendo en USENET sobre las instrucciones del Pentium, y éste hizo público el error el 3 de noviembre en el grupo comp.sys.intel de USENET. Una vez aquí, Tim Coe, de Vitesse Semiconductor, logró describir correctamente cómo se producía el error y efectuó predicciones correctas sobre qué pares de números lo ocasionarían. El error siguió siendo discutido en este foro, y desde ahí se conoció en toda Internet, la mayor red de ordenadores que llega a grandes partes del mundo, y precursora de la no muy lejana Autopista de la Información, lo cual supone hablar de una audiencia de veinticinco millones de personas en la actualidad (en constante crecimiento). He aquí cómo la información se ha transmitido, siempre en forma de bytes y a través de los cables, hasta llegar a nuestros oídos. A quien se pierda con tantas redes y nombres extraños, le prometemos que pronto tendremos un artículo explicando estos temas en Login:. Cómo Pentium redefine las matemáticas

Pero qué es exactamente lo que falla? En términos prácticos, el error consiste en que se redondean mal los dígitos decimales desde el cuarto al decimonoveno en determinadas divisiones en coma flotante: la precisión de la respuesta es mucho menor de la esperada. Esto se produce independientemente de la precisión, simple, doble o extendida, de los números; tampoco depende de la velocidad del chip, ni de las instrucciones previas, ni del modo de redondeo. El fallo reside en la unidad de división de la FPU, y por tanto cualquier instrucción que la utilice puede mostrar el error; no sólo la conocida FDIV, sino otras indicadas por Intel, como FPTAN, FPATAN (tangente y arcotangente en punto flotante), FYL2X, FYL2XP1 (logaritmos) y la instrucción de resto; en cambio, no fallan el seno ni el coseno, entre otros.

La causa final del error es, obviamente, humana: el olvido de unas cuantas entradas en una tabla de consulta empleada por la unidad de división. La división en punto flotante en la mayoría de los microprocesadores, como el Pentium, se realiza usando un algoritmo similar al de la caja que todos aprendimos en el colegio, y que, como aquél, produce un bit en cada ciclo de la operación. Adicionalmente, el Pentium posee un sistema de optimización que le permite deducir dos bits en cada ciclo, usando en un determinado punto de la división los restos del dividendo y del divisor como índices a una tabla de consulta de donde obtiene los siguientes dos bits. Si desafortunadamente esos restos llevan a una de las entradas que faltan en la tabla, se obtienen los dos bits incorrectos, y el resto ya se sabe... dos bits que han dado la vuelta al mundo informático. Concretamente, IBM ha indicado que las secuencias de bits peligrosas son éstas: 10001, 10100, 10111, 11010 y 11101, seguidas por una cadena de al menos 20 unos.

De lo anterior se deduce que el error sucede siempre al dividir pares de números concretos. Si dos números fallan, lo harán siempre que se repita la prueba; si no es así, nunca darán problemas. En total, considerando sólo los casos de números de simple precisión con una exactitud en el resultado inferior a la simple precisión, sólo parecen existir 1.738 pares que producen el error, y sólo 87 con una precisión de cuatro dígitos decimales. Dada la naturaleza del error, hay que añadir a estos números todos los obtenidos al multiplicar o dividir a uno o ambos números del par por una potencia de dos, y/o cambiarle el signo, ya que el error lo determinan las secuencias de bits en las mantisas, con lo que los números de igual mantisa han de ser considerados un único caso. Para la doble precisión, los casos se multiplican, y más aún si aumentamos la precisión requerida al resultado, pero al mismo tiempo la posibilidad de encontrar un error con esos números disminuye rápidamente.


Mantisas, exponentes y precisiones


El Pentium, como el resto de los microprocesadores, emplea el standard IEEE 754 para representar números en punto flotante. Este tipo de almacenamiento transforma los números reales al formato signo*1.XXX*2^YYY, es decir, uno más una fracción, multiplicado por una potencia de dos, junto con el signo. El XXX se denomina mantisa; YYY es el exponente.

El standard IEEE define el número de simple precisión como aquél que tiene una mantisa de 23 bits. Esto proporciona una precisión de 24 bits (contando el primer bit) lo que equivale a aproximadamente 7 digitos decimales. Un número de doble precisión tiene una mantisa de 52 bits, unos 15 digitos decimales. La mantisa en la precisión extendida tiene 63 bits, es decir, se puede obtener una precisión de aproximadamente 18 decimales.

Para los programadores en C, una variable float es de simple precisión, mientras que un double tiene doble precisión y un long double suele tener precisión extendida (aunque no todos los compiladores soportan esta última opción).


A cuestas con el error

Nos veremos afectados por el error? Desde luego, no usando un procesador de textos, un juego o un editor. Sólo las hojas de cálculo y algún programa matemático o técnico específico -siempre dependiendo del método que empleen para llevar a cabo sus operaciones, que podría variar en cada caso- son susceptibles de fallo, y con unas probabilidades muy bajas. Ni siquiera un programa de gráficos, o una impresión a 600 puntos por pulgada, por poner dos ejemplos, requerirán una precisión superior a los tres primeros dígitos decimales, que nunca pueden llegar a ser afectados por el error.

Para comprobar si un Pentium tiene el error, basta efectuar con cualquier software de calculadora u hoja de cálculo, la división de alguno de los pares de números afectados (véase ejemplo adjunto). Comparando los resultados con los reales, veremos diferencias a partir del cuarto dígito decimal. Sin embargo, es posible obtener un resultado más escandaloso al efectuar la operación x - (x/y) * y con los números afectados. Esta operación, como es fácil ver, resulta cero para cualquier x e y tomados; sin embargo, una operación efectuada en un Pentium con los x e y adecuados, devolverá un número distinto de 0. Si el resultado es erróneo, está claro que tenemos el ; si no lo es, deberemos asegurarnos de que el programa empleado utiliza las instrucciones FDIV y similares para obtener el resultado, lo cual no es siempre seguro, aunque se sabe que lo es para la Calculadora de Windows y la hoja de cálculo Excel; por tanto el resultado de la prueba efectuada en estos programas es infalible con respecto al . Por otra parte, aunque se han desarrollado ya numerosas soluciones por software para corregirlo, no existen parches para actualizar los binarios de los programas que pudieran efectuar las operaciones prohibidas ; sólo cabe esperar que las respectivas casas de software introduzcan en el mercado una nueva versión con la leve corrección pertinente, y de momento utilizar dichos programas residentes para la corrección.

Si además de este método casero queremos información adicional a la simple verificación del error, podemos emplear el programa P87TEST.ZIP del antes mencionado Terje Mathisen, disponible en el G.U.I. Es muy de esperar que el resultado sea positivo, ya que sólo un ínfimo porcentaje de entre los primeros Pentium aparecidos carecían del error.

/*Este programa dará cero en cualquier procesador que no sea Pentium, que dará 256.*/
main() double x,y,z;
x =4195835,0; y = 3145727.0;
z =x-(x/y)*y;
printf("Resultado: %f\n", z);
}

Intel queda Outside

Intel, tras efectuar siete bil lones de divisiones aleatorias, indicó que el error se producía en una de cada nueve mil millones, partiendo del número de casos erróneos encontrados. El tipo de cálculos que realicemos afectará, sin duda, a la probabilidad de toparnos con un error, pero, con este dato, podríamos efectuar el siguiente razonamiento: Si ejecutamos una instrucción FDIV constantemente en un Pentium-90, al durar cada instrucción 39 ciclos (según documenta Intel) y disponer de un reloj de 90 MHz, esto es, 90 millones de ciclos, se efectuarían 2.307.692 divisiones cada segundo, y más de ocho mil millones cada hora. De esta forma, al cabo de poco más de una hora se obtendría un error. Naturalmente, estas circunstancias son imposibles. La estimación realista de Intel es la siguiente: realizando, con una hoja de cálculo, 1.000 divisiones de promedio al día, sólo obtendremos un error a los 27.000 años.

Pero sin tener en cuenta la frecuencia del error, lo importante aquí es la respuesta que Intel pueda dar a sus usuarios suspicaces. En esto Intel no puede ser alabada. Sus propios técnicos descubrieron el error ya en Junio, pero lo minimizaron, pensando que defectos los hay en todo procesador, aunque de mayor o menor importancia, y que éste no llegaría a salir a la luz, por lo que no creyó conveniente alertar a los casi dos millones de usuarios de aquel entonces (fue un grave error por su parte no tener en cuenta las leyes de Murphy). Después, a la vista de las circunstancias, trató de enmendarse, haciendo pública una descripción técnica del error y ofreciéndose a sustituir los chips erróneos: envió un fax a distribuidores de todo el mundo, cuyo contenido reproducimos en el recuadro adjunto, y que resulta cuanto menos poco serio para con los usuarios, pues indica que decide sustituir el procesador defectuoso debido a un error que sucede cada 27.000 años. Intel asegura haber reservado una partida importante de sus beneficios a lo largo del cuarto trimestre del año para la operación de sustitución, a la vez que afirma haber corregido ya el error en todos los nuevos Pentium s fabricados desde la última semana de Diciembre. A pesar de esto, según ha podido averiguar Login:, los comercios (al menos en Valladolid) no están recibiendo Pentium s corregidos con regularidad, dado que a pesar de lo que se fabrique en Taiwan, lo que traiga el distribuidor a España puede ser bien diferente. Por su parte, Intel empezará a suministrar chips corregidos para su cambio en nuestro país a mediados de febrero, aproximadamente. Así pues, no hay que dejarse de andar con ojo a la hora de comprar el equipo, y utilizar los tests aquí mencionados, ya no por la importancia del error, sino por si nuestro vendedor se quiere pasar de listo asegurándonos que su chip ya no posee el error.

La importancia de la competencia

La trascendencia del error, a pesar de su difusión a través de Internet, no hubiera llegado a tanto de no haberse producido la reacción de IBM. El gigante azul sigue siendo el vendedor más importante de PCs, y por ello el hecho de que decidiera, a mediados de diciembre, retirar sus equipos con Pentium del mercado, supuso un fuerte impacto a nivel empresarial. IBM adujo que su División de Investigación, una vez al corriente del fallo, indicó que, aún siendo ciertos los datos técnicos sobre la naturaleza del error, las situaciones de riesgo podían ser mucho más numerosas que las indicadas por Intel. De hecho, según IBM, las estimaciones de Intel fallaban en sus bases, ya que una hoja de cálculo puede efectuar 5.000 divisiones cada segundo. Trabajando una media de 15 minutos diarios en una hoja de cálculo, ello supondría un error cada 24 días, o lo que es igual, a diario en una empresa con 24 ordenadores. Pero IBM no convenció al resto de fabricantes, que se han agrupado en torno a Intel, restando importancia al error y confiando en la marca. Todos afirman haber continuado con normalidad sus ventas tras explicar la situación a sus clientes, e incluso algunas marcas dicen haber rebasado sus expectativas sobre el Pentium.

Hay realmente segundas intenciones en la decisión de IBM? El hecho innegable es que IBM está inmersa en la estrategia PowerPC. Para quienes no tengan muy claro de qué se trata, diré rápidamente que PowerPC significa Performance Optimized With Enhanced Risc-Personal Computer (está claro que este tipo de acrónimos son del agrado de todos los anglosajones), y se trata de una nueva familia de microprocesadores, no compatibles con los de Intel, que está siendo desarrollada por IBM, Apple y Motorola, y que Apple e IBM incluirán en equipos que, hasta la fecha, no son compatibles en software. Apple ya ha comercializado equipos PowerMac, además de ofrecer a todos los usuarios de los procesadores 680x0 de Motorola una fácil actualización a PowerPC. Una de sus características más importantes es que ofrecen una computación RISC (Reduced Instruction Set Computing) frente a la CISC (Complex Instruction Set Computing) de los equipos Intel hasta el 80486, siendo Pentium una solución intermedia entre ambos métodos. En el próximo número de Login: se hablará de estos equipos y de sus ventajas y desventajas.

Cabe pensar, pues, que IBM se beneficiaría de un retroceso en las ventas del Pentium, pero a pesar de esto, la propia Apple, ha mantenido el más discreto silencio sobre el tema. Es obvio que IBM tiene además un sistema operativo como OS/2 Warp, que se beneficia de las posibilidades de los Pentium, e incluso un DOS propio, del que además acaban de sacar una nueva versión, el PC-DOS 7.0. Quizás su progresivo distanciamiento de Intel y Microsoft hayan realmente influido en su decisión, o quizás no: no podríamos asegurarlo. En cualquier caso, IBM se ha quedado sola en este asunto.

Conclusión

De lo que no cabe duda es de que el error del Pentium se ha convertido en el hazmerreír de los círculos informáticos a lo largo y ancho del planeta. La expresión no es impropia, porque han sido numerosos los chistes surgidos sobre el asunto, de los cuales podéis ver una selección, en el cuadro adjunto. Incluso en la instalación del Sistema Operativo Linux (sobre el que ya hemos hablado en el número anterior) aparece en la comprobación del tipo de chip un mensaje como: Testing... FDIV Bug? NO!.

Bromas aparte, no es nuestra intención dar aquí una receta mágica sobre la conveniencia o no de comprar un Pentium. Hablando de hechos objetivos y probados, y no de cálculos estadísticos de bases dudosas, el error relativo que se produce en una operación afectada por el es del 0,006%, y ha ocurrido de forma espontánea en sólo dos casos, que se sepa, hasta la fecha. Dado que Intel ya lo ha subsanado y que la compatibilidad sigue mandando, no es previsible que el Pentium vaya a sufrir un descalabro, y es que ya son casi seis millones los equipos con este procesador en todo el mundo. Sin embargo, volvemos al problema habitual: no siempre lo más usado es lo mejor. En Login: ya se han comentado las ventajas que históricamente han ofrecido los procesadores Motorola sobre los Intel; ahora, la competencia más seria vendrá por parte del PowerPC, del que se dice que tendrá su año en este 1.995. Incluso sin salirnos del campo PC, no debemos olvidar que otros fabricantes están empezando a difundir procesadores alternativos de quinta generación. Así, Cyrix con su modelo M1, y Advanced Micro Devices (AMD) con su K5 representan opciones con prestaciones que en general superan las del Pentium, sin contar con que su precio será menor. Por poner un ejemplo, El AMD K5 incorpora 4,1 millones de transistores frente a los 3,1 del Pentium, ejecuta cuatro instrucciones por ciclo en vez de dos, y, en resumen, sus cachés mejoradas y demás características le proporcionan un rendimiento 30% superior al del Pentium. E incluso hay una alternativa más reciente y de ambicioso diseño, el NexGen Nx586, que mantiene la compatibilidad efectuando unas traducciones tipo RISC de las instrucciones Intel. Lamentablemente, los fabricantes no se decidirán a apoyar masivamente estas opciones contra Intel...

En definitiva, es muy probable que todos estos factores obliguen a Intel a adelantar la presentación de su procesador de sexta generación P6 ( Hexium?), de 133 MHz y 300 MIPS, para no perder posiciones. Si con ello se mantendrá el dominio del tándem Microsoft-Intel en la microinformática (llamados Wintel, de Windows+Intel, en forma despectiva por su competencia) sólo el tiempo podrá decírnoslo, y cuando así suceda, podremos hacer otro artículo sobre ello en Login:. Por el momento, no podemos pasar por alto datos como el que indica que, en 1.994, en Estados Unidos se vendieron más PCs que televisiones...

Si el tema os sigue intrigando, podéis obtener más información relacionada con él, a partir del servidor de World Wide Web del G.U.I., que tiene una sección al efecto, incluyendo una sabrosa colección de chistes, que incluyen los que hemos publicado aquí.

Una parte importante de la información obtenida para la redacción de este artículo proviene de datos recopilados en Internet sobre el error del Pentium. Mi agradecimiento a todos quienes reunieron la información, así como a José Javier Muñoz García y a Tecnolog Asesores Informáticos, por su ayuda.