28
הההה הההההההההה ההההה13 : Data Flow Analysis ( הההה ה"ה הההה הההה( sakogan@cs ההההה הההה, ההה"ה ההההה: ההההה הההה2012

תורת הקומפילציה תרגול 13: Data Flow Analysis

  • Upload
    tahlia

  • View
    73

  • Download
    9

Embed Size (px)

DESCRIPTION

תורת הקומפילציה תרגול 13: Data Flow Analysis. נכתב ע"י אלכס קוגן ( ( sakogan@cs סמסטר חורף, תשס"ח עודכן: סמסטר אביב 2012. מוטיבציה. על מנת לבצע אופטימיזציות רבות, נדרש חישוב גלובלי כדי לזהות את כל הפקודות / משתנים / ביטויים אשר מקיימים תכונה מסוימת בנקודה מסוימת בתכנית. לדוגמא: - PowerPoint PPT Presentation

Citation preview

Page 1: תורת הקומפילציה תרגול 13: Data  Flow Analysis

תורת הקומפילציה13תרגול :

Data Flow Analysis

sakogan@cs)נכתב ע"י אלכס קוגן )סמסטר חורף, תשס"ח

2012עודכן: סמסטר אביב

Page 2: תורת הקומפילציה תרגול 13: Data  Flow Analysis

מוטיבציהעל מנת לבצע אופטימיזציות רבות, נדרש •

חישוב גלובלי כדי לזהות את כל הפקודות / משתנים / ביטויים אשר מקיימים תכונה

מסוימת בנקודה מסוימת בתכנית.

לדוגמא:•.Dead Code Eliminationניתוח חיּות – לטובת –.Copy Propagation – לטובת aliasingניתוח –

Page 3: תורת הקומפילציה תרגול 13: Data  Flow Analysis

DFAבעיות , כאשרCFG: קלט•

כל צומת הוא בלוק בסיסי, או–כל צומת הוא פקודה יחידה–

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

CFG ב-B לכל צומת )out(B ו- )in(B: קבוצות פלט•–in(B(-מתייחסת לנק' שלפני הפקודה הראשונה ב - B–out(B(-מתייחסת לנק' שאחרי הפקודה האחרונה ב - Bמה מכילות הקבוצות?–

תלוי בבעיה - משתנים / השמות / ביטויים וכו'•הערה: בד"כ לאופטימיזציה עצמה נצטרך רק אחת •

משתי הקבוצות, אבל בשביל החישוב צריך את שתיהן

B

in

out

Page 4: תורת הקומפילציה תרגול 13: Data  Flow Analysis

- המשךDFAבעיות

fB מסומנת ע"י in/out על Bההשפעה של •

יכול להוסיף פריטי מידע חדשים לאלה שנכנסו אליו )"ליצור")– יכול להסיר פריטי מידע מאלה שנכנסו אליו )"להרוג")–

