Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างของภาษา C ในโปรแกรมที่พัฒนาด้วยภาษา C ทุกโปรแกรมจะมีโครงสร้างการพัฒนาไม่แตกต่างกัน ซึ่งประกอบด้วย 6 ส่วนหลัก ๆ โดยที่แต่ละส่วนจะมีหน้าที่แตกต่างกัน.
Advertisements

เรื่อง การแก้ไขปัญหาด้วยกระบวนการเทคโนโลยีสารสนเทศ
อสมการ 1.1 อสมการเชิงเส้นตัวแปรเดียว
แนวคิดในการเขียนโปรแกรม
การศึกษาและประยุกต์ใช้ขั้นตอนวิธีเชิง วิวัฒน์แบบหลายจุดประสงค์บนคลังข้อมูล เจเมทัล Study of Evolutionary Algorithm in Multi- objective on Library jMetal.
ลิมิตและความต่อเนื่อง
(Some Extension of Limit Concept)
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
การทำงานแบบเลือกทำ (Selection)
คำสั่ง while และ คำสั่ง do..while
การเลือกตัวอย่าง อ.สมพงษ์ พันธุรัตน์.
การเขียนผังงาน.
Chapter 7 ขอบเขตของตัวแปร Variable Scope.
Intermediate Representation (รูปแบบการแทนในระยะกลาง)
Register Allocation and Graph Coloring
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
ชนิดของข้อมูลและตัวดำเนินการ
การแก้ปัญหาด้วยคอมพิวเตอร์
โพรเจกไทล์ การเคลื่อนที่แบบโพรเจกไทล์         คือการเคลื่อนที่ในแนวโค้งพาราโบลา ซึ่งเกิดจากวัตถุได้รับความเร็วใน 2 แนวพร้อมกัน คือ ความเร็วในแนวราบและความเร็วในแนวดิ่ง.
แผนผัง FlowChart Flow Chart คือ ขั้นตอนที่นำผลที่ได้จากการกำหนดและการ วิเคราะห์ปัญหามาเขียนเป็นแผนภาพหรือสัญลักษณ์ ประโยชน์ของผังงาน -ช่วยลำดับขั้นตอนการทำงานของโปรแกรม.
การวาดและการทำงานกับวัตถุ
วิชา การออกแบบและพัฒนาซอฟต์แวร์
บทที่ 1. พื้นฐานความรู้ทั่วไป
หน่วยที่ 2 วิธีการออกแบบโปรแกรม
การจำลองความคิด
การควบคุมทิศทางการทำงานของโปรแกรม
การเขียนโปรแกรมคอมพิวเตอร์และอัลกอริธึม
การจัดกระทำข้อมูล.
การวางแผนและ การจัดทำ IT Audit
ตัวแปร (Variable) คือ ชื่อที่ตั้งขึ้นเพื่อเก็บข้อมูลในหน่วยความจำ สามารถเก็บข้อมูลชนิดใดก็ ได้ ลักษณะที่สำคัญ ค่าที่จัดเก็บ เมื่อปิดโปรแกรมข้อมูลจะหายไป.
ตัวแปรกับชนิดของข้อมูล
การออกแบบและการวิเคราะห์อัลกอริทึม
ง30212 พื้นฐานการเขียนโปรแกรม ศูนย์คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
Flow Chart INT1103 Computer Programming
โครงสร้างข้อมูลคืออะไร ?
รู้จักกับTimeline, Layer และ Scene รู้จักกับTimeline, Layer และ Scene
Synchronization (การประสานงาน)
Week 12 Engineering Problem 2
คำสั่งควบคุมขั้นตอน Flow control statements
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
วิชา วิศวกรรมซอฟต์แวร์ (Software Engineering)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักการเขียนโปรแกรม ( )
หลักการเขียนโปรแกรม ( )
การเขียนโปรแกรมเบื้องต้น
การเขียนผังงาน (Flowchart)
กองซ้อน ยอดกองซ้อน (stack).
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
PHP การตรวจสอบเงื่อนไข.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
หลักการแก้ปัญหา
บทที่ 9 พอยเตอร์. สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อ การศึกษาเท่านั้น พอยเตอร์ (Pointer) พอยเตอร์คือต้นฉบับของชนิดข้อมูล เป็นชนิด ข้อมูลที่สร้างจากข้อมูลมาตรฐานชนิดหนึ่ง.
บทที่ 2 แนวคิดในการเขียนโปรแกรม. ขั้นตอนการ พัฒนาโปรแกรม ในการพัฒนาโปรแกรมมีขั้นตอนหลัก 5 ขั้นตอน ซึ่งไม่ว่าจะทำการพัฒนาโปรแกรม ครั้งใดจะต้องปฏิบัติตามขั้นตอนเหล่านี้
Recursive Method.
ค่าคงที่สมดุล การเขียนความสัมพันธ์ของค่า K กับความเข้มข้นของสาร
หลักการเขียนโปรแกรม ( )
โครงสร้าง ภาษาซี.
โครงสร้างข้อมูลและอังกอลิทึม
หลักการเขียนโปรแกรมเบื้องต้น
ปัญหาจริยธรรมในทางธุรกิจ
การเขียนผังงาน ผังงาน (Flowchart)
โครงสร้างข้อมูลแบบ สแตก (stack)
Wattanapong suttapak SE, ICT University of Phayao.
Computer Program คือ ขั้นตอนการทำงาน ของคอมพิวเตอร์
บทที่ 7 การสร้างและการใช้งาน ฟังก์ชัน อาจารย์ชนิดา คำเพ็ง สาขาวิชาเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ และเทคโนโลยี
หลักการโปรแกรมเบื้องต้น
ค31212 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 2
ใบสำเนางานนำเสนอ:

Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย

