Ανάλυση του αλγορίθμου εφαπτομένης στον επεξεργαστή Intel 8087
Πρωτότυπος τίτλος: "Reverse-engineering the Intel 8087's tangent algorithm: more than CORDIC" (από pwg)
Ο Intel 8087 έφερε επανάσταση στις υπολογιστικές επιδόσεις των PC το 1980, ενσωματώνοντας έναν υβριδικό αλγόριθμο για τον υπολογισμό της εφαπτομένης (FPTAN). Συνδυάζοντας τον αλγόριθμο CORDIC για την προσέγγιση γωνιών και μια ορθολογική πολυωνυμική προσέγγιση (Padé approximant), ο επεξεργαστής πέτυχε υψηλή ακρίβεια και ταχύτητα, αποφεύγοντας τις δαπανηρές διαιρέσεις σε επίπεδο hardware.
Η αρχιτεκτονική προσέγγιση του FPTAN
Ο Intel 8087 δεν ήταν απλώς ένας μαθηματικός συνεπεξεργαστής (coprocessor), αλλά ένα θαύμα μηχανικής της δεκαετίας του '80. Η εντολή FPTAN αποτελεί ένα εξαιρετικό παράδειγμα βελτιστοποίησης, όπου ο σχεδιασμός του hardware και του microcode συνεργάζονται για να επιτύχουν υπολογισμούς που προηγουμένως απαιτούσαν χιλιάδες κύκλους επεξεργαστή.
Ο ρόλος του CORDIC και της πολυωνυμικής προσέγγισης
Ο αλγόριθμος CORDIC (COordinate Rotation DIgital Computer) επιτρέπει την περιστροφή διανυσμάτων μέσω μιας σειράς προκαθορισμένων γωνιών. Ωστόσο, για να επιτευχθεί η απαιτούμενη ακρίβεια 64-bit χωρίς υπερβολικό αριθμό επαναλήψεων, ο 8087 χρησιμοποιεί μια υβριδική μέθοδο:
- Pseudo-division: Προσδιορίζει τις απαραίτητες περιστροφές μέσω μιας διαδικασίας παρόμοιας με τη διαίρεση.
- Padé approximant: Για το εναπομείναν μικρό σφάλμα γωνίας, χρησιμοποιεί τον τύπο 3x/(3-x²), ο οποίος είναι εξαιρετικά ακριβής για μικρές τιμές.
- Pseudo-multiplication: Εφαρμόζει τις περιστροφές που αποφασίστηκαν στο πρώτο στάδιο, χρησιμοποιώντας μόνο shifts και προσθέσεις.
Hardware και Microcode: Η καρδιά του επεξεργαστή
Η ανάλυση του die του 8087 αποκαλύπτει ένα datapath 80-bit, όπου οι καταχωρητές (registers) και η μονάδα αθροιστή (adder) λειτουργούν σε στενή συνεργασία. Το microcode διαχειρίζεται τις καταστάσεις των stack registers και των temporary registers (tmpA, tmpB, tmpC), εξασφαλίζοντας ότι οι ενδιάμεσοι υπολογισμοί παραμένουν εντός των ορίων ακρίβειας. Η απόφαση να μην εκτελείται η τελική διαίρεση από το hardware, αλλά να επιστρέφονται τα συστατικά μέρη του αποτελέσματος, αποτελεί μια κλασική περίπτωση hardware optimization που προτιμά την ταχύτητα έναντι της ευκολίας χρήσης.
Ανακαλύψτε καινοτόμα open-source εργαλεία και κρυμμένα διαμάντια ανοιχτού κώδικα.