Ken Shirriff y sus colaboradores siguen con la ingeniería inversa de la FPU 8087 de Intel, y esta vez revisaron una de sus funciones trigonométricas, en concreto FPTAN. Lo más interesante de este tipo de trabajo suele ser descubrir qué algoritmo se usó en la implementación, y a la vez entender el razonamiento detrás del diseño final del hardware.
¿Por qué CORDIC en un chip sin funciones de hardware?
Si trabajas con un MCU o MPU simple como el 6502 o el Z80, sin funciones matemáticas en hardware, lo más probable es que uses un algoritmo como CORDIC o algo parecido. CORDIC solo pide recursos básicos de hardware, como suma, resta, desplazamiento de bits y tablas de búsqueda. Otra opción es la aproximación polinómica, si hay soporte de hardware que la acelere. El 8087 hace una tercera cosa y combina las dos en un enfoque híbrido que apunta a velocidad y precisión.
¿Cómo llega FPTAN a 64 bits de precisión?
El artículo detalla la implementación exacta para llegar a 64 bits de precisión. Los primeros 16 bits se calculan con CORDIC y después el chip cambia a la técnica del aproximante de Padé, que usa el cociente de dos polinomios. Como CORDIC ya resolvió el grueso del valor final, lo que queda es un número bastante chico, y sobre ese resto la aproximación polinómica es muy precisa y además rápida.
Así FPTAN y las demás funciones trigonométricas de esta FPU alcanzan un nivel de precisión muy alto sin necesitar tablas de búsqueda más grandes ni el tiempo adicional que tomaría resolver los bits restantes con CORDIC. Para quien quiera ver el algoritmo completo que usaron los ingenieros de Intel, Shirriff publica en su artículo el listado entero del microcódigo con comentarios.
¿Cuánto tiempo gasta cada etapa?
Sobre la ganancia de velocidad, Shirriff calculó para un valor puntual cómo se reparte el tiempo de FPTAN.
| Etapa de FPTAN | Tiempo |
|---|---|
| Pseudodivisión CORDIC | 33% |
| Pseudomultiplicación CORDIC | 47% |
| Aproximación polinómica | 15% |
| Sobrecarga | cerca de 5% |
Lo que vino después del 8087
Con la serie Pentium, Intel abandonó CORDIC por completo. Por preciso que sea, el método cuesta escalarlo a muchos bits sin pagar penalizaciones de tiempo importantes. Con la llegada de las instrucciones SIMD, la ISA x87 además fue perdiendo funciones. Aun así, este análisis vuelve a mostrar por qué el 8087 tuvo tanto impacto cuando salió al mercado.




