חזרה
הוראה vfmaddrnd231pd: מתועד ב-Intel SDM, אך מעולם לא נוצר
SiTech AI Team3 דק׳ קריאה

הוראה vfmaddrnd231pd: מתועד ב-Intel SDM, אך מעולם לא נוצר

הוראת FMA פרדוקסלית vfmaddrnd231pd מופיעה ב-SDM של Intel משנת 2024, אך על חומרה אמיתית גורמת לשגיאת הוראה לא מוגדרת. חקירת הבלוג מובילה אותה לניסיונות שננטשו של עיגול AVX10.

מראה ההוראה

vfmaddrnd231pd מופיעה במדריך המפתחים של Intel (SDM) כחברה בקבוצת ההוראות FMA. לפי המהדורה של 2024, היא מבצעת כפל-חיבור משולב של ערכי נקודה צפה בדיוק כפול עם שליטה בעיגול. הבייט המיידי המצורף להוראה מגדיר את שדות הביטים של עיגול, DAZ, FTZ וכיבוי חריגים. שליטה כזו אפשרה לפעולות אריתמטיות לבחור ישירות את מצב העיגול, במקום משתנים גלובליים איטיים, ולהאיץ משמעותית אלגוריתמים תלויי עיגול. רק שההוראה הזו לא קיימת.

חיפושים כושלים ושגיאת #UD

אסמבלר GNU לא מכיר את vfmaddrnd231pd. SDM מציין intrinsic-ים של Intel C/C++ Compiler — _mm_fmaddround_pd ו-_mm256_fmaddround_pd, אך הם לא קיימים לא ב-Clang ולא ב-ICC. הרכבת ההוראה ידנית מרשימת ה-opcode-ים ב-SDM, VEX.DDS.128.66.0F3A.W1 B8 /r /ib, מעלה שאלה נוספת: בשום מקום במדריך לא מוסבר מה משמעות DDS. על מעבד Haswell, שתומך ב-FMA, היא גורמת לשגיאת #UD (הוראה לא מוגדרת). במהדורת 2026 של SDM ההוראה הזו כבר לא מופיעה, אך במהדורת 2024 היא כן; גם וריאנטים משפחתיים שלה — pd, ps, sd, ss או פורמטים 132, 213, 231, שיש להוראות FMA אחרות — לא קיימים.

אבטיפוס AVX10 שננטש

תגובות הבלוג השלימו את התמונה. ב-2023 Intel לא הצליחה להוסיף AVX-512 למעבדי צרכן בשל מגבלות טכניות, אך רצתה לחלק פונקציות בסגנון AVX-512, מה שהוביל ל-AVX10. AVX10 הדומה ל-AVX-512, אך תמך מותנה בוקטורים של 512 ביט. בקידוד EVEX של AVX-512 ביטי עיגול סטטיים נמצאים בשדה רוחב הפעולה, ולכן התאמת עיגול אפשרית רק לפעולות סקלריות ושל 512 ביט. ל-AVX10 בלי תמיכה ב-512 ביט נדרש קידוד אחר. תיאורטית, Intel תכננה להשתמש בבייט מיידי לעיגול, ולכן vfmaddrnd231pd והוראות דומות נכללו בתיעוד. היא משתמשת בקידוד VEX, לא EVEX, מה שאפשר למעבדים ללא תמיכה ב-512 ביט להתעלם מ-EVEX. עד 2024 Intel זנחה גישה זו והשתמשה בביט האחרון של EVEX לעיגול וקטורים של 256 ביט, עם קידוד ותחביר של AVX-512, מה שהפך את vfmaddrnd231pd ומשפחתה למיותרים. בתהליך העברה, מישהו החל למחוק הוראות מטיוטת ה-SDM.

תיקוני המהדר מאשרים את הסיפור

עד 2025, אחרי שהפופולריות של AVX-512 ב-Zen 4 הפכה אותו לחובה, Intel הפכה תמיכה ב-512 ביט ב-AVX10 לאופציונלית. מתוך נייר הלבן המעודכן של AVX10 הוסרו הריסטר וקטורלי מקסימלי של 256 ביט והוראות עיגול מוטמעות של 256 ביט. Intel שלחה תיקונים ל-GCC להסרת תמיכה בעיגול של 256 ביט, בהם Revert „AVX10.2 ymm rounding: Support vfmadd{132, 231, 213}p{s, d, h} intrins“, שמחק intrinsic-ים כמו _mm256_fmadd_round_pd. זה דומה מאוד ל-_mm256_fmaddround_pd שתועד עבור הוראת המראה. מאוחר יותר ב-Intel שמו לב ש-vfmaddrnd231pd עדיין הייתה ב-SDM ומחקו אותה. לפי סיכום המחבר, ההוראה נולדה מ-AVX10: נוספה בזמן אבטיפוסים, הוסבה לקידוד אחר ובסופו של דבר הפכה למיותרת, אך למזל הרע היא פורסמה בעל פה במדריך הרשמי, למרות שאף פעם לא הופעלה על חומרה.

מקורות: purplesyringa.moe

SSiTech

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

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