Register Allocation and Graph Coloring

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Workshop. Workshop 1 • แบ่งกลุ่มนักศึกษาเป็น 4 กลุ่ม ในฐานะที่กลุ่มของท่านเป็นผู้บริหาร ระดับกลาง ได้รับมอบหมายจาก ผู้บริหารระดับสูงให้ทำการพัฒนา ปรับปรุงระบบงานสารสนเทศในความ.
Advertisements

โครงสร้างของภาษา C ในโปรแกรมที่พัฒนาด้วยภาษา C ทุกโปรแกรมจะมีโครงสร้างการพัฒนาไม่แตกต่างกัน ซึ่งประกอบด้วย 6 ส่วนหลัก ๆ โดยที่แต่ละส่วนจะมีหน้าที่แตกต่างกัน.
แนวคิดในการเขียนโปรแกรม
การศึกษาและประยุกต์ใช้ขั้นตอนวิธีเชิง วิวัฒน์แบบหลายจุดประสงค์บนคลังข้อมูล เจเมทัล Study of Evolutionary Algorithm in Multi- objective on Library jMetal.
ลิมิตและความต่อเนื่อง
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
EEET0485 Digital Signal Processing Asst.Prof. Peerapol Yuvapoositanon DSP3-1 ผศ.ดร. พีระพล ยุวภูษิตานนท์ ภาควิชา วิศวกรรมอิเล็กทรอนิกส์ DSP 6 The Fast.
บทที่ ๖ หลักการแก้ปัญหาด้วยคอมพิวเตอร์
กรอบแนวคิด ในการทำวิจัย
รายงานการวิจัย.
การเลือกตัวอย่าง อ.สมพงษ์ พันธุรัตน์.
Chapter 7 ขอบเขตของตัวแปร Variable Scope.
Intermediate Representation (รูปแบบการแทนในระยะกลาง)
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
การผลิตโค๊ดสำหรับ Procedure Call
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
CS Assembly Language Programming
บทที่ 2 หลักการแก้ปัญหา
Algorithms.
บทที่ 3 พื้นฐานการเขียนโปรแกรม Visual Basic
แผนผัง FlowChart Flow Chart คือ ขั้นตอนที่นำผลที่ได้จากการกำหนดและการ วิเคราะห์ปัญหามาเขียนเป็นแผนภาพหรือสัญลักษณ์ ประโยชน์ของผังงาน -ช่วยลำดับขั้นตอนการทำงานของโปรแกรม.
สมการเชิงอนุพันธ์อย่างง่าย
The automated web application testing (AWAT) system
การนำทฤษฎีกราฟมาใช้ในด้าน
การจำลองความคิด
Poster Presentation โดย สำหรับ การประชุม สคร.5 รศ.นพ.สมพนธ์ ทัศนิยม
Surachai Wachirahatthapong
การจัดกระทำข้อมูล.
บทที่ 8 การวิเคราะห์ข้อมูลเชิงคุณภาพ
การคำนวณทางสถิติ (Statistics worksheet)
บทบาทการบริหารงานสำนักงาน 1
การวางแผนและ การจัดทำ IT Audit
บทที่ 5 แผนภูมิควบคุมสำหรับคุณลักษณะ
CPU ไม่รวม I/O PROCESSOR , MATH CO-PROCESSOR
นิยาม, ทฤษฎี สับเซตและพาวเวอร์เซต
จำนวนเต็มกับการหารลงตัว
ค32213 คณิตศาสตร์สำหรับคอมพิวเตอร์ 3 โรงเรียนปลวกแดงพิทยาคม
Basic Programming for AVR Microcontroller
เรื่อง คอมพิวเตอร์กับการประมวลผลข้อมูล
Linked List (ลิงค์ลิสต์)
บทที่ 2 หลักการแก้ปัญหา
การแก้ปัญหาด้วยคอมพิวเตอร์
การเลือกและปรับรูปทรงวัตถุ การเลือกและปรับรูปทรงวัตถุ
เรื่องหลักการแก้ปัญหา
Synchronization (การประสานงาน)
บทที่ 7 Deadlock Your company slogan.
Computer Programming for Engineers
วิชา วิศวกรรมซอฟต์แวร์ (Software Engineering)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักการเขียนโปรแกรม ( )
หลักการเขียนโปรแกรม ( )
กองซ้อน ยอดกองซ้อน (stack).
ฟังก์ชันเอ็กซ์โพเนนเชียล โรงเรียนจุฬาภรณราชวิทยาลัย เชียงราย
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
หลักการแก้ปัญหา
กลวิธีการสอนคณิตศาสตร์ระดับประถมศึกษา
Shortest-Path Algorithms
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
School of Information Communication Technology,
การสร้างสรรค์บทละคร.
หลักการเขียนโปรแกรม ( )
การคิดวิเคราะห์เพื่อการพัฒนางาน
โครงสร้างข้อมูลและอังกอลิทึม
การสอนโดยการแบ่งกลุ่มทำกิจกรรม
โครงสร้างข้อมูลแบบ สแตก (stack)
Wattanapong suttapak SE, ICT University of Phayao.
Computer Program คือ ขั้นตอนการทำงาน ของคอมพิวเตอร์
ค31212 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 2
แนวทางพัฒนางานประจำ สู่งานวิจัย
ใบสำเนางานนำเสนอ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ได้

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

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

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

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring

ตัวอย่าง Graph Coloring