งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Register Allocation and Graph Coloring การจัดเข้าสู่รีจิสเตอร์และการให้สี กราฟ.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Register Allocation and Graph Coloring การจัดเข้าสู่รีจิสเตอร์และการให้สี กราฟ."— ใบสำเนางานนำเสนอ:

1 Register Allocation and Graph Coloring การจัดเข้าสู่รีจิสเตอร์และการให้สี กราฟ

2 ปัญหา Register Allocation IR ใช้ตัวแปร temporary ไม่จำกัดจำนวน – ช่วยในเรื่อง optimization – แต่จะยากต่อการผลิต assembly code ตัวแปร temporary มีจำนวนมากกว่ารีจิสเตอร์ที่ CPU มีให้ สิ่งที่ต้องทำ : – เปลี่ยนให้ IR ไม่มีการใช้ตัวแปร temporary ไป มากกว่ารีจิสเตอร์ที่ CPU มีให้ – จะต้องจัด temporary หลายๆตัวให้เข้าสู่รีจิสเตอร์ หนึ่งตัว – การจัดการนี้ต้องไปกระทบพฤติกรรมของโปรแกรม

3 ตัวอย่าง พิจารณาส่วนของ โปรแกรมต่อไปนี้ ให้ว่า a และ e dead หลังจากใช้งานแล้ว – ตัวแปร temporary a และ e สามารถนำ กลับมาใช้งานได้อีก ครั้งหนึ่ง สามารถจัดให้ค่าของ a e และ f ใส่ไว้ที่ register เพียงหนึ่งตัว ได้ (r 1 ) ตัวแปร temporary ที่ dead สามารถกำจัดทิ้ง ไปและนำมาใช้ใหม่ได้

4 แนวคิดหลัก ตัวแปร t1 และ t2 สามารถใช้รีจิสเตอร์ เดียวกันได้ถ้า ณ จุดใดๆของโปรแกรม มีตัวแปรตัวใดตัวหนึ่งเท่านั้นที่ live ( นั่น คือ live สองตัวพร้อมกันไม่ได้ ) พูดอีกแบบหนึ่งก็คือ ถ้า t1 และ t2 live ณ จุดเดียวกันของ โปรแกรม ทั้งสองจะไม่สามารถใช้ รีจิสเตอร์เดียวกันได้

5 อัลกอริทึม : คำนวณ Liveness

6 อัลกอริทึม : Register Interference Graph สร้าง undirected graph ที่ – มี node เป็นตัวแปร temporary – มี edge ระหว่าง node ที่แทนตัวแปร temporary t1 และ t2 ถ้าทั้งสอง live พร้อมกัน ณ จุดใดๆของ โปรแกรม เรียก graph ที่สร้างขึ้นนี้ว่า register interference graph (RIG) – ตัวแปร temporary 2 ตัว สามารถถูกจัดเข้าอยู่ที่ รีจิสเตอร์ตัวเดียวได้ถ้าไม่มี edge ที่เชื่อมระหว่างตัว แปรสองตัวนี้

7 ตัวอย่าง จากตัวอย่างส่วนของโปรแกรม สร้าง RIG ได้ตาม ด้านล่างนี้ – b และ c ไม่สามารถใช้รีจิสเตอร์เดียวกันได้ แต่ – b และ d สามารถใช้รีจิสเตอร์เดียวกันได้

8 ข้อสังเกต Liveness และ RIG เป็นกรอบแนวคิดที่จะนำไปสู่ การทำ register allocation ได้อย่างถูกต้อง – เป็นข้อมูล global ( หมายถึงครอบคลุมทั่วทั้ง control flow graph ของโค๊ดใน procedure) – หลังจากเราสร้าง RIG ได้แล้ว ขั้นตอนการทำ register allocation จะขึ้นอยู่กับสถาปัตยกรรมของ เครื่องที่เรา target ไปหา X86 มีรีจิสเตอร์ 8 ตัว แต่ละตัวมีการข้อตกลงการใช้งาน เฉพาะ MIPS มีรีจิสเตอร์ 32 ตัว โดยแต่ละตัวเป็น general purpose ( สามารถใช้งานในแบบใดๆก็ได้ )

9 นิยาม การให้สีกราฟ (graph coloring) คือการให้สีแต่ ละ node ของกราฟโดยที่ node สอง node ใดๆ ที่มี edge เชื่อมถึงกันมีสีที่แตกต่างกัน k-colorable graph หมายถึงกราฟที่สามารถใช้สี k สีในการทำ graph coloring ได้สำเร็จ

