חזרה
הנדסה לאחור של אלגוריתם הטנגנס של Intel 8087: יותר מ-CORDIC
SiTech AI Team2 წთ. საკითხავი

הנדסה לאחור של אלגוריתם הטנגנס של Intel 8087: יותר מ-CORDIC

קן שיריף חקר את השבב והמיקרו-קוד של המעבד המתמטי Intel 8087 וגילה שהוראת FPTAN שילבה CORDIC של 16 סיביות עם קירוב רציונלי מסוג Padé כדי להגיע לדיוק של 64 סיביות, ולא הסתפקה ב-CORDIC בלבד.

המעבד המתמטי Intel 8087, שהוצג ב-1980, האיץ מאוד חישובי נקודה צפה ב-IBM PC: טנגנס חושב בכ-90 מיקרושניות לעומת כ-13,000 ב-8086. קן שיריף שחזר את האלגוריתם של הוראת FPTAN על ידי בחינת השבב והמיקרו-קוד, ומצא שהשבב לא הסתפק ב-CORDIC בלבד.

CORDIC: מ-B-58 אל 8087

השבב השתמש ב-CORDIC, אלגוריתם שג'ק וולדר פיתח ב-1956 עבור המפציץ B-58 Hustler. האלגוריתם נזקק רק להזזות, חיבורים וטבלה של זוויות מיוחדות מחושבות מראש, arctan(2^-n), בלי כפל או חילוק: סיבוב הווקטור (1, 0) בזוויות האלה נותן את הנקודה (X, Y), והטנגנס הוא Y/X.

פסאודו-חילוק ב-CORDIC עבור קלט של 0.95 רדיאן. תרשים: Ken Shirriff

למה פולינום רציונלי

16 צעדי CORDIC נותנים כ-16 סיביות, ולדיוק של 64 סיביות יידרשו 64 צעדים. לכן 8087 מחשב את הזווית השיורית הקטנה (כ-2^-16) בקירוב Padé: היחס 3x/(3-x²), ששגיאתו גדלה כמו x⁴ ונשארת מתחת ל-2^-64. יחס של שני פולינומים מתאים לטנגנס יותר מטור טיילור, כי הפונקציה שואפת לאינסוף ב-π/2; ומכיוון ש-FPTAN מחזירה מונה ומכנה בנפרד, החילוק אינו עולה דבר.

שלושה שלבים במיקרו-קוד

ה-ROM של המיקרו-קוד מכיל 1648 מיקרו-הוראות, ו-FPTAN מתחילה בכתובת #1039. הפסאודו-חילוק משווה את זווית הקלט לזוויות השמורות של CORDIC ורושם את ההחלטות ברגיסטר הזזה של 16 סיביות; עבור 0.95 רדיאן מתקבל הרצף 10010101 00100111. אחר כך בא הקירוב הרציונלי, ולבסוף הפסאודו-כפל: הסיבובים מבוצעים בהזזות ובחיבורים בסדר הפוך, מהקטן לגדול. רוב החשבון הוא מספרים שלמים של 64 סיביות עם מעריכים משתמעים, והפעולה היקרה היחידה היא העלאת הזווית בריבוע.

פסאודו-כפל: הווקטור מסתובב בהזזות ובחיבורים. תרשים: Ken Shirriff

חומרה וביצועים

המספרים נשמרים בפורמט «temporary real» של 80 סיביות: סיבית סימן, מעריך מוזז של 15 סיביות ו-64 סיביות מנטיסה, ולכל אוגר במחסנית יש תג: zero, valid, special או empty. FPTAN אורכת בדרך כלל 450 מחזורי שעון; עבור 0.95, 33% מהזמן מוקדשים לפסאודו-חילוק, 15% לפולינום, 47% לפסאודו-כפל ו-5% לתקורה. עבור Pentium עברה Intel לקירובים פולינומיים.

המחקר נעשה עם «Opcode Collective»: תמונות ה-ROM הומרו לנתוני מיקרו-קוד בעזרת מסווג של למידת מכונה.

SSiTech

SiTech — פיתוח אתרים בכוח ה-AI

אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.