הקדמה: ההשפעה הסופית של CISC על מתווכים מודרניים

היחסים בין ארכיטקטורת מעבד ואופטימיזציה תוכנה הם אבן הפינה של מדעי המחשב.בין פרדיגמות האדריכליות המשפיעות ביותר הוא מחשוב הדרכה מורכב (CISC), פילוסופיה עיצוב שעיצבה פיתוח מאגד במשך עשרות שנים.בניגוד ל-RISC, המסתמך על קבוצה קטנה של הוראות הנדסיות מהירות, פשוטות, מעבדי CISC אורזים פעילות עשירה, רב-שלבית, כגון העתקה דומיננטית, הערכה פולינומית או זיכרון יחידי, כגון:

מאמר זה חוקר את ההשפעה העמוקה של עיצוב CISC על אסטרטגיות אופטימיזציה של מדפים.We נפרק אזורי מפתח כולל בחירת הוראה, צפיפות קוד, היתוך שיתוף פעולה, לרשום הקצאה תחת אורך הוראה משתנה, ואת האתגרים המודרניים שמציבים המיקרו-אופציונלי של CISC. באמצעות דוגמאות קונקרטיות והתייחסויות לאדריכלות בעולם האמיתי, אנו נוכיח כיצד משווקים התפתחו כדי לנצל את הכוח של CISC תוך כדי הקטנת המורכבות שלו.

היסטוריה קצרה של CISC: מ Mainframes to x86

השורשים של CISC חוזרים בשנות ה-60 וה-70, כאשר הזיכרון היה יקר ומעבדים היו איטיים.כדי להפחית את מספר ההוראות הדרושות לתוכנית נתונה, אדריכלים ארזו יותר פונקציונליות לכל הוראה.מערכת / 360 של IBM, שהוצגה בשנת 1964, הוא דוגמא מהותית: הוראות ההוראה שלו כללו קידוד על ערכים בזיכרון, ענפים מותניים עם קודים מרובים, ופעולות ברמה גבוהה כמו "Comrepareparex" ו-MX" (Ric) עם מערכת נתונים מורכבת של ⁇ X (V) עם מערכת מורכבת (VD) עם עקרונות מורכבים של ⁇ X) עם מערכת עיבוד של ⁇ X (VD) ו-VD) עם עקרונות מורכבים (VD) עם עקרונות מורכבים (VD) ו-RICX) עם מערכת מורכבת (VDIX) עם עקרונות (V) עם מערכת מורכבת (VD) עם מערכת מורכבת (VD) עם מערכת מורכבת (VD) עם מערכת מורכבת (VD.

