1 / 20

Winter 2012-2013 Compiler Principles Example Questions for Dataflow Analysis and Optimizations

Winter 2012-2013 Compiler Principles Example Questions for Dataflow Analysis and Optimizations. Mayer Goldberg and Roman Manevich Ben-Gurion University. הערות. מכיוון שאין לי דוגמאות ממבחנים, רוב השאלות לא מנוסחות בפורמט של שאלת בחינה. שאלה 1. היזכרי במושג גובה של שריג

piper
Download Presentation

Winter 2012-2013 Compiler Principles Example Questions for Dataflow Analysis and Optimizations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Winter 2012-2013Compiler PrinciplesExample Questionsfor Dataflow Analysisand Optimizations Mayer Goldberg and Roman Manevich Ben-Gurion University

  2. הערות מכיוון שאין לי דוגמאות ממבחנים, רוב השאלות לא מנוסחות בפורמט של שאלת בחינה

  3. שאלה 1 היזכרי במושג גובה של שריג מהו גובהו של השריג המתאים לאנליזת חיות (liveness)? מהו גובהו של השריג המתאים לאנליזת available expressions? מהו גובהו של השריג המתאים לאנליזת constant propagation? מהו גובהו של השריג המתאים לאנליזת reaching definitions?

  4. תשובה 1 הערך התחתון (bottom) הינו הקבוצה הריקה וכל "מדרגה", כלומר זוג ערכים ניתנים להשוואה שאין ביניהם ערכים נוספים, כוללת הוספת משתנה תכנית יחיד. השרשרת העולה הגבוהה ביותר מתחילה ב-bottom ומוסיפה משתנה עד הגעה לקבוצת כל המשתנים. לכן הגובה הינו מספר המשתנים בתכנית. באופן דומה לסעיף הקודם גובה השריג הינו גודל קבוצת כל הביטויים מהצורה a=b op c. נניח שמספר המשתנים הינו n ומספר האופרטורים הינו m. גובה השריג נתון ע"י n3*m. הגובה לכל משתנה הינו 2 (השרשרת מתחילה ב-undefined, עולה למספר כלשהו ואז ל-NOT-A-CONSTNAT). לכן סה"כ גובה השריג בינו 2*n. באופן דומה לסעיף 1, גובה השריג הינו מספר ההשמות בתכנית.

  5. שאלה 2 הוכח שפונקצית המעבר של liveness analysis הינה דיסטריבוטיבית

  6. תשובה 2 ניזכר בפונקצית המעבר להשמות: fa=b op c(X) = (X \ {a})  {b, c} כעת נבחר שתי קבוצות X ו-Y ונוכיח ש- fa=b op c(X  Y) = fa=b op c(X)  fa=b op c(Y) לפי ההגדרה: fa=b op c(X  Y) = (XY \ {a})  {b, c} = ((X\{a})  (Y\{a}))  {b, c} = ((X\{a}){b, c})  ((X\{a}){b, c}) = fa=b op c(X)  fa=b op c(Y)

  7. שאלה 3 - מהשקפים OUT[s] entry: {} a = b; {a=b} {a=b, c=b} c = b; {a=b, c=b, d=a+b} d = a + b; {a=b, c=b, d=a+b, e=a+c} e = a + c; d; Notice that c=b and d=a+b implies a+c=a+b

  8. תשובה 3 • Define a closure operator • Closure(AE) = if exist x, y, z, w such that {x=y, z=x op w}AE return Closure( AE  {z=y op w} ) else return AE • If op is commutative can also add {z=w op y} • The idea is to make implicit equalities explicit by substituting all equal variables • Now redefine every transfer function f of available expressions to f’ = Closure(f)

  9. שאלה 4 נתונה שפת תכנות בעלת הפקודות הבאות: רוצים לאתר משתנים שייתכן שנעשה בהם שימוש לפני שאתחלו אותם (used before defined) כדי להתריע בכך בפני מתכנתים.  State = d u  הגדר אנליזת זרימה מתאימה. רמז: השתמש בשריג המשנה State המוגדר להלן לכל משתנה.המשמעות של כל ערך היא:  - לא ידוע אם המשתנה אותחל עדיין, d - המשתנה אותחל, u – המשתנה לא אותחל,  - ייתכן שמשתנה אותחל וייתכן שלא.

  10. שאלה 4 L1:   x = 5L2:   y = xL3:   IfZ x Goto L7L4:   z = x + aL5: a = 6L6:   Goto L3L7:   z = x + y • הפעילי את האנליזה על התוכנית והראי את הערכים המתקבלים לאחר כל איטרציה. לפי האנליזה - אילו ערכים עלולים להיות לא מאותחלים? הסבר באופן פורמאלי למה האנליזה מסתיימת על כל control flow graph. ציירי את ה-control flow graph לקוד הבא:

  11. תשובה 4 נקרא לקבוצת הערכים שלמעלה State ונסמן את קבוצת המשתנים ב-Var.כעת מרכיבי האנליזה הם: D = ForwardV = Var State כלומר השריג הכולל הינו כל הפונקציות הממפות משתנים לערכי State. אופרטור השילוב משלב כל משתנה בנפרד לפי השריג State. דוגמא: M1={ad, bu, c}  M1={au, b, c} = {a, bu, c} הערך התחתון ביותר אם כן הוא הפונקציה הממפה כל משתנה ל-. הערך ההתחלתי הוא הפונקציה הממפה על משתנה ל-u.

  12. תשובה 4 נסמן שוויון סינטקטי בין משתנים כך: x  y. פונקציות המעבר מופעלות על ערכים מה-domain שהם פונקציות כמוגדר למעלה. fx = k(M) =lambda(z) If zxthen d else M(z) מכיוון ש-x עובר אתחול נעדכן זאת בהתאם.דוגמא: fc=5({ad, bu, c}) = {ad, bu, cd} נרשום x  y במשמעות ששני המשתנים הם בעצם אותו משתנה (שוויון סינטקטי) fx = y(M) =lambda(z) if zx then M(y) else M(z) דוגמא: fa=c({ad, bu, c}) = {a, bu, c} fx = a+b(M) = lambda(z) if zx M(a)  M(b) else M(z) כאן M(a)  M(b) מתבצע ע"י שילוב לפי השריג State. אינטואיטיבית, אם אפשרי שאחד מהמשתנים אינו מאותחל אז אפשרי שגם x אינו מאותחל. דוגמא: fa=b+c({ad, bu, cd}) = {a, bu, cd} שימו לב כי פונקצית המעבר האחרונה אינה המדויקת ביותר האפשרית (ניתן להגיע ליתר דיוק על-ידי בחינה של כל הקומבינציות האפשריות של ה-State של b ו-c). עם זאת, פונקציה זו הינה קונסרבטיבית. לפקודות הסתעפות נתאים את פונקצית הזהות.

  13. תשובה 4 entry L1:   x = 5L2:   y = xL3:   IfZ x Goto L7L4:   z = x + aL5: a = 6L6:   Goto L3L7:   z = x + y L1:   x = 5L2:   y = x L3:   IfZ x Goto L6 L4:   z = x + aL5:   a = 6L6:   Goto L3 L7:   z = x + y exit האנליזה מסתיימת מכיוון שה-domain סופי (אוסף הפונקציות סופי), ובפרט הגובה שלו סופי. בנוסף פונקציות המעבר הינן מונוטוניות (ניתן לבדוק לפי מקרים). שילוב העובדות האלה מבטיח סיום לפי משפט הסיום של אנליזות זרימה. להלן ה-control flow graph:

  14. תשובה 4 לא נרשום במפורש משתנים הממופים ל- ולא נחזור על ערכים שאינם משתנים.

  15. תשובה 4 קיבלנו בשורה L4 ייתכן שהמשתנה a אינו מאותחל (ונעשה בוא שימוש) ולכן נתריע על כך.

  16. שאלה 5 נתונה שפת תכנות בעלת הפקודות הבאות, כאשר y ו-z הם משתנים או קבועים מספריים: נגיד שביטוי מהצורה y+z הוא מצופה (anticipated) בנקודה כלשהי בתוכנית L, אם ייתכן שקיים מסלול ביצוע מ-L לנקודה אחרת L’ אשר בה ישנה פקודה מהצורה x=y+z (כלומר נעשה שימוש בביטוי y+z) כאשר לאורך המסלול ערכו של הביטוי אינו משתנה. הגדירו אנליזת זרימה אשר מחשבת את קבוצת הביטויים המצופים בכל נקודה בתוכנית. הסבירו כל אחד ממרכיבי בעיית הזרימה שאתם מציעים.

  17. שאלה 5 L1: a = zL2: c = wL3: IfZ x Goto L7L4: w = c + dL5: q = a + bL6: Goto L9L7: x = a + b L8: y = c + d L9: a = p • שימו לב שקיימים בתוכנית ביטויים אשר חוזרים על עצמם, אך לא ניתן לבצע common-subexpression elimination מכיוון שלא קיימות הגדרות המאפשרות את האופטימיזציה. היעזרו בתוצאת אנליזת ביטויים מצופים כדי להציע התמרה של הקוד אשר תאפשר את ביצוע האופטימיזציה. הסבירו היכן ניתן לבצע את ההתמרה והיכן כדאי לבצע אותה. הפעילו את האנליזה על התוכנית הבאה:

  18. תשובה 5 נגדיר את כיוון האנליזה כ- D = Backward זאת מכיוון שניתן לדעת אם ייעשה שימוש בביטוי על-סמך המשך הביצוע (כלומר העתיד). נגדיר את ה-domain כקבוצה המכילה את כל הביטויים מהצורה y+z: V = {y+z | y,z are program variables} הגדרת קבוצת הערכים במקרה זה נובעת מהגדרת הבעיה. נגדיר את אופרטור השילוב כאיחוד קבוצות. זאת מכיוון שהגדרת הבעיה קובעת שמחפשים ביטויים שאינם בהכרח מצופים אלא רק עלולים להיות מצופים ("...אם ייתכן שקיים מסלול..."). נגדיר את פונקציות המעבר: fx=y(E) = E \ {x+a, a+x | a is a program variable} fx=y+z(E) = E \ {x+a, a+x | a is a program variable}  {y+z} פונקציות המעבר של פקודות הסתעפות הינן זהות מכיוון שהן אינן משתמשות בביטויים ואינן מגדירות ביטויים. הערך ההתחלתי הינו הקבוצה הריקה, מכיוון שאין ביטויים בהם נעשה שימוש בסיום תוכנית.

  19. תשובה 5 entry {} L1: a = zL2: c = wL3: IfZ x Goto L7 {a+b} {c+d, a+b} {c+d, a+b} {c+d, a+b} L4: w = c + dL5: q = a + bL6: Goto L9 {c+d, a+b} L7: x = a + b L8: y = c + d {a+b} {c+d} {} {} {} {} {} L9: a = p entry נצייר את גרף הבקרה ונרשום את קבוצת הביטויים המצופים ליד כל פקודה:

  20. תשובה 5 מתוצאת האנליזה בנקודה L3, ניתן לראות שהביטויים a+b ו-c+d צפויים להיות בשימוש בשני ענפי התנאי, ולכן ניתן להוסיף את הפקודות t1 = a + b t2 = c + d בין L2 לבין L3. על-ידי התמרה זו, הביטויים יהפכו להיות זמינים בשני הענפים ואופטימיזצייתcommon-subexpression elimination תבצע את ההתמרות הבאות: L4: w = t2 L5: q = t1 L7: x = t1 L8: y = t2 ניתן לבצע את ההתמרה בכל מקום, כלומר הכנסת פקודות מהצורה t=a+b כאשר t הינו משתנה חדש הינה תמיד בטוחה – אינה משנה את משמעות התוכנית. כדאי להכניס פקודות אלו לפני תנאים כאשר שני הענפים מכילים את הביטויים המצופים.

More Related