Ordering Top bottom และ ค่าคงที่ c คือ abstract value – ค่าที่เราใช้แทนเซ็ทของ concrete value ที่เป็นไปได้ ณ เวลาที่โปรแกรม ทำงาน ในกรอบการวิเคราะห์ dataflow เราจะมีการกำหนดลำดับขั้น (ordering) ของ value – เช่นในกรณีของ constant propagation เราให้ว่า ⊥ < c < T ภาพของ ordering ใน constant propagation สามารถเขียนได้ตามรูป ด้านล่าง โดยค่าที่ต่ำที่สุดจะอยู่ในตำแหน่งล่างที่สุด – ค่าคงที่ c ที่เป็นไปได้ทุกๆค่าอยู่ในลำดับเดียวกัน ⊥ T

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 }

Termination การที่เรามี lub และ ordering จะช่วยเราในการ ให้เหตุผลการมีจุดจบ (termination) ของ อัลกอริทึมที่ใช้ – อัลกอริทึมของ CP เราบอกอย่างหลวมๆว่าให้ทำซ้ำ กฏทั้งหมดจน “ ไม่มีอะไรเปลี่ยนแปลง ” – นั่นไม่ได้ยืนยันว่าในที่สุดจะ “ ไม่มีอะไร เปลี่ยนแปลง ” ค่าในการวิเคราะห์ CP จะเริ่มจาก ⊥ และเพิ่มขึ้น เรื่อยๆ ⊥ เปลี่ยนเป็นค่าคงที่และค่าคงที่เปลี่ยนเป็น T เพราะฉะนั้น C(s, x, in) และ C(s, x, out) จะ เปลี่ยนได้อย่างมากสองครั้ง

Termination ดังนั้นอัลกอริทึมจะมี runtime เป็น O(n) โดยที่ n คือขนาดของโปรแกรม ( จำนวนคำสั่ง ) จำนวนขั้นตอนการคำนวณ – = จำนวน C(…) * 2 – = จำนวนคำสั่ง * 4

Liveness Analysis หลังจากทำ constant propagation เราสามารถกำจัดคำสั่ง X := 3 ได้หรือไม่ กำจัดได้ถ้า X := 3 เป็นค่าที dead นั่นคือ X ไม่มีการใช้งาน ( อ่าน ) หลังจากนี้