משפחת CISC הנמשכת ביותר היא ארכיטקטורת x86, שמקורה ב- Intel 8086 ב-1978. x86 של ההוראה התפתחה באמצעות הרחבות כמו MMX, SSE, AVX, ו- AVX, תוך הקצאת מאות הוראות שונות לאורך זמן (1 עד 15 מעלות צלזיוס) למרות המהפכה RISC של שנות ה-80 - אשר הוכיח כי הוראות פשוטות יותר יכולות להניב מהירות גבוהה יותר וקלה וקלה יותר וצנרת - נשארות יותר -2, נשארות יותר, כלומר, החל ממעבדי תיבות של מעבדים (מסלולאריכות הפעלה מורכבות) ומעבדים (R) של מעבדים, כלומר, כלומר, כלומר, כלומר, כלומר, כלומר, כלומר, מעבדי תיבות של מעבדי תיבות של מעבדים מתקדמים (R) של מעבדים, מעבדים (R) של מעבדי תיבות של מעבדים (RSC (R) ו-ידי CSD-ידי תיבות של מעבדים ניידים (R) ומעבדים, לעומת זאת, לעומת זאת, לעומת זאת, לעומת זאת, לעומת זאת, לעומת זאת, לעומת זאת, לעומת זאת, לעומת זאת, מעבדים מתקדמים (R) של תוכנת הפעלה מחדש של תוכנת הפעלה פשוטה יותר, כולל מעבדים מתקדמים יותר, מעבדים, כולל מעבדים מתקדמים יותר,

אסטרטגיות אופטימיזציה של Compiler מושפעות על ידי CISC

העושר של מערך ההוראה של CISC יוצר הן הזדמנויות והן אתגרים עבור המדפים. להלן אנו בודקים את תחומי המפתח שבהם עיצוב CISC מניע החלטות אופטימיזציה.

אפשרויות ל- Balancing Power and Cost

במערכת RISC, בחירת ההוראה היא פשוטה יחסית: המאגד ממפות פעולות ברמה גבוהה למערכת קטנה של הוראות פשוטות, הסתמך על האופטימיזציה לרצף הפתיח שבו מועיל.ב- CISC, המאגד חייב לבחור מתוך תפריט עצום של הוראות, כל אחד עם אורך שונה, עצלות, ושימוש משאבים.

(GCC, LLVM) משתמשים במודלים המבוססים על דפוס ועלות כדי לקבל החלטות אלה.החזרה ספציפית המטרה (למשל, X86'sFLT:2) LLVM) מכילה מאות דפוסים לבחירת רצף ההוראה הטוב ביותר עבור תבנית IR נתונה. לדוגמה, כאשר לולאה מכילה רצף של עומסי זיכרון ותוספת, המדגם עשוי להיות מצמצם את הסימון ה-DVater (אך אינו מתייחס ל-Digitaler) אך אינו כולל את המאפיין את ה-Digation.

הכחשה ו Cache Utilization

אחד היתרונות ההיסטוריים של CISC הוא צפיפות קוד. כי הוראה אחת CISC יכול להחליף מספר הוראות RISC, בינארי וכתוצאה מכך הוא לעתים קרובות קטן יותר.לדוגמה, הוראה CISCFLT:4 כי נטען מכתובת זיכרון באמצעות 32 סיביות מורדת רק 5-7tes, בעוד רצף שווה ערך RISC (עומס להירשם, ולאחר מכן להירשם) עשוי לדרוש 8-12 על ידי שימוש קוד פתוח יותר, כלומר, כלומר, תפקוד קריטי, הוא פועל טוב יותר.

משתמשים ב-codeדחיסות באמצעות טכניקות כגון:

  • (ב) ,0) ,ההעברה: (במידת האפשר) ה-[[1924]], ה[[המאה ה-1]], [[המאה ה-20]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]], [[1924]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]], [[1924]]]], [[1924]]]]]]]], [[1924]]]], [[1924]]]]]]]]]]]], [[1924]], [[1924]]]]]]]], [[[[1924]]]]]], [[[[1924]]]]]]]]]] [[[[1924]]]]
  • (ב) [ה]ב]: [ה] [ה][ה] [ה] [ה]] [ה][ה]]][ה]]][ה]][ה]]][ב]]]], ה[[המאה ה-20]], ה[[המאה ה-20]], אך לא ניתן ל[[המאה ה-20]], אלא ל[[ה[[המאה ה-20]], אלא ל[[1924]], אלא ל[[1924]], אלא ל[[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924
  • (FLT:0) שימוש מורכב מצבי טיפול: FIRLT:1 ; מדד הטיפול מצב (ראה FLT:10) מאפשר הוראה אחת לטעון מגורם מערך. Compilers להעריך בזהירות אם הקידוד הארוך יותר של ההוראה (עד 7tes) הוא מתמוסס על ידי ביטול הוראות חישוב כתובת נפרדת.

עם זאת, צפיפות קוד מוגברת אינה תמיד לשפר את הביצועים.הוראות ארוכות יותר עשויים לקחת יותר קוד (במיוחד צינורות x86 מוקדם), וקידוד אורך משתנה עושה pre-decoding וחיזוי סניף קשה יותר. Compilers ולכן ליישם אופטימיזציה צפיפות באופן סלקטיבי, לעתים קרובות בתיאום עם אופטימיזציה מונחת פרופיל (PGO) כדי לזהות נתיבים חמים שבהם קוד קטן יותר מועיל ביותר.

Macro-מבצע Fusion ו- Micro-Op Decomposition

מעבדי CISC מודרניים (x86 מ Pentium M ואילך) פורצים באופן פנימי הוראות מורכבות למיקרו-פעולה פשוטה (μops) שממפה לצנרת הביצוע.לדוגמה, x86FLT:11 מופרש לתוך מיקרו-פעולה פשוטה (μop), מיקרו-קופ קידוד, ו-מחסנית μop. זה מאפשר למעבד לשמור על הצינור המלא וניצול של הסדר, אך ורק כדי להופיע מנוע הפעלה יחיד.

על המשתתפים לקחת בחשבון את המיקרו-ארכיטקטורה הזו.שני אסטרטגיות מפתח הופיעו:

  • (ב) [ה]: [ה] [ה]] [ה]] [ה]]] [ה]] [ה']] [ה']'[ה']'[ה']'[ב]']'[ה']'[ב[[המאה ה-20], ו[[המאה ה-20]], ה[[ה[[המאה ה-20]],]],]], ו[[ה[[המאה ה-20]],]],]],]],]],]], [[ה[[ה[[ה[[ה[[המאה ה[[המאה ה-20]],]],]],]],]],]],]],]],]],]], [[ה[[1924]],]],]],]],]],]], [[ה[[1924]], [[ה[[1924]],]], [[ה[[1924]],]],]], [[ה[[1924]],]], [[ה[[1924]], [[ה[[1924]], [[1924]],]], [[ה[[1924]], [[ה[[1924]], [[ה[[1924]], [[ה[[1924]], [[ה[[1924]], [[
  • (FLT:0Micro-op caching:FLT:1 , ⁇ x86 (Intel Haswell and later) כוללים מטמון מיקרו-פאפ שחנויות מקודמות על μops עבור לולאות. כדי לנצל את זה, משווקים לייצר קוד שמתאים לגודל ה- μop cache (לעתים קרובות 4-6 μs).

מעניין לציין כי מיקרו-אופ דה קומפלקסציה לפעמים עושה את RISC-כמו הוראות פשוטות יותר מאשר המקבילות CISC שלהם. לדוגמה, רצף של FLT:14 ו-FLT:15 שימוש ברשומות יכול להיות מקודש פחות μops הכולל מאשר אחד FLT:16 אשר צורכת שלושה חריצים מיקרו-אופטיים.

רישום אל-מיקום ומשך הוראה משתנה

הקצאת רישום מורכבת על ידי CISC כי הוראות רבות יכולות לגשת ישירות לזיכרון, ביצוע לחץ רישום פחות קריטי - אבל גם הצגת חילופי מסחר. כאשר מפרש להקצות רישום עבור משתנה לעתים קרובות בשימוש, זה עשוי להימנע מפעילות זיכרון, אבל ההוראות המתרשם-to-register המתקבלות הן בדרך כלל ארוכות יותר (בשל מודולים על ידי) מאשר הגרסאות של גישה לזיכרון.

מאגדי CISC חייבים לשקול את היתרון של שמירה על ערך ברישום כנגד האפשרות של גודל קוד גדל ופענוח קוד. הם לעתים קרובות להשתמש הירריסטים המבוססים על עומק הלולאה וגודל הפונקציה.לדוגמה, בלולאה חמה, המדר יעדיף להירשם כדי להימנע מעקב זיכרון, גם אם זה אומר שימוש בהוראות ארוכות יותר.

אתגר נוסף הוא המספר המוגבל של רישומים למטרות כלליות ב- x86: רק 8 במצב 32 סיביות (EAX, EBX, ECX, EDX, ESI, EBP, ESP) ו-16 במצב 64 סיביות.כוחות המחסור האלה מתעשיינים כדי להיות חכם על הקצאה.הוראות CISC רבות יש שימוש בלתי מוגבל (למשל, FLT:20 ו-EAX) לשימוש ב-EAXL (כולל קידודים) אשר עשויים להוסיף את כל ה-EAX) ל-iX.

