Upload
tahlia
View
73
Download
9
Embed Size (px)
DESCRIPTION
תורת הקומפילציה תרגול 13: Data Flow Analysis. נכתב ע"י אלכס קוגן ( ( sakogan@cs סמסטר חורף, תשס"ח עודכן: סמסטר אביב 2012. מוטיבציה. על מנת לבצע אופטימיזציות רבות, נדרש חישוב גלובלי כדי לזהות את כל הפקודות / משתנים / ביטויים אשר מקיימים תכונה מסוימת בנקודה מסוימת בתכנית. לדוגמא: - PowerPoint PPT Presentation
Citation preview
תורת הקומפילציה13תרגול :
Data Flow Analysis
sakogan@cs)נכתב ע"י אלכס קוגן )סמסטר חורף, תשס"ח
2012עודכן: סמסטר אביב
מוטיבציהעל מנת לבצע אופטימיזציות רבות, נדרש •
חישוב גלובלי כדי לזהות את כל הפקודות / משתנים / ביטויים אשר מקיימים תכונה
מסוימת בנקודה מסוימת בתכנית.
לדוגמא:•.Dead Code Eliminationניתוח חיּות – לטובת –.Copy Propagation – לטובת aliasingניתוח –
DFAבעיות , כאשרCFG: קלט•
כל צומת הוא בלוק בסיסי, או–כל צומת הוא פקודה יחידה–
הופך את הניתוח ברמה של צומת לפשוט יותר•מגדיל סיבוכיות זמן ומקום•
CFG ב-B לכל צומת )out(B ו- )in(B: קבוצות פלט•–in(B(-מתייחסת לנק' שלפני הפקודה הראשונה ב - B–out(B(-מתייחסת לנק' שאחרי הפקודה האחרונה ב - Bמה מכילות הקבוצות?–
תלוי בבעיה - משתנים / השמות / ביטויים וכו'•הערה: בד"כ לאופטימיזציה עצמה נצטרך רק אחת •
משתי הקבוצות, אבל בשביל החישוב צריך את שתיהן
B
in
out
- המשך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(תלוי בכיוון זרימת המידע בבעיה•
- המשךDFAבעיות
צורת החישוב - אחת מהשתיים:•סריקה קדמית - המידע "זורם" קדימה–
reaching definitionsלמשל, בחישוב של •
סריקה אחורית - המידע "זורם" אחורה–למשל, בניתוח חיות•
משוואות זרימה - סריקה קדמית
על מה fB מתקבל מהפעלת Bמה שיוצא מ-•שנכנס אליו
בגרף B של מהאבות מתקבל Bמה שנכנס ל-•CFG
בהמשך נראה איך )חיתוך או איחוד)–
out(B( = fB (in(B((
in(B( = out(S( (S,B( CFG
∩או
משוואות זרימה - סריקה אחורית
out ו-inבדיוק כמו בסריקה קדמית, רק ש-•מתחלפים
CFG ב-B של הבניםהפעם, מסתכלים על –
in(B( = fB (out(B((
out(B( = in(D( (B,D( CFG
∩או
משוואות זרימה )out(S לבין קבוצות )in(Bאז איך קובעים יחס בין •
בסריקה קדמית?CFG ב-Bעבור אבות של כנ"ל בסריקה אחורית–איחוד או חיתוך?–
- מנוסחות עם דרישה שצריכה להתקיים mustבעיות •CFG המסלולים ב-כלעל )נראה בהמשך)copy propagationלמשל, –נשתמש בחיתוך–
- מנוסחות עם דרישה שצריכה להתקיים mayבעיות •CFG ב-כלשהועל מסלול
reaching definitionsלמשל, ניתוח חיות ו-–נשתמש באיחוד–
חישוב משוואות הזרימה
המשוואות עשיות ליצור תלויות מעגליות•למשל, במקרה של לולאה–)first, followראינו מקרים כאלה בעבר )–
החישוב יתבצע בצורה איטרטיבית•
חישוב משוואות הזרימה - המשך
בצורה שמרנית)out(B או )in(Bמאתחלים את 1. )איחוד) - לפי מה שמובטח שצריך להיות בפניםmayבעיות •
מה שנכנס באתחול עלול להישאר בתוצאה סופית•אומדן שמרני - קבוצה ריקה )כי רק מוסיפים דברים)•
)חיתוך) - לפי מה שמובטח שלא יהיה בפניםmustבעיות •מה שלא נכנס באתחול עלול לא להופיע בתוצאה סופית•אומדן שמרני - כל פריטי מידע בתכנית )כי רק מורידים דברים)•
לעתים הבלוק הראשון או האחרון בתכנית צריכים טיפול •מיוחד
מחדש לכל out ו-inכל עוד יש שינויים, מחשבים 2.הבלוקים בתכנית לפי משוואות הזרימה
לפי סדר כלשהו•
DFAסיווג בעיות
הצירוף של שני הפרמטרים האלה קובע את •צורת משאוות הזרימה
הינו סיווג DFAהחלק המכריע בפתרון בעיית •נכון של הבעיה
כיוון זרימה /סוג הבעיה
קדמית אחורית
maymust
Copy Propagationדוגמה - y ב-x, נחליף את x:=yהרעיון: אחרי העתקה •
xבמקומות בהם משתמשים ב-דוגמה:•
a := b a := bc := a + d c := b + de := c * a e := c * b
מה הרווחנו?•, נוכל למחוק x:=y לא יהיה חי אחרי הפקודה xאם –
את הפקודה
Copy Propagationהמשך - מכיל פקודה יחידהCFGנניח כי כל צומת ב-•מתי אסור לבצע את ההחלפה?•
p שמגיעה ל-s שאינה xיש הגדרה של 1.
מוגדר מחדשy שעליו p ל-sיש מסלול בין 2.
שאינו עובר pיש מסלול מהצומת התחילי ל-3.sב-
y… =:x:= …
x:=y
xשימוש ב-
S:
p:
CFGבלוק ראשון ב-B0:
Copy Propagationהמשך - מהי מטרת החישוב?•
כך שאם רואים בנקודה x:=yכל פקודות ההעתקה –y, מותר להחליף אותו ב-xבתכנית שימוש ב-
?in/outמהם פריטי מידע בקבוצות •פקודות ההעתקה שמופיעות בתכנית –
מהו כיוון זרימת המידע? )קדמית / אחורית)•קדמית, כי כל העתקה "משפיעה קדימה"–
y ב-x מותר להחליף את x:=yאחרי העתקה •
Copy Propagationהמשך - ?)gen(Bמהו •
B אם מופיעה ב-x:=yפקודות העתקה –y ב-x מותר להחליף את x:=yמייד אחרי הפקודה •
?)kill(Bמהו • כך ש:x:=yהעתקות –
•B-מכיל כתיבה )אחרת) ל x 1 )מקרה(•B-מכיל כתיבה ל y 2 )מקרה(
בנפרד3נטפל במקרה –
Copy Propagationהמשך -
)may / mustמהו סוג הבעיה? )•, כי מספיק שיהיה מסלול אחד "רע" mustבעיית –
כדי שלא נוכל לבצע החלפה המסלולים צריכים לקיים את הדרישותכל•
משוואות הזרימה:•
, זרימה קדמיתmustבעיית –
out(B( = fB (in(B((
in(B( = ∩ out(S( (S,B( CFG
Copy Propagationהמשך -
איך נאתחל את הקבוצות?•mustבצורה שמרנית המתאימה לבעיית –:B0לכל בלוק פרט ל-–
:B0עבור –
out ו-inמספיק לאתחל רק אחת מבין הקבוצות –
in(B( = out(B( = כל ההעתקות בתכנית
in(B( = Øout(B0( = gen(B0( ( = fB0(Ø( (
Copy Propagationהמשך -
מדוע יש טיפול מיוחד בבלוק הראשון?•!3בגלל מקרה •
x:=y, ההעתקה y ב-xצריך לוודא שאם מחליפים –Boנמצאת על כל מסלול מ-
CFG אין אבות ב-Boל-– באיתחול, ישאר שם עד )in/out(Bכל דבר שנכניס ל-•
הסוף ויחלחל לבניםלא נצליח לזהות העתקות שאינן נמצאות על מסלול •
B0מ-
לנק' B0ההעתקה היחידה שנמצאת על כל מסלול מ-•out(B0(-היא ההעתקה המופיעה ב B0(אם יש כזו(
שאלה ממבחן מסלול חישוב בכל אם p הוא חיוני בנקודה xמשתנה •
לפני שמתבצעת אליו x מתבצעת הדפסה לפלט של pמ-כתיבה.
לדוגמא:•y=3;x=6;print x;y=5;print y;
x ,חיוני y אינו חיוני
yחיוני
שאלה ממבחן?in/outא. מהם הקבוצות
יגדירו את קבוצת המשתנים החיוניים בכניסה/יציאה מהבלוק.–פריטי המידע: כל המשתנים בתכנית.–
ב. כיוון זרימת המידע:אחורית: בכל נקודה, הדפסת המשתנה תהפוך אותו לחיוני, –
והשמה למשתנה תבטל את היותו חיוני.
)may / mustג. מהו סוג הבעיה? ), כי נדרש שבכל אחד מהמסלולים תהיה הדפסה mustבעיית –
לפני השמה.
out(B( = ∩ in(D( (B,D( CFG
שאלה ממבחן
?)gen(Bד. מהו Bכל המשתנים שמודפסים ב-– אין לתוכם השמה, או שכל ההשמות לתוכם וגם–
מופיעות לאחר פקודת הדפסה שלהם.
?)kill(B מהו .Bכל המשתנים שנכתב אליהם ערך ב-–האם צריך "וגם אין הדפסה שלהם לפני הכתיבה"?–
)gen(Bלא חייבים, כי ממילא משתנים אלה יופיעו ב-• .fBולכן גם ב-
שאלה ממבחןמשוואות הזרימה:•
ה. איך נאתחל את הקבוצות?: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 (
-חיּות2ניתוח בתכנית אם קיים מסלול p בנקודה חי הוא xתזכורת: משתנה •
) לפני הגדרה מחודשת x )קריאת ערך x בו יש שימוש ב-pמ-).x)כתיבה מחדש ל-
בתכנית אם קיים מסלול p בנקודה -חי2 הוא xנגדיר: משתנה • לפחות לפני הגדרה מחודשת.x בו יש שני שימושים ב-pמ-
חיים בכניסה/יציאה 2 – קבוצת המשתנים ה-)in2(B(,out2(Bא. מהבלוק.
ב. זרימה אחורית – בדומה לניתוח חיּות.
– מספיק מסלול אחד שיקיים את התכונה.mayג. בעיית
-חיּות - המשך2ניתוח ?)in2(Bאילו משתנים נרצה שיופיעו ב •
עבורו אין הגדרה מחודשת )out2 (Bכל משתנה ב- 1..Bב-
לפני Bכל משתנה עם לפחות שני שימושים ב-2.הגדרה מחודשת.
B, הוא חי ביציאה מ-Bיש לו שימוש ב-כל משתנה ש3..Bולא הוגדר מחדש ב-
?)gen(Bמהו ד. נבצע B כדי למצוא את המשתנים החיים ביציאה מ-–
הרצה מקדימה של ניתוח חיּות.
?)kill(Bמהו .B כל המשתנים שנכתב אליהם ערך ב-–
-חיּות - המשך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הקבוצה
מההרצה המוקדמת של ניתוח החיּות
-חיּותkניתוח יופיעו המשתנים הבאים:)ink(Bבצורה דומה ב •
.B עבורו אין הגדרה מחודשת ב-)outk(B. כל משתנה ב- 1 B עם לפחות שימוש אחד ב-)outk-1(B. כל משתנה ב-2
.Bואשר עבורו אין הגדרה מחודשת ב-....k-כל משתנה בout1(B( עם לפחות k-1-שימושים ב B
.Bואשר עבורו אין הגדרה מחודשת ב-k+1 כל משתנה עם .k-שימושים ב B לפני הגדרה
מחודשת.מדוע האנליזה שימושית?•
ככל שיש יותר שימושים למשתנה, תגדל המוטיבציה –לשמור אותו ברג'יסטר ולא בזיכרון.
– הדוגמאות DFAסיווג בעיות שראינו
כיוון זרימה /סוג הבעיה
קדמית אחורית
may Reaching Definition)בהרצאה)
ניתוח חיּות
must Copy Propagation
ניתוח חיוניות
סיכום
מה משתנה בעקבות ההנחה על ייצוג צמתים • )בלוק בסיסי / פקודה בודדת)?CFGב-משואות הזרימה אתחול הקבוצותin / out פונקציותgen-ו kill
הצורה בה פתרנו את השאלות לפי סדר •השאלות ששאלנו הינה מתכון לפתרון כל
DFAשאלות ה-