introduction to code optimization - kasetsart universityparuj/204433/optimization.pdf · local...
TRANSCRIPT
![Page 1: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/1.jpg)
บทนำเกี่ยวกับการปรับปรุงโค๊ด
Introduction to Code Optimization
![Page 2: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/2.jpg)
ภาพรวมการสร้างโค๊ด
![Page 3: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/3.jpg)
ระดับการปรับปรุงโค๊ด
![Page 4: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/4.jpg)
ระดับการปรับปรุงโค๊ด• เราสามารถทำ optimization ได้ในหลายๆระดับ– AST (HIR) – LIR – Assembly
• แต่ละระดับมีเทคนิค optimization ที่แตกต่างกันไป
• ระดับที่เหมาะสมที่สุดคือ LIR
![Page 5: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/5.jpg)
ระดับการปรับปรุงโค๊ด• การปรับปรุงระดับ AST – ไม่ขึ้นกับฮาร์ดแวร์ – โอกาสในการปรับปรุงจำกัดเนื่องจากอยู่ในระดับสูงเกินไป
• การปรับปรุงระดับ assembly – ขึ้นกับฮาร์ดแวร์มากไป – ต้องทำการปรับปรุงใหม่ทุกครั้งที่ retarget
• การปรับปรุงระดับ LIR – ไม่ขึ้นกับฮาร์ดแวร์ – โอกาสในการปรับปรุงมีมาก
![Page 6: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/6.jpg)
Basic Block (BB)
• Basic block คือจำนวนชุดคำสั่งที่มากที่สุดที่เป็นไปได้ที่ – ไม่มี label ในชุดคำสั่งนี้ ยกเว้น คำสั่งแรกเท่านั้น
– ไม่มีคำสั่ง jump ในชุดคำสั่งนี้ ยกเว้น คำสั่งสุดท้ายเท่านั้น
• ไม่สามารถ jump ไปที่คำสั่งใน basic block ได้ ยกเว้น เป็นคำสั่งแรก
• ไม่สามารถ jump ออกจาก basic block ได้ ยกเว้น ที่คำสั่งสุดท้าย
• หนึ่ง basic block ที่ทางเข้าหนึ่งทางและทางออกหนึ่งทาง • ชุดคำสั่งใน basic block เป็นโค๊ดแบบ straight-line (ทำงานเรียงตามลำดับที่มีมาในโค๊ด)
![Page 7: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/7.jpg)
ตัวอย่าง Basic Block
• (3) ต้องถูกประมวลผลหลัง (2) เสมอ• สามารถเปลี่ยน (3) ให้เป็น w := 3 * x ได้• แต่ไม่สามารถกำจัดคำสั่ง (2) ได้– อาจมีส่วนของโปรแกรมที่ไม่อยู่ใน basic block นี้ใช้ค่าของ t อีก
![Page 8: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/8.jpg)
Control Flow Graph (CFG)
• CFG คือ directed graph ที่: – มี basic block เป็น node
– มี edge จาก block A ไปที่ block B ถ้าการทำงานของโปรแกรมสามารถดำเนินจากคำสั่งสุดท้ายของ block A ไปถึง block B ได้ • คำสั่งสุดท้ายของ A เป็นคำสั่ง jump ไปที่ label ที่เป็นคำสั่งแรกของ B
• คำสั่งสุดท้ายของ A สามารถ fall through ไปที่ B ได้
![Page 9: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/9.jpg)
ตัวอย่าง CFG
![Page 10: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/10.jpg)
การปรับปรุงโค๊ด• อาจมีวัตถุประสงค์หลักได้หลายอย่าง
– เวลาในการรันน้อยลง (reduce execution time)
– โค๊ดขนาดเล็กลง – สิ้นเปลืองพลังงานน้อยลง – ใช้หน่วยความจำน้อยลง
• เราจะสนใจการปรับปรุงเพื่อให้เวลาในการรันโปรแกรมน้อยลง
• การปรับปรุงโค๊ดจะต้องไม่ทำให้ผลลัพธ์ที่ได้จากการรันจากโค๊ดเดิมเปลี่ยนไป
![Page 11: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/11.jpg)
แบ่งประเภทการปรับปรุงโค๊ด• Local optimization – Optimize ระดับ basic block แต่ละอัน – เสมือน BB แต่ละอันเป็นอิสระจากอันอื่นๆ
• Global optimization – Optimize ในระดับ CFG – เป็นการ optimize ในระดับ procedure (หรือ function หรือ method)
• Inter-procedural optimization – Optimize ข้าม procedure
• เราจะพูดถึงประสองประเภทแรกในชั้นเรียนนี้
![Page 12: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/12.jpg)
Local Optimization
• เป็นการปรับปรุงโค๊ดที่ง่ายที่สุด• ทำการวิเคราะห์เฉพาะแต่ละ basic block เท่านั้น• ตัวอย่างของการทำ optimization แบบนี้– Algebraic simplification (การลดรูปการคำนวณให้ง่ายลง) – Constant folding (การแทนที่ด้วยค่าคงที่)
– Common subexpression elimination (การกำจัดนิพจน์ที่เหมือนกัน)
– Copy propagation (การแพร่ก๊อปปี้ของตัวแปร)
![Page 13: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/13.jpg)
Algebraic Simplification
• Statement บางอย่างสามารถจะกำจัดทิ้งไปได้เลย – x := x + 0 – x := x * 1
• Statement บางอย่างลดรูปให้การคำนวณง่ายลงได้ – x := x * 0 เป็น x := 0 – y := sqr(y) เป็น y := y * y (ให้ sqr เป็นฟังก์ชั่นที่ return ผลลัพธ์เป็นค่า input ยกกำลังสอง) – x := x * 8 เป็น x := x << 3 – x := x * 15 เป็น t := x << 4; x := t – x
• การ optimize จากการคูณเป็นการ shift อยู่บนพื้นฐานที่ฮาร์ดแวร์การ shift จะเร็วกว่าฮาร์ดแวร์การคูณ – ไม่เป็นจริงเสมอไปสำหรับฮาร์ดแวร์ในปัจจุบัน
![Page 14: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/14.jpg)
Constant Folding
• การปฏิบัติการกี่ยวกับค่าคงที่สามารถทำการคำนวณได้ในขณะที่ทำการคอมไพล์โปรแกรม– นั่นคือสำหรับ x = y op z ใดๆ ถ้า y และ z เป็นค่าคงที่ เราสามารถหาผลลัพธ์ของ y op z ได้ในเวลาคอมไพล์
• เช่น x = 2 + 2 เป็น x = 4
• เช่น if (2 < 0) jump L เป็น statement ที่สามารถกำจัดทิ้งได้ทั้งหมด
![Page 15: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/15.jpg)
Single Assignment Form
• การทำ optimization บางอย่างสามารถทำได้ง่ายขึ้นถ้าค่าตัวแปรด้านซ้ายมีปรากฏเพียงค่าเดียว
• ตัวอย่างการแปลงเป็น SA Form – เพิ่มตัวแปร b เข้ามาใหม่
![Page 16: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/16.jpg)
Common Subexpression Elimination
• ถ้า – โค๊ดใน BB ถูกเขียนอยู่ใน SA form – การ assign ค่าเข้าที่ตัวแปร x (definition of x) ในรูปแบบ x
= … เป็นประโยคแรกที่ตัวแปร x ปรากฏขึ้น • แล้ว
– ถ้ามีการ assign ใดมี expression ด้านขวาที่เหมือนกันแล้ว ผลลัพธ์ที่ได้จะเหมือนกัน
• เช่น: x = y + z x = y + z … สามารถใช้ CSE แปลงให้เป็น … w = y + z w = x
![Page 17: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/17.jpg)
Copy Propagation
• ถ้ามีประโยค assignment w = x ใน BB ให้แทนที่การใช้ wด้วย x – ให้ว่าโค๊ดใน BB อยู่ใน SA form
• เช่น
• คุณค่าของ CP อยู่ที่การช่วยเปิดโอกาสให้มีการทำ optimization อื่นๆได้มากขึ้นเช่น
• Constant folding
• Dead code elimination
![Page 18: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/18.jpg)
การทำ Local Optimization
• Optimization แต่ละแบบถ้าใช้แบบเดี่ยวแล้วมีผลค่อนข้างน้อย
• แต่ optimization เหล่านี้จะมีผลต่อกันและกัน– การทำ optimization อย่างหนึ่งจะทำให้เกิดมีโอกาสทำ
optimization อีกอย่างหนึ่ง • คอมไพเลอร์จะทำการ optimize โดยใช้เทคนิคเหล่านี้ไปเรื่อยๆจนกระทั่งไม่สามารถจะ optimize โค๊ดต่อไปได้– คอมไพเลอร์อาจหยุดการ optimize ณ จุดใดก็ได้ ในกรณีที่ต้องการจำกัดเวลาในการคอมไพล์โค๊ด
![Page 19: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/19.jpg)
ตัวอย่างการทำ Local Optimization
a := sqr(x) b := 3 c := x d := c * c e := b * 2 f := a + d g := e * f
• เริ่มต้นจากส่วนของ LIR ด้านล่าง
![Page 20: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/20.jpg)
ตัวอย่างการทำ Local Optimization
a := sqr(x) b := 3 c := x d := c * c e := b * 2 f := a + d g := e * f
• ทำ local optimization ที่เราได้กล่าวถึงมา – Algebraic simplification – Constant folding – Common Subexpression elimination – Copy propagation
a := x * x b := 3 c := x d := a e := 6 f := a + a g := 6 * f
![Page 21: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/21.jpg)
Dead Code Elimination• ถ้า
– w := rhs อยู่ใน basic block – ไม่มีการใช้ค่าของ w ในที่ไดๆเลยในโปรแกรม
• แล้ว – ประโยค w := rhs คือ dead code และสามารถกำจัดทิ้งไปได้ – Dead หมายถึงไม่มีผลต่อผลลัพธ์ของโปรแกรม
• ตัวอย่างการทำ DCE ถ้าไม่มีการใช้ค่าของ a ณ ที่ใดๆของโปรแกรม
![Page 22: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/22.jpg)
Dead Code Elimination
• จากตัวอย่างการทำ local optimization ถ้าเราทำ DCE เพิ่ม เราจะปรับปรุงโค๊ดได้เพิ่มเติมอีก
a := sqr(x) b := 3 c := x d := c * c e := b * 2 f := a + d g := e * f
a := x * x b := 3 c := x d := a e := 6 f := a + a g := 6 * f
a := x * x
f := a + a g := 6 * f
![Page 23: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/23.jpg)
การปรับปรุงโค๊ดแบบ Global
Global Optimization
![Page 24: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/24.jpg)
Global Optimization
• เป็นการปรับปรุงโค๊ดที่ขยายผ่าน basic block ไปทั้ง control flow graph
![Page 25: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/25.jpg)
Global Optimization
• เป็นการปรับปรุงโค๊ดที่ขยายผ่าน basic block ไปทั้ง control flow graph
![Page 26: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/26.jpg)
Global Optimization
• เป็นการปรับปรุงโค๊ดที่ขยายผ่าน basic block ไปทั้ง control flow graph
![Page 27: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/27.jpg)
ความถูกต้องในการทำ Copy Propagation
• พิจารณาสถานการณ์ต่อไปนี้:
• การทำ CP โดยการแพร่ k ไปแทน x ให้ถูกต้อง เราจะต้องได้ว่าทุกๆเส้นทาง (path) ที่จะนำไปหาประโยคที่มีการใช้ตัวแประ x การทำ assignment ครั้งสุดท้ายคือ x := k
![Page 28: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/28.jpg)
ตัวอย่างการพิจารณา path
![Page 29: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/29.jpg)
ประเด็นเกี่ยวกับการทำ Global Optimization
• การตรวจสอบความถูกต้องนั้นไม่ได้ทำได้ง่ายๆ• จะต้องพิจารณาทุก path ที่เป็นไปได้– Path ที่เกิดจากการวน loop
– Path ที่เกิดจาก conditional branch
• ดังนั้นจะต้องทำการวิเคราะห์ในระดับ global และวิเคราะห์ทั้งตัว control flow graph
![Page 30: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/30.jpg)
การวิเคราะห์แบบ Global• คุณลักษณะของการทำ global optimization: – การทำ optimization ขึ้นอยู่กับการทราบคุณสมบัติ X ของโปรแกรม ณ จุดใดจุดหนึ่งของการทำงานของโปรแกรม
– การจะพิสูจน์คุณสมบัติ X ณ จุดใดๆ เราจะต้องมีความรู้เกี่ยวกับโปรแกรมในส่วนอื่นๆทั้งหมด
– การวิเคราะห์จะต้องมีลักษณะ conservative ต้องเลือกให้ได้อย่างใด อย่างหนึ่ง • บอกได้ว่า X เป็นจริงแน่นอน หรือ • ไม่รู้เลยว่า X เป็นจริงหรือไม่
• เทคนิคมาตรฐานที่ใช้ในการวิเคราะห์แบบ global คือ global dataflow analysis
![Page 31: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/31.jpg)
Global Constant Propagation
• การทำ CP โดยการแพร่ k ไปแทน x ให้ถูกต้อง เราจะต้องได้ว่าทุกๆเส้นทาง (path) ที่จะนำไปหาประโยคที่มีการใช้ตัวแประ x การทำ assignment ครั้งสุดท้ายคือ x := k
• เราจะพิจารณาการทำ CP สำหรับตัวแปร x ใดๆ ในทุกๆจุดของโปรแกรม– ตัวแปรอื่นๆก็จะทำซ้ำขั้นตอนที่ทำกับตัวแปร x
• พิจารณาการให้ค่าที่เป็นไปได้ของ x ในทุกๆจุดของโปรแกรม
![Page 32: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/32.jpg)
Global Constant Propagation
ค่าที่เป็นไปได้
ความหมาย
⊥ Statement นี้ไม่ได้รับการประมวลผลC x มีค่าเท่ากับค่าคงที่ c⊤ ไม่รู้ว่า x เป็นค่าคงที่หรือไม่
• ⊥ อ่านว่า bottom
• ⊤ อ่านว่า top
![Page 33: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/33.jpg)
ตัวอย่างการวิเคราะห์
![Page 34: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/34.jpg)
การวิเคราะห์เพื่อทำ Constant Propagation
• เราต้องการหาว่าในทุกๆจุดของโปรแกรม ค่า x ที่จุดนั้นเป็นเท่าใดหรือไม่สามารถจะรู้ได้ (คือหาคุณสมบัติของ x) – อย่างลืมว่าคำว่า “รู้ได้” หมายถึงความรู้ที่มี ณ เวลาที่ทำการคอมไพล์
• ถ้าเรามีความรู้ข้างต้นแล้ว เวลาเราพบการใช้ (การอ่านค่า x) ณ ที่ใดๆแล้ว เราสามารถแทนที่ x ด้วยค่าคงที่ได้
• ต่อไปนี้เราจะกล่าวถึงวิธีการเคราะห์ในการหาคุณสมบัติ (properties) ของ x ในทุกๆจุดของโปรแกรม
![Page 35: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/35.jpg)
แนวคิดหลักในการวิเคราะห์The analysis of a complicated program can be expressed as a combination of simple rules relating the change in information between adjacent statements
การวิเคราะห์โปรแกรมไม่ว่าจะซับซ้อนเพียงใด สามารถทำได้โดยการใช้กฏง่ายๆที่พูดถึงการเปลี่ยนแปลงของคุณลักษณะในระดับคำสั่งที่อยู่ติดกัน โดยกฏดังกล่าวจะพูดถึงความสัมพันธ์ระหว่างคุณลักษณะก่อนและหลังคำสั่งนั้นๆ
![Page 36: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/36.jpg)
การวิเคราะห์โปรแกรม• สำหรับทุกๆคำสั่ง s ในระดับ LIR เราจะคำนวณหาคุณสมบัติของ
x ก่อนและหลัง s – ให้ C(s,x,in) = ค่าของ x ก่อน s – ให้ C(s,x,out) = ค่าของ x หลัง s
• ข้อมูลคุณลักษณะของ x จะถูกส่งผ่าน (transfer) จากคำสั่งหนึ่งไปอีกคำสั่งหนึ่ง
• เราจะให้นิยาม transfer function เพื่อบอกความสัมพันธ์ของ C(s, x, in) กับ C(s, x, out) – นิยามด้วยกฏที่จะได้กล่าวถึงต่อไปนี้โดยให้ s มีคำสั่งที่มาก่อนหน้าคือ
p1 … pn
![Page 37: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/37.jpg)
กฏที่ 1
![Page 38: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/38.jpg)
กฏที่ 2
![Page 39: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/39.jpg)
กฏที่ 3
![Page 40: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/40.jpg)
กฏที่ 4
![Page 41: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/41.jpg)
กฏที่เหลือ• ที่ผ่านมากฏที่ 1-4 บอกความสัมพันธ์จาก out ของคำ
สั่งอื่นๆที่มาก่อนหน้ามาสู่ in ของคำสั่งที่กำลัง
พิจารณา
• กฏที่เหลือจะพูดถึงความสัมพันธ์จาก in ของคำสั่ง
หนึ่งไปสู่ out ของคำสั่งเดียวกัน
![Page 42: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/42.jpg)
กฏที่ 5
![Page 43: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/43.jpg)
กฏที่ 6
![Page 44: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/44.jpg)
กฏที่ 7
![Page 45: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/45.jpg)
กฏที่ 8
![Page 46: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/46.jpg)
อัลกอริทึมในการวิเคราะห์1. ณ ตำแหน่งที่ s เป็นจุดที่เป็น entry point ของฟัง
ก์ชั่นหรือโปรแกรม ให้ค่า C(s, x, in) = ⊤
2. ให้ C(s, x, in) = C(s, x, out) = ⊥ ณ ตำแหน่งอื่นๆของโปรแกรม
3. ทำซ้ำจนกว่าทุกๆจุดจะเป็นไปตามกฏทั้ง 8 ที่กล่าวมาและไม่สามารถจะใช้กฏใดๆเพิ่มเติมได้อีก– ค่อยๆไล่คำสั่ง s ที่ละคำสั่งที่คุณลักษณะก่อนและหลัง
ยังไม่เป็นไปตามกฏทั้ง 8
![Page 47: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/47.jpg)
ตัวอย่างการวิเคราะห์
![Page 48: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/48.jpg)
ทำไมต้องมี Bottom
• พิจารณาโปรแกรมที่มี loop ดังต่อไปนี้
![Page 49: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/49.jpg)
สิ่งที่ต้องพิจารณา• พิจารณาคำสั่ง Y := 0
– ถ้าจะรุ้ว่า X เป็นค่าคงที่หรือไม่ เราจะต้องรู้ว่าทางที่จะเข้ามาสู่ in ของคำสั่งนี้นั้น x เป็นค่าคงที่หรือไม่
– คำสั่งนี้มีทางที่จะเข้าสู่ตัวมันอยู่สองทางจากสองคำสั่ง • X := 3 • A := 2 * X
• แต่ข้อมูลจากคำสั่ง A := 2 * X จะได้ก็ต่อเมื่อเรารู้คุณลักษณะก่อนและหลังคำสั่ง Y := 0 อย่างถ่องแท้
• เราจะแก้การขึ้นต่อกันวงกลม (circular dependency) นี้ได้อย่างไร
![Page 50: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/50.jpg)
การแก้ Circular Dependency
• ทุกๆจุดใน cycle ทุกๆจุดจะต้องมีค่าที่แน่นอนในทุกๆเวลา
• ในการกำจัด cycle เพื่อจะแก้ circular dependency ทำได้โดยการให้ค่าเริ่มต้น
• ค่าเริ่มต้นที่เราจะให้ก็คือค่า bottom – เป็นค่าที่เหมาะสมเพราะเริ่มต้นจากการบอกว่า “ยังไม่มีการทำงานมาถึงคำสั่งนี้”
![Page 51: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/51.jpg)
ตัวอย่างการวิเคราะห์ที่มี loop
![Page 52: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/52.jpg)
ตัวอย่างการวิเคราะห์ที่มี loop
![Page 53: Introduction to Code Optimization - Kasetsart Universityparuj/204433/optimization.pdf · Local Optimization • เ]นการป-บป.งโ1ดHายHJด • ;การ„เคราะเฉพาะแDละ](https://reader034.vdocuments.net/reader034/viewer/2022050102/5f413da945d2d52ca1172814/html5/thumbnails/53.jpg)
ตัวอย่างการวิเคราะห์ที่มี loop