Live กับ Dead ค่า X ค่าแรก dead เพราะไม่เคยมีการใช้ ค่า X ที่สอง live เพราะ อาจจะมีการใช้ ณ ที่แห่ง ใดในโปรแกรม คุณสมบัติของ X ใน ลักษณะที่บอกว่า ตำแหน่งใด live หรือ dead เรียกว่า liveness

Liveness ตัวแปร x จะ live ที่คำสั่ง s ถ้า – ถ้ามีคำสั่ง s’ ที่ใช้ x – มี path จาก s ไปที่ s’ – Path นี้ไม่มีคำสั่งที่ reassign ค่า x คำสั่ง x := … จะเป็น dead code ถ้า x นั้น dead หลังจากคำสั่งนี้ Dead code สามารถจะลบออกไปได้จากโปรแกรม แต่การจะบอกได้ว่าตัวแปรใด live หรือ dead เรา จะต้องทำการวิเคราะห์หาข้อมูล liveness

การคำนวณ Liveness เราจะคำนวณ liveness โดยใช้หลักการ เช่นเดียวกับ constant propagation – เราจะดูในระดับคำสั่งและพิจารณาข้อมูลที่ส่งผ่าน จาก in ของคำสั่งไปที่ out ของคำสั่งนั้น ในการคำนวณ liveness เราจะพิจารณา คุณสมบัติ live หรือ dead ของตัวแปร – มีความเป็นไปได้เพียงสองค่า – แทนคุณสมบัตินี้ด้วยค่า boolean (true หรือ false) – “ ง่าย ” กว่า constant propagation

กฎที่ 1

กฎที่ 2

กฎที่ 3

กฎที่ 4

อัลกอริทึมในการคำนวณ Liveness 1. ให้ค่า liveness L(…) ทุกๆตำแหน่งเป็น false ใน ตอนเริ่มต้น 2. ทำซ้ำจนกว่าทุกๆคำสั่ง s ในโปรแกรมจะ เป็นไปตามกฏ 1-4 ของ liveness ถ้ายังมีคำสั่ง ใดๆไม่เป็นไปตามนี้ เลือกคำสั่งนั้นและคำนวณ liveness โดยใช้กฏที่ได้กล่าวมา

ตัวอย่างการคำนวณ Liveness ของ ตัวแปร x x = 0; A: x = x + 1; if (x != 10) goto A ให้ x dead หลังจากจุด นี้ false false true

Termination ค่า liveness เปลี่ยนแปลงได้เฉพาะจาก false ไป true ได้ในทิศทางเดียว ในทุกๆตำแหน่งค่าสามารถเปลี่ยนได้เพียงหนึ่ง ครั้งเท่านั้น – ดังนั้นสามารถการันตี termination ได้ เมื่อเราวิเคราะห์หา liveness ของตัวแปรได้แล้ว การกำจัด dead code สามารถทำได้อย่างง่าย และตรงไปตรงมา

การวิเคราะห์แบบ Forward และ Backward เราได้เห็นการวิเคราะห์ในสองรูปแบบ : – Constant propagation เป็นการวิเคราะห์แบบ forward ค่าที่เกี่ยวข้องกับ CP จะถูกผลักจาก in ของ คำสั่งไปสู่ out ของคำสั่ง – Liveness เป็นการวิเคราะห์แบบ backward ค่าที่ เกี่ยวข้องกับ liveness จะถูกผลักจาก out ของคำสั่ง กลับไปที่ in ยังมีการวิเคราะห์เกี่ยวกับ global optimization แบบอื่นๆอีก – ส่วนใหญ่จะอยู่ในกลุ่มใดกลุ่มหนึ่ง forward หรือ backward – แต่ไม่ว่าจะเป็นกลุ่มใด หลักการวิเคราะห์ก็ยังยึด หลัก dataflow ที่ ใช้กฏในระดับคำสั่งบอก ความสัมพันธ์ของข้อมูลที่ in และ out ของคำสั่งนั้น

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

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

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

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