תורת הקומפילציה תרגול 13: data flow analysis
DESCRIPTION
תורת הקומפילציה תרגול 13: Data Flow Analysis. נכתב ע"י אלכס קוגן ( ( sakogan@cs סמסטר חורף, תשס"ח עודכן: סמסטר אביב 2012. מוטיבציה. על מנת לבצע אופטימיזציות רבות, נדרש חישוב גלובלי כדי לזהות את כל הפקודות / משתנים / ביטויים אשר מקיימים תכונה מסוימת בנקודה מסוימת בתכנית. לדוגמא: - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/1.jpg)
תורת הקומפילציה13תרגול :
Data Flow Analysis
sakogan@cs)נכתב ע"י אלכס קוגן )סמסטר חורף, תשס"ח
2012עודכן: סמסטר אביב
![Page 2: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/2.jpg)
מוטיבציהעל מנת לבצע אופטימיזציות רבות, נדרש •
חישוב גלובלי כדי לזהות את כל הפקודות / משתנים / ביטויים אשר מקיימים תכונה
מסוימת בנקודה מסוימת בתכנית.
לדוגמא:•.Dead Code Eliminationניתוח חיּות – לטובת –.Copy Propagation – לטובת aliasingניתוח –
![Page 3: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/3.jpg)
DFAבעיות , כאשרCFG: קלט•
כל צומת הוא בלוק בסיסי, או–כל צומת הוא פקודה יחידה–
הופך את הניתוח ברמה של צומת לפשוט יותר•מגדיל סיבוכיות זמן ומקום•
CFG ב-B לכל צומת )out(B ו- )in(B: קבוצות פלט•–in(B(-מתייחסת לנק' שלפני הפקודה הראשונה ב - B–out(B(-מתייחסת לנק' שאחרי הפקודה האחרונה ב - Bמה מכילות הקבוצות?–
תלוי בבעיה - משתנים / השמות / ביטויים וכו'•הערה: בד"כ לאופטימיזציה עצמה נצטרך רק אחת •
משתי הקבוצות, אבל בשביל החישוב צריך את שתיהן
B
in
out
![Page 4: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/4.jpg)
- המשך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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/5.jpg)
- המשךDFAבעיות
צורת החישוב - אחת מהשתיים:•סריקה קדמית - המידע "זורם" קדימה–
reaching definitionsלמשל, בחישוב של •
סריקה אחורית - המידע "זורם" אחורה–למשל, בניתוח חיות•
![Page 6: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/6.jpg)
משוואות זרימה - סריקה קדמית
על מה fB מתקבל מהפעלת Bמה שיוצא מ-•שנכנס אליו
בגרף B של מהאבות מתקבל Bמה שנכנס ל-•CFG
בהמשך נראה איך )חיתוך או איחוד)–
out(B( = fB (in(B((
in(B( = out(S( (S,B( CFG
∩או
![Page 7: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/7.jpg)
משוואות זרימה - סריקה אחורית
out ו-inבדיוק כמו בסריקה קדמית, רק ש-•מתחלפים
CFG ב-B של הבניםהפעם, מסתכלים על –
in(B( = fB (out(B((
out(B( = in(D( (B,D( CFG
∩או
![Page 8: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/8.jpg)
משוואות זרימה )out(S לבין קבוצות )in(Bאז איך קובעים יחס בין •
בסריקה קדמית?CFG ב-Bעבור אבות של כנ"ל בסריקה אחורית–איחוד או חיתוך?–
- מנוסחות עם דרישה שצריכה להתקיים mustבעיות •CFG המסלולים ב-כלעל )נראה בהמשך)copy propagationלמשל, –נשתמש בחיתוך–
- מנוסחות עם דרישה שצריכה להתקיים mayבעיות •CFG ב-כלשהועל מסלול
reaching definitionsלמשל, ניתוח חיות ו-–נשתמש באיחוד–
![Page 9: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/9.jpg)
חישוב משוואות הזרימה
המשוואות עשיות ליצור תלויות מעגליות•למשל, במקרה של לולאה–)first, followראינו מקרים כאלה בעבר )–
החישוב יתבצע בצורה איטרטיבית•
![Page 10: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/10.jpg)
חישוב משוואות הזרימה - המשך
בצורה שמרנית)out(B או )in(Bמאתחלים את 1. )איחוד) - לפי מה שמובטח שצריך להיות בפניםmayבעיות •
מה שנכנס באתחול עלול להישאר בתוצאה סופית•אומדן שמרני - קבוצה ריקה )כי רק מוסיפים דברים)•
)חיתוך) - לפי מה שמובטח שלא יהיה בפניםmustבעיות •מה שלא נכנס באתחול עלול לא להופיע בתוצאה סופית•אומדן שמרני - כל פריטי מידע בתכנית )כי רק מורידים דברים)•
לעתים הבלוק הראשון או האחרון בתכנית צריכים טיפול •מיוחד
מחדש לכל out ו-inכל עוד יש שינויים, מחשבים 2.הבלוקים בתכנית לפי משוואות הזרימה
לפי סדר כלשהו•
![Page 11: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/11.jpg)
DFAסיווג בעיות
הצירוף של שני הפרמטרים האלה קובע את •צורת משאוות הזרימה
הינו סיווג DFAהחלק המכריע בפתרון בעיית •נכון של הבעיה
כיוון זרימה /סוג הבעיה
קדמית אחורית
maymust
![Page 12: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/14.jpg)
Copy Propagationהמשך - מהי מטרת החישוב?•
כך שאם רואים בנקודה x:=yכל פקודות ההעתקה –y, מותר להחליף אותו ב-xבתכנית שימוש ב-
?in/outמהם פריטי מידע בקבוצות •פקודות ההעתקה שמופיעות בתכנית –
מהו כיוון זרימת המידע? )קדמית / אחורית)•קדמית, כי כל העתקה "משפיעה קדימה"–
y ב-x מותר להחליף את x:=yאחרי העתקה •
![Page 15: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/16.jpg)
Copy Propagationהמשך -
)may / mustמהו סוג הבעיה? )•, כי מספיק שיהיה מסלול אחד "רע" mustבעיית –
כדי שלא נוכל לבצע החלפה המסלולים צריכים לקיים את הדרישותכל•
משוואות הזרימה:•
, זרימה קדמיתmustבעיית –
out(B( = fB (in(B((
in(B( = ∩ out(S( (S,B( CFG
![Page 17: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/17.jpg)
Copy Propagationהמשך -
איך נאתחל את הקבוצות?•mustבצורה שמרנית המתאימה לבעיית –:B0לכל בלוק פרט ל-–
:B0עבור –
out ו-inמספיק לאתחל רק אחת מבין הקבוצות –
in(B( = out(B( = כל ההעתקות בתכנית
in(B( = Øout(B0( = gen(B0( ( = fB0(Ø( (
![Page 18: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/18.jpg)
Copy Propagationהמשך -
מדוע יש טיפול מיוחד בבלוק הראשון?•!3בגלל מקרה •
x:=y, ההעתקה y ב-xצריך לוודא שאם מחליפים –Boנמצאת על כל מסלול מ-
CFG אין אבות ב-Boל-– באיתחול, ישאר שם עד )in/out(Bכל דבר שנכניס ל-•
הסוף ויחלחל לבניםלא נצליח לזהות העתקות שאינן נמצאות על מסלול •
B0מ-
לנק' B0ההעתקה היחידה שנמצאת על כל מסלול מ-•out(B0(-היא ההעתקה המופיעה ב B0(אם יש כזו(
![Page 19: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/19.jpg)
שאלה ממבחן מסלול חישוב בכל אם p הוא חיוני בנקודה xמשתנה •
לפני שמתבצעת אליו x מתבצעת הדפסה לפלט של pמ-כתיבה.
לדוגמא:•y=3;x=6;print x;y=5;print y;
x ,חיוני y אינו חיוני
yחיוני
![Page 20: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/20.jpg)
שאלה ממבחן?in/outא. מהם הקבוצות
יגדירו את קבוצת המשתנים החיוניים בכניסה/יציאה מהבלוק.–פריטי המידע: כל המשתנים בתכנית.–
ב. כיוון זרימת המידע:אחורית: בכל נקודה, הדפסת המשתנה תהפוך אותו לחיוני, –
והשמה למשתנה תבטל את היותו חיוני.
)may / mustג. מהו סוג הבעיה? ), כי נדרש שבכל אחד מהמסלולים תהיה הדפסה mustבעיית –
לפני השמה.
out(B( = ∩ in(D( (B,D( CFG
![Page 21: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/21.jpg)
שאלה ממבחן
?)gen(Bד. מהו Bכל המשתנים שמודפסים ב-– אין לתוכם השמה, או שכל ההשמות לתוכם וגם–
מופיעות לאחר פקודת הדפסה שלהם.
?)kill(B מהו .Bכל המשתנים שנכתב אליהם ערך ב-–האם צריך "וגם אין הדפסה שלהם לפני הכתיבה"?–
)gen(Bלא חייבים, כי ממילא משתנים אלה יופיעו ב-• .fBולכן גם ב-
![Page 22: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/22.jpg)
שאלה ממבחןמשוואות הזרימה:•
ה. איך נאתחל את הקבוצות?: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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/23.jpg)
-חיּות2ניתוח בתכנית אם קיים מסלול p בנקודה חי הוא xתזכורת: משתנה •
) לפני הגדרה מחודשת x )קריאת ערך x בו יש שימוש ב-pמ-).x)כתיבה מחדש ל-
בתכנית אם קיים מסלול p בנקודה -חי2 הוא xנגדיר: משתנה • לפחות לפני הגדרה מחודשת.x בו יש שני שימושים ב-pמ-
חיים בכניסה/יציאה 2 – קבוצת המשתנים ה-)in2(B(,out2(Bא. מהבלוק.
ב. זרימה אחורית – בדומה לניתוח חיּות.
– מספיק מסלול אחד שיקיים את התכונה.mayג. בעיית
![Page 24: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/24.jpg)
-חיּות - המשך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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/25.jpg)
-חיּות - המשך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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/26.jpg)
-חיּות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](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/27.jpg)
– הדוגמאות DFAסיווג בעיות שראינו
כיוון זרימה /סוג הבעיה
קדמית אחורית
may Reaching Definition)בהרצאה)
ניתוח חיּות
must Copy Propagation
ניתוח חיוניות
![Page 28: תורת הקומפילציה תרגול 13: Data Flow Analysis](https://reader031.vdocuments.mx/reader031/viewer/2022012323/56814cf7550346895dba0200/html5/thumbnails/28.jpg)
סיכום
מה משתנה בעקבות ההנחה על ייצוג צמתים • )בלוק בסיסי / פקודה בודדת)?CFGב-משואות הזרימה אתחול הקבוצותin / out פונקציותgen-ו kill
הצורה בה פתרנו את השאלות לפי סדר •השאלות ששאלנו הינה מתכון לפתרון כל
DFAשאלות ה-