אתגרים שמוצפים על ידי CISC Complexity

בעוד CISC מציעה הזדמנויות אופטימיזציה רבות, זה גם מציג מכשולים משמעותיים עבור סופרים מדגמים.

הוראה של ציות ועוצמה

באדריכלות RISC, רוב ההוראות יש חיזוי, אחידות (לעתים קרובות 1 מחזור עבור טבלאות פשוטות של ALU) הוראות Compt יכול להיות מגוון רחב של מהירויות שונות.לדוגמה, פשוט FLT:21 עשוי לקחת מחזור אחד, בעוד ש-FLT 22 (בשיתוף פעולה) יכול לעתים קרובות להשפיע על טבלאות קבועות גבוהה יותר, עם זאת, אפילו את אותה הוראה יכול להיות שונה בהתאם לסוגים מתקדמים (לאחר מכן) לעומת מספר טבלאות קבועות).

מורכבות של אופטימיזציה של Pephole

(המדריך העשיר של CISC דורש אופטימיזציה הצצה מתוחכמת שיכול לזהות דפוסים ברמה גבוהה.לדוגמה, רצף כמו FLT:23 יכול להיות מוחלף על ידי אחד FLT:24 אם המאגדים כי הדגלים המצב אינם בשימוש במקום אחר.הטרנספורמציה זו חוסכת שני הוראות ומפחיתה את הלחץ.

LLVM ו- GCC יש חולות הצצה נרחבות לרוץ במהלך ה backend הספציפי של המטרה.לדוגמה, LLVM של FLT:26 לעבור להחליף דפוסים מסוימים ברמה נמוכה עם הוראות CISC יעילות יותר.עבור זה הוא מונחה על ידי היסטריט וחייב להיות נשמר בזהירות כמו מעבד חדש micro-architectures להציג חילופי סחר שונים. בנוסף, לעתים קרובות מקטין IR כדי לאפשר את ה- CISC מוקדם יותר כדי להתאים דפוס זה, אבל מאוחר יותר, אבל מאוחר יותר, אבל מאוחר יותר, אבל מאוחר יותר, יכול להתאים את זה יכול להתאים את זה יכול להיות מתאים יותר, אבל מאוחר יותר, אבל מאוחר יותר, אבל מאוחר יותר.

המונחים: Power and thermal Considerations

בעוד לא בעיה מתהווה ל-Se, צריכת החשמל חשובה יותר ויותר.הוראות CISC שקושרות יחידות הוצאה להורג מרובות (למשל, FLT:27 אשר מתפוררות יותר) עלולות לגרום לספיציפי חשמל דינמיים גבוהים. Compilers מיקוד מעבדי x86 ניידים ומוטבעים (כמו Intel Atom) לפעמים להימנע מהוראות כוח כאלה לטובת רצפים של פעולות פשוטות יותר, גם אם קוד זה עשוי להאיץ את האופטימיזציה אוטומטית של המוצר, אך לעתים קרובות, אך עשוי להיות יעיל יותר, אך עשוי להיות בעל השפעה עלות באמצעות מעבדי תיבות של קוד ה-X2, אך ורק אם הוא גם כן, אך ורק אם הוא עשוי להאיץ את האופטימיזציה אוטומטית, אך עשוי להיות יעיל יותר, אך ורק אם הוא גם כן, אך עשוי להאיץ את ה-D2, אך עשוי לייעלות, אך עשוי לעתים קרובות מדי, אך עשוי להפעיל את ה-pexitic.

אפשרויות:מינוף CISC עבור ביצועים

למרות המורכבות, צוות ההוראה העשיר של CISC מציע אפשרויות אופטימיזציה ייחודיות ש- RISC לעתים קרובות לא יכול להתאים.

הוראות מיוחדות ל- Cryptographic and Media Workloads

משפחות CISC כמו x86 צברו מגוון עצום של הוראות מיוחדות.

  • (ב) [ה]: [ה] [ה]] [ה]] [ה]], [ה], [ה],] [ה], [ה],] [ה]]]], [ה], [ה], [ה], [ה],], [ה], [הההההההההההתרשים] [ה]]]],], [ב], [ה],], [ב], [ה],], [ה], [ה],], [ה],],],], [ה], [ה], [ה'[ה'[ה'[ה'], [ה'[ה'], [ב[[ה']']'], [ב[[ה'], [ה'], [ה'], [ה'], [ה'], [ה'], [ה'], [ה']']']'[ה']']']']']']']']']']'[ה']']'[ה''
  • (ב) ,0) ,5 ,5 ,5 , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (FLT:0 AVX-51203: 1) FLT 1 Fling מכפיל, פיזור / אב, וגילוי סכסוכים יכול להאיץ באופן דרמטי את HPC וקוד וקטורן. Compilers משתמשים בהוראות אוטומטי כדי ליצור הוראות אלה, לעתים קרובות עם בדיקות ריצה עבור תמיכה CPU.
  • (ב) [15] ,(ב) ,(ב) ,(ב) ,(ב) ,(ב) ,(ב) ,(ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

כדי לנצל את אלה, המאגדים חייבים לדעת את התכונה של המטרה CPU. LLVM ו GCC להשתמש בבדיקות CPUID ו-מקד ספציפית אנטנות תכונות (כמו FLT:33). במובנים רבים, המדר יכול ליצור מספר נתיבי קוד ולבחור את המתאים בריצה דרך ריבוי תפקוד.

קוד מקור: Binary Rewriting

תאימות לאחור של CISC היא גם ברכה וקללה. עבור אופטימיזציה של מדרדר, זה אומר כי קוד האובייקט הקיים של מדפים מבוגרים יכול לפעמים להיות משופר באמצעות כלי כתיבה בינארי (למשל, כלי PIN של אינטל או אופטימיזציה אוטומטיים כמו BOLT C) כלים אלה לבצע אופטימיזציה של מייל אחרון כי מדפים לא יכול בקלות לעשות כי הם חסרים מידע בזמן.

מסקנה: התפקיד Eכרוך של CISC בפיתוח Compiler

ההשפעה של עיצוב CISC על אסטרטגיות אופטימיזציה של מפיץ הוא עמוק ורב פנים.מבבחירת ודחיסות קוד ל- micro-op fusion ורישום הקצאה, כוחות המורכבות של CISC כדי להשתמש בניתוחים מתוחכמים ומודלים עלות.מודרני x86 מעבדים, למרות המורשת של CISC, אימצו RISC-inspired טכניקות כמו מיקרו-opches ו- מאקרו-fusion, מטושטש קו בין שני פרדיגמותקרסאלקס חזקים כדי לייעל את כוח כדי להתאמה אישית של כוח.

במבט קדימה, CISC יהיה כנראה רלוונטי דרך מערכת האקולוגית x86, בעוד ARM (עיצוב RISC) מרוויח קרקע בשרתים ומחשבים ניידים.זה אומר סופרים מדגמים חייבים לשמור על מטרות מרובות חזרה, כל אחד עם סט משלו של עסקאות.למפתחים, להבין כיצד ה- CISC מעצבת את הפלט הוא מפתח לכתיבת קוד שניתן לייעל ביעילות - לדוגמה, באמצעות פונקציות מהותיות עבור מחסנים או מחסנים מיוחדים, אך הם רק ל-C.

(ב) לקריאה נוספת, עיין במדריךים מפתחי התוכנה של IA-32:1, המפרטים את כל הוראות x86 ואת התנהגותו, ואת ה-FLT:2Agner Fog's Optimizer ManualsFLT 3: 3 המספקים טבלאות מיקרו-ארכיטקטורה המשמשות על ידי מחברים.