10 การทำ Register Allocation โดยใช้ Graph Coloring สีแต่ละสีก็คือรีจิสเตอร์แต่ละตัว – เราจะต้องให้สี ( รีจิสเตอร์ ) กับ node ( ตัวแปร temporary) ให้ k เท่ากับจำนวนรีจิสเตอร์ที่ฮาร์ดแวร์มีให้ ถ้า RIG นั้น k-colorable แสดงว่าเราสามารถใช้ รีจิสเตอร์ k ตัว หรือน้อยกว่าในการแทนตัวแปร temporary ทั้งหมดใน control flow graph ของ procedure ได้สำเร็จ

11 ตัวอย่าง Graph Coloring พิจารณา RIG ด้านล่าง สังเกตได้ว่าเราไม่สามารถจะให้สี RIG นี้โดยใช้สี น้อยกว่า 4 สีได้ จะต้องใช้สีมากกว่าหรือเท่ากับ 4

12 ตัวอย่างโปรแกรม

13 หลังจากการทำ Register Allocation

14 การคำนวณ Graph Coloring ไม่ใช่ปัญหาที่ง่าย ถามว่า “ ยาก ” ขนาดไหน – “ ยาก ” ขนาด NP ปัญหา graph coloring เป็นปัญหา NP-Complete ( นั่นคือเป็นปัญหา NP-Hard ด้วย ) – ในปัจจุบันยังไม่มีผู้สามารถหาอัลกอริทึมที่มี ประสิทธิภาพ ( มี runtime เป็น polynomial order) มาแก้ปัญหานี้ได้ – ดังนั้นเราจะแก้ปัญหานี้โดยใช้ heuristics ( ทาง แก้ปัญหาที่พยายามเลือกทางออกที่ดีที่สุดในแต่ละ ขั้นโดยประเมินจากปัจจัยกระทบจากสภาวะแวดล้อม ที่เป็นอยู่ )

15 Heuristic ในการทำ Graph Coloring เลือก node t ที่มี neighbor (node อื่นๆที่เชื่อมกับ t ด้วย edge) น้อยกว่า k โดย k คือจำนวนสีหรือ รีจิสเตอร์ที่มีอยู่ นำ node t และ edge ที่ติดอยู่กับ node t ออกจาก RIG เริ่มต้น ได้ RIG ใหม่ที่มี node น้อยกว่าเดิมหนึ่ง node ถ้า RIG ใหม่ k-colorable แสดงว่า RIG เริ่มต้นก็ k- colorable เช่นกัน นิสิตลองให้เหตุผลได้ไหมว่าทำไม heuristic ด้านบนที่ได้กล่าวมาสามารถทำ k coloring ได้ ถูกต้อง – ให้ c1,…,cn เป็นสีที่ให้กับ neighbor ของ t ใน RIG ใหม่ – เนื่องาก n < k เราจึงสามารถหาสีที่แตกต่างจาก c1,…,cn มาใส่ให้กับ t ได้

16 การเขียนโปรแกรมเพื่อทำ Graph Coloring ทำตามขั้นตอนต่อไปนี้ – เลือก node t ที่มี neighbor น้อยกว่า k – เก็บ t ลงบน stack และนำ t และ edge ที่ติดกับ t ทั้งหมดออกจาก RIG เดิม – ทำซ้ำจนกระทั่งเหลือ node ใน RIG เพียงหนึ่ง node จากนั้นเราจะให้สีกับแต่ละ node ที่อยู่บน stack – เริ่มจาก node สุดท้ายที่ใส่เข้าไปใน stack – และในแต่ละขั้นที่ pop node ออกมาเพื่อให้สี เลือก สีที่แตกต่างจากสีที่ได้ให้กับ neighbor ของ node นี้

17 ตัวอย่าง Graph Coloring

18

19

20

21

22

23 ณ จุดนี้เราได้ทุก node อยู่บน stack แล้ว เรา จะเริ่มทำการให้สี node แต่ละ node

24 ตัวอย่าง Graph Coloring

25

26

27

28

29


ดาวน์โหลด ppt Register Allocation and Graph Coloring การจัดเข้าสู่รีจิสเตอร์และการให้สี กราฟ.

งานนำเสนอที่คล้ายกัน


Ads by Google