שני מרכיבים:fBל-•–gen(B(-דברים שנוצרים ב - B–kill(B(-דברים ש - Bהורג

fB = gen(B( [ X \ kill(B( ]B מסמן קבוצת איברים שנכנסים ל-Xכאשר •

–X = in(B( או X = out(B(תלוי בכיוון זרימת המידע בבעיה•

Page 5: תורת הקומפילציה תרגול 13: Data  Flow Analysis

- המשךDFAבעיות

צורת החישוב - אחת מהשתיים:•סריקה קדמית - המידע "זורם" קדימה–

reaching definitionsלמשל, בחישוב של •

סריקה אחורית - המידע "זורם" אחורה–למשל, בניתוח חיות•

Page 6: תורת הקומפילציה תרגול 13: Data  Flow Analysis

משוואות זרימה - סריקה קדמית

על מה fB מתקבל מהפעלת Bמה שיוצא מ-•שנכנס אליו

בגרף B של מהאבות מתקבל Bמה שנכנס ל-•CFG

בהמשך נראה איך )חיתוך או איחוד)–

out(B( = fB (in(B((

in(B( = out(S( (S,B( CFG

∩או

Page 7: תורת הקומפילציה תרגול 13: Data  Flow Analysis

משוואות זרימה - סריקה אחורית

out ו-inבדיוק כמו בסריקה קדמית, רק ש-•מתחלפים

CFG ב-B של הבניםהפעם, מסתכלים על –

in(B( = fB (out(B((

out(B( = in(D( (B,D( CFG

∩או

Page 8: תורת הקומפילציה תרגול 13: Data  Flow Analysis

משוואות זרימה )out(S לבין קבוצות )in(Bאז איך קובעים יחס בין •

בסריקה קדמית?CFG ב-Bעבור אבות של כנ"ל בסריקה אחורית–איחוד או חיתוך?–

- מנוסחות עם דרישה שצריכה להתקיים mustבעיות •CFG המסלולים ב-כלעל )נראה בהמשך)copy propagationלמשל, –נשתמש בחיתוך–

- מנוסחות עם דרישה שצריכה להתקיים mayבעיות •CFG ב-כלשהועל מסלול

reaching definitionsלמשל, ניתוח חיות ו-–נשתמש באיחוד–

Page 9: תורת הקומפילציה תרגול 13: Data  Flow Analysis

חישוב משוואות הזרימה

המשוואות עשיות ליצור תלויות מעגליות•למשל, במקרה של לולאה–)first, followראינו מקרים כאלה בעבר )–

החישוב יתבצע בצורה איטרטיבית•

Page 10: תורת הקומפילציה תרגול 13: Data  Flow Analysis

חישוב משוואות הזרימה - המשך

בצורה שמרנית)out(B או )in(Bמאתחלים את 1. )איחוד) - לפי מה שמובטח שצריך להיות בפניםmayבעיות •

מה שנכנס באתחול עלול להישאר בתוצאה סופית•אומדן שמרני - קבוצה ריקה )כי רק מוסיפים דברים)•

)חיתוך) - לפי מה שמובטח שלא יהיה בפניםmustבעיות •מה שלא נכנס באתחול עלול לא להופיע בתוצאה סופית•אומדן שמרני - כל פריטי מידע בתכנית )כי רק מורידים דברים)•

לעתים הבלוק הראשון או האחרון בתכנית צריכים טיפול •מיוחד

מחדש לכל out ו-inכל עוד יש שינויים, מחשבים 2.הבלוקים בתכנית לפי משוואות הזרימה

לפי סדר כלשהו•

Page 11: תורת הקומפילציה תרגול 13: Data  Flow Analysis

DFAסיווג בעיות

הצירוף של שני הפרמטרים האלה קובע את •צורת משאוות הזרימה

הינו סיווג DFAהחלק המכריע בפתרון בעיית •נכון של הבעיה

כיוון זרימה /סוג הבעיה

קדמית אחורית

maymust

Page 12: תורת הקומפילציה תרגול 13: Data  Flow Analysis

Copy Propagationדוגמה - y ב-x, נחליף את x:=yהרעיון: אחרי העתקה •

xבמקומות בהם משתמשים ב-דוגמה:•

a := b a := bc := a + d c := b + de := c * a e := c * b

מה הרווחנו?•, נוכל למחוק x:=y לא יהיה חי אחרי הפקודה xאם –

את הפקודה

Page 13: תורת הקומפילציה תרגול 13: Data  Flow Analysis

Copy Propagationהמשך - מכיל פקודה יחידהCFGנניח כי כל צומת ב-•מתי אסור לבצע את ההחלפה?•

p שמגיעה ל-s שאינה xיש הגדרה של 1.

מוגדר מחדשy שעליו p ל-sיש מסלול בין 2.

שאינו עובר pיש מסלול מהצומת התחילי ל-3.sב-

y… =:x:= …

x:=y

xשימוש ב-

S:

p:

CFGבלוק ראשון ב-B0:

Page 14: תורת הקומפילציה תרגול 13: Data  Flow Analysis

Copy Propagationהמשך - מהי מטרת החישוב?•

כך שאם רואים בנקודה x:=yכל פקודות ההעתקה –y, מותר להחליף אותו ב-xבתכנית שימוש ב-

?in/outמהם פריטי מידע בקבוצות •פקודות ההעתקה שמופיעות בתכנית –

מהו כיוון זרימת המידע? )קדמית / אחורית)•קדמית, כי כל העתקה "משפיעה קדימה"–

y ב-x מותר להחליף את x:=yאחרי העתקה •

Page 15: תורת הקומפילציה תרגול 13: Data  Flow Analysis

Copy Propagationהמשך - ?)gen(Bמהו •

B אם מופיעה ב-x:=yפקודות העתקה –y ב-x מותר להחליף את x:=yמייד אחרי הפקודה •

?)kill(Bמהו • כך ש:x:=yהעתקות –

•B-מכיל כתיבה )אחרת) ל x 1 )מקרה(•B-מכיל כתיבה ל y 2 )מקרה(

בנפרד3נטפל במקרה –

Page 16: תורת הקומפילציה תרגול 13: Data  Flow Analysis

Copy Propagationהמשך -

)may / mustמהו סוג הבעיה? )•, כי מספיק שיהיה מסלול אחד "רע" mustבעיית –

כדי שלא נוכל לבצע החלפה המסלולים צריכים לקיים את הדרישותכל•

משוואות הזרימה:•

, זרימה קדמיתmustבעיית –

out(B( = fB (in(B((

in(B( = ∩ out(S( (S,B( CFG

Page 17: תורת הקומפילציה תרגול 13: Data  Flow Analysis

Copy Propagationהמשך -

איך נאתחל את הקבוצות?•mustבצורה שמרנית המתאימה לבעיית –:B0לכל בלוק פרט ל-–

:B0עבור –

out ו-inמספיק לאתחל רק אחת מבין הקבוצות –

in(B( = out(B( = כל ההעתקות בתכנית

in(B( = Øout(B0( = gen(B0( ( = fB0(Ø( (

Page 18: תורת הקומפילציה תרגול 13: Data  Flow Analysis

Copy Propagationהמשך -

מדוע יש טיפול מיוחד בבלוק הראשון?•!3בגלל מקרה •

x:=y, ההעתקה y ב-xצריך לוודא שאם מחליפים –Boנמצאת על כל מסלול מ-

CFG אין אבות ב-Boל-– באיתחול, ישאר שם עד )in/out(Bכל דבר שנכניס ל-•

הסוף ויחלחל לבניםלא נצליח לזהות העתקות שאינן נמצאות על מסלול •

B0מ-

לנק' B0ההעתקה היחידה שנמצאת על כל מסלול מ-•out(B0(-היא ההעתקה המופיעה ב B0(אם יש כזו(

Page 19: תורת הקומפילציה תרגול 13: Data  Flow Analysis

שאלה ממבחן מסלול חישוב בכל אם p הוא חיוני בנקודה xמשתנה •

לפני שמתבצעת אליו x מתבצעת הדפסה לפלט של pמ-כתיבה.

לדוגמא:•y=3;x=6;print x;y=5;print y;

x ,חיוני y אינו חיוני

yחיוני

Page 20: תורת הקומפילציה תרגול 13: Data  Flow Analysis

שאלה ממבחן?in/outא. מהם הקבוצות

יגדירו את קבוצת המשתנים החיוניים בכניסה/יציאה מהבלוק.–פריטי המידע: כל המשתנים בתכנית.–

ב. כיוון זרימת המידע:אחורית: בכל נקודה, הדפסת המשתנה תהפוך אותו לחיוני, –

והשמה למשתנה תבטל את היותו חיוני.

)may / mustג. מהו סוג הבעיה? ), כי נדרש שבכל אחד מהמסלולים תהיה הדפסה mustבעיית –

לפני השמה.

out(B( = ∩ in(D( (B,D( CFG

Page 21: תורת הקומפילציה תרגול 13: Data  Flow Analysis

שאלה ממבחן

?)gen(Bד. מהו Bכל המשתנים שמודפסים ב-– אין לתוכם השמה, או שכל ההשמות לתוכם וגם–

מופיעות לאחר פקודת הדפסה שלהם.

?)kill(B מהו .Bכל המשתנים שנכתב אליהם ערך ב-–האם צריך "וגם אין הדפסה שלהם לפני הכתיבה"?–

)gen(Bלא חייבים, כי ממילא משתנים אלה יופיעו ב-• .fBולכן גם ב-

Page 22: תורת הקומפילציה תרגול 13: Data  Flow Analysis

שאלה ממבחןמשוואות הזרימה:•

ה. איך נאתחל את הקבוצות?:mustאתחול שמרני עבור בעיית –

לו אין קשתות יוצאות:Bfinנניח צומת סיום יחיד, •

: Bfin שאינו CFG ב Bלכל בלוק •

in(B( = fB (out(B(( = gen(B( [ out(B( \ kill(B( ]

out(B( = ∩ in(D( (B,D( CFG

in(B( = U , out(B( = Uסימון לכל המשתנים

בתוכנית

out(Bfin( = Ø, in(Bfin( = gen(Bfin (

Page 23: תורת הקומפילציה תרגול 13: Data  Flow Analysis

-חיּות2ניתוח בתכנית אם קיים מסלול p בנקודה חי הוא xתזכורת: משתנה •

) לפני הגדרה מחודשת x )קריאת ערך x בו יש שימוש ב-pמ-).x)כתיבה מחדש ל-

בתכנית אם קיים מסלול p בנקודה -חי2 הוא xנגדיר: משתנה • לפחות לפני הגדרה מחודשת.x בו יש שני שימושים ב-pמ-

חיים בכניסה/יציאה 2 – קבוצת המשתנים ה-)in2(B(,out2(Bא. מהבלוק.

ב. זרימה אחורית – בדומה לניתוח חיּות.

– מספיק מסלול אחד שיקיים את התכונה.mayג. בעיית

Page 24: תורת הקומפילציה תרגול 13: Data  Flow Analysis

-חיּות - המשך2ניתוח ?)in2(Bאילו משתנים נרצה שיופיעו ב •

עבורו אין הגדרה מחודשת )out2 (Bכל משתנה ב- 1..Bב-

לפני Bכל משתנה עם לפחות שני שימושים ב-2.הגדרה מחודשת.

B, הוא חי ביציאה מ-Bיש לו שימוש ב-כל משתנה ש3..Bולא הוגדר מחדש ב-

?)gen(Bמהו ד. נבצע B כדי למצוא את המשתנים החיים ביציאה מ-–

הרצה מקדימה של ניתוח חיּות.

?)kill(Bמהו .B כל המשתנים שנכתב אליהם ערך ב-–

Page 25: תורת הקומפילציה תרגול 13: Data  Flow Analysis

-חיּות - המשך2ניתוח kill(B( = { x | B משתנה שהוגדר מחדש ב- x {gen1(B( = { x | שני שימושים בבלוק לפני הגדרה מחודשת x

ל}gen2(B( = { x | יש שימוש בבלוק ואין הגדרה מחודשת x {ל

ה. אתחול הקבוצות: B, in2(B( = out2(B( = Ø

in2(B( = gen2 (B( [out2(B(\kill(B(]= ( gen1(B( [gen2(B(∩out1(B(] ( [out2(B(\kill(B(]

out2(B( = in2(D( (B,D( CFG שהתקבלה outהקבוצה

מההרצה המוקדמת של ניתוח החיּות

Page 26: תורת הקומפילציה תרגול 13: Data  Flow Analysis

-חיּותkניתוח יופיעו המשתנים הבאים:)ink(Bבצורה דומה ב •

.B עבורו אין הגדרה מחודשת ב-)outk(B. כל משתנה ב- 1 B עם לפחות שימוש אחד ב-)outk-1(B. כל משתנה ב-2

.Bואשר עבורו אין הגדרה מחודשת ב-....k-כל משתנה בout1(B( עם לפחות k-1-שימושים ב B

.Bואשר עבורו אין הגדרה מחודשת ב-k+1 כל משתנה עם .k-שימושים ב B לפני הגדרה

מחודשת.מדוע האנליזה שימושית?•

ככל שיש יותר שימושים למשתנה, תגדל המוטיבציה –לשמור אותו ברג'יסטר ולא בזיכרון.

Page 27: תורת הקומפילציה תרגול 13: Data  Flow Analysis

– הדוגמאות DFAסיווג בעיות שראינו

כיוון זרימה /סוג הבעיה

קדמית אחורית

may Reaching Definition)בהרצאה)

ניתוח חיּות

must Copy Propagation

ניתוח חיוניות

Page 28: תורת הקומפילציה תרגול 13: Data  Flow Analysis

סיכום

מה משתנה בעקבות ההנחה על ייצוג צמתים • )בלוק בסיסי / פקודה בודדת)?CFGב-משואות הזרימה אתחול הקבוצותin / out פונקציותgen-ו kill

הצורה בה פתרנו את השאלות לפי סדר •השאלות ששאלנו הינה מתכון לפתרון כל

DFAשאלות ה-