ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
ได้พิมพ์โดยTraikun Ratana ได้เปลี่ยน 10 ปีที่แล้ว
1
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย
2
Ordering Top bottom และ ค่าคงที่ c คือ abstract value – ค่าที่เราใช้แทนเซ็ทของ concrete value ที่เป็นไปได้ ณ เวลาที่โปรแกรม ทำงาน ในกรอบการวิเคราะห์ dataflow เราจะมีการกำหนดลำดับขั้น (ordering) ของ value – เช่นในกรณีของ constant propagation เราให้ว่า ⊥ < c < T ภาพของ ordering ใน constant propagation สามารถเขียนได้ตามรูป ด้านล่าง โดยค่าที่ต่ำที่สุดจะอยู่ในตำแหน่งล่างที่สุด – ค่าคงที่ c ที่เป็นไปได้ทุกๆค่าอยู่ในลำดับเดียวกัน ⊥ T
3
Ordering T คือค่าที่มากที่สุด⊥ คือค่าที่น้อยที่สุด – ค่าคงที่ที่เป็นไปได้ที่อยู่ระหว่างสองค่านี้มีศักย์เสมอ กัน – เรียกว่า incomparable ให้ lub คือค่า least-upper bound ของ ordering นี้ กฏ 1-4 ของ constant propagation สามารถ เขียนในรูป lub ได้ดังนี้ : – C(s, x, in) = lub { C(p, x, out) | p is a predecessor of s }
4
Termination การที่เรามี lub และ ordering จะช่วยเราในการ ให้เหตุผลการมีจุดจบ (termination) ของ อัลกอริทึมที่ใช้ – อัลกอริทึมของ CP เราบอกอย่างหลวมๆว่าให้ทำซ้ำ กฏทั้งหมดจน “ ไม่มีอะไรเปลี่ยนแปลง ” – นั่นไม่ได้ยืนยันว่าในที่สุดจะ “ ไม่มีอะไร เปลี่ยนแปลง ” ค่าในการวิเคราะห์ CP จะเริ่มจาก ⊥ และเพิ่มขึ้น เรื่อยๆ ⊥ เปลี่ยนเป็นค่าคงที่และค่าคงที่เปลี่ยนเป็น T เพราะฉะนั้น C(s, x, in) และ C(s, x, out) จะ เปลี่ยนได้อย่างมากสองครั้ง
5
Termination ดังนั้นอัลกอริทึมจะมี runtime เป็น O(n) โดยที่ n คือขนาดของโปรแกรม ( จำนวนคำสั่ง ) จำนวนขั้นตอนการคำนวณ – = จำนวน C(…) * 2 – = จำนวนคำสั่ง * 4
6
Liveness Analysis หลังจากทำ constant propagation เราสามารถกำจัดคำสั่ง X := 3 ได้หรือไม่ กำจัดได้ถ้า X := 3 เป็นค่าที dead นั่นคือ X ไม่มีการใช้งาน ( อ่าน ) หลังจากนี้
7
Live กับ Dead ค่า X ค่าแรก dead เพราะไม่เคยมีการใช้ ค่า X ที่สอง live เพราะ อาจจะมีการใช้ ณ ที่แห่ง ใดในโปรแกรม คุณสมบัติของ X ใน ลักษณะที่บอกว่า ตำแหน่งใด live หรือ dead เรียกว่า liveness
8
Liveness ตัวแปร x จะ live ที่คำสั่ง s ถ้า – ถ้ามีคำสั่ง s’ ที่ใช้ x – มี path จาก s ไปที่ s’ – Path นี้ไม่มีคำสั่งที่ reassign ค่า x คำสั่ง x := … จะเป็น dead code ถ้า x นั้น dead หลังจากคำสั่งนี้ Dead code สามารถจะลบออกไปได้จากโปรแกรม แต่การจะบอกได้ว่าตัวแปรใด live หรือ dead เรา จะต้องทำการวิเคราะห์หาข้อมูล liveness
9
การคำนวณ Liveness เราจะคำนวณ liveness โดยใช้หลักการ เช่นเดียวกับ constant propagation – เราจะดูในระดับคำสั่งและพิจารณาข้อมูลที่ส่งผ่าน จาก in ของคำสั่งไปที่ out ของคำสั่งนั้น ในการคำนวณ liveness เราจะพิจารณา คุณสมบัติ live หรือ dead ของตัวแปร – มีความเป็นไปได้เพียงสองค่า – แทนคุณสมบัตินี้ด้วยค่า boolean (true หรือ false) – “ ง่าย ” กว่า constant propagation
10
กฎที่ 1
11
กฎที่ 2
12
กฎที่ 3
13
กฎที่ 4
14
อัลกอริทึมในการคำนวณ Liveness 1. ให้ค่า liveness L(…) ทุกๆตำแหน่งเป็น false ใน ตอนเริ่มต้น 2. ทำซ้ำจนกว่าทุกๆคำสั่ง s ในโปรแกรมจะ เป็นไปตามกฏ 1-4 ของ liveness ถ้ายังมีคำสั่ง ใดๆไม่เป็นไปตามนี้ เลือกคำสั่งนั้นและคำนวณ liveness โดยใช้กฏที่ได้กล่าวมา
15
ตัวอย่างการคำนวณ Liveness ของ ตัวแปร x x = 0; A: x = x + 1; if (x != 10) goto A ให้ x dead หลังจากจุด นี้ false false true
16
Termination ค่า liveness เปลี่ยนแปลงได้เฉพาะจาก false ไป true ได้ในทิศทางเดียว ในทุกๆตำแหน่งค่าสามารถเปลี่ยนได้เพียงหนึ่ง ครั้งเท่านั้น – ดังนั้นสามารถการันตี termination ได้ เมื่อเราวิเคราะห์หา liveness ของตัวแปรได้แล้ว การกำจัด dead code สามารถทำได้อย่างง่าย และตรงไปตรงมา
17
การวิเคราะห์แบบ Forward และ Backward เราได้เห็นการวิเคราะห์ในสองรูปแบบ : – Constant propagation เป็นการวิเคราะห์แบบ forward ค่าที่เกี่ยวข้องกับ CP จะถูกผลักจาก in ของ คำสั่งไปสู่ out ของคำสั่ง – Liveness เป็นการวิเคราะห์แบบ backward ค่าที่ เกี่ยวข้องกับ liveness จะถูกผลักจาก out ของคำสั่ง กลับไปที่ in ยังมีการวิเคราะห์เกี่ยวกับ global optimization แบบอื่นๆอีก – ส่วนใหญ่จะอยู่ในกลุ่มใดกลุ่มหนึ่ง forward หรือ backward – แต่ไม่ว่าจะเป็นกลุ่มใด หลักการวิเคราะห์ก็ยังยึด หลัก dataflow ที่ ใช้กฏในระดับคำสั่งบอก ความสัมพันธ์ของข้อมูลที่ in และ out ของคำสั่งนั้น
18
ปัญหา Register Allocation IR ใช้ตัวแปร temporary ไม่จำกัดจำนวน – ช่วยในเรื่อง optimization – แต่จะยากต่อการผลิต assembly code ตัวแปร temporary มีจำนวนมากกว่ารีจิสเตอร์ที่ CPU มีให้ สิ่งที่ต้องทำ : – เปลี่ยนให้ IR ไม่มีการใช้ตัวแปร temporary ไป มากกว่ารีจิสเตอร์ที่ CPU มีให้ – จะต้องจัด temporary หลายๆตัวให้เข้าสู่รีจิสเตอร์ หนึ่งตัว – การจัดการนี้ต้องไปกระทบพฤติกรรมของโปรแกรม
19
ตัวอย่าง พิจารณาส่วนของ โปรแกรมต่อไปนี้ ให้ว่า a และ e dead หลังจากใช้งานแล้ว – ตัวแปร temporary a และ e สามารถนำ กลับมาใช้งานได้อีก ครั้งหนึ่ง สามารถจัดให้ค่าของ a e และ f ใส่ไว้ที่ register เพียงหนึ่งตัว ได้ (r 1 ) ตัวแปร temporary ที่ dead สามารถกำจัดทิ้ง ไปและนำมาใช้ใหม่ได้
20
แนวคิดหลัก ตัวแปร t1 และ t2 สามารถใช้รีจิสเตอร์ เดียวกันได้ถ้า ณ จุดใดๆของโปรแกรม มีตัวแปรตัวใดตัวหนึ่งเท่านั้นที่ live ( นั่น คือ live สองตัวพร้อมกันไม่ได้ ) พูดอีกแบบหนึ่งก็คือ ถ้า t1 และ t2 live ณ จุดเดียวกันของ โปรแกรม ทั้งสองจะไม่สามารถใช้ รีจิสเตอร์เดียวกันได้
21
อัลกอริทึม : คำนวณ Liveness
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.