มีอะไรใหม่ในเทคนิคการเพิ่มประสิทธิภาพของคอมไพเลอร์ในช่วงไม่กี่ปีที่ผ่านมา?


14

ฉันสนใจที่จะเพิ่มประสิทธิภาพการไหลของข้อมูลและกราฟการไหลของการควบคุมและโดยเฉพาะอย่างยิ่งการคำนวณที่ซับซ้อนมากขึ้น แต่มันจะน่าสนใจที่จะทราบเกี่ยวกับการประดิษฐ์ล่าสุดในด้านการปรับปรุงประสิทธิภาพช่องมอง


2
ในวิทยานิพนธ์ของฉัน( สไลด์ ) ฉันได้พูดคุยและนำแบนกราฟการโทรมาใช้ใน LLVM; โดยพื้นฐานแล้วเป็นการแปลง interprocedural ที่กำจัดความคิดของ "ฟังก์ชั่น" เพราะมันรวมรหัสทั้งหมดเข้าด้วยกันทำให้เกิดความเป็นไปได้ที่น่าสนใจเช่นการเคลื่อนไหวของรหัส
CAFxX

@CAFxX: สไลด์ล้มเหลวเปิด Office .. คุณมีภาพออนไลน์แทนไหม?
Yttrill


ขอบคุณที่สามารถดูได้แม้ว่ากราฟจะดีเพื่อให้สามารถมองเห็นข้อความได้ดี
Yttrill

คำตอบ:


8

ฉันไม่แน่ใจว่ามันเป็นเรื่องแปลกใหม่หรือถ้ามันอยู่ในด้านที่คุณสนใจมากเกินไป แต่Hooplแสดงให้เห็นว่าการเพิ่มประสิทธิภาพการควบคุม / การไหลของข้อมูลสามารถถูกทำให้เป็นโมดูลได้อย่างไรด้วยการเผยแพร่ข้อเท็จจริงเกี่ยวกับจุดยอดกราฟควบคุม ภาษาและการเพิ่มประสิทธิภาพเฉพาะ

พวกเขาอ้างถึงอัลกอริธึมของ Lerner, Grove และ Chambers ปี 2002 ซึ่งประกอบด้วยการปรับแต่งอย่างง่ายให้เป็น "superoptimization"


8

ฉันคิดว่าเทคนิคEquality Saturationซึ่งเป็นวิธีการที่แตกต่างกันในการแก้ไขปัญหาของการปรับให้เหมาะสมนั้นจะเกี่ยวข้องกัน สำหรับความรู้ของฉันมันยังไม่ได้รับการพิสูจน์ในทางปฏิบัติโดยการนำไปปฏิบัติอย่างเป็นรูปธรรมในคอมไพเลอร์ที่เต็มเปี่ยม การสร้างการปรับแต่งคอมไพเลอร์ต่อไปนี้จากบทพิสูจน์อาจเป็นที่สนใจเช่นกัน


6

มีการฟื้นฟูเล็กน้อยในการปรับแต่งคอมไพเลอร์ที่ได้รับการยืนยันแล้ว นอกจากกระดาษของ Lerner (ที่กล่าวถึงในความคิดเห็นก่อนหน้า) คุณอาจดูโครงการCompCertนำโดย Xavier Leroy พวกเขาทำสิ่งที่ยอดเยี่ยมด้วยการระบุการเพิ่มประสิทธิภาพเป็นหลักฐานที่ตรวจสอบได้ด้วยเครื่อง (ใช้Coq ) ฉันยังไม่ได้อ่านเอกสาร แต่โครงการซอฟต์แวร์ที่ได้รับการตรวจสอบแล้วที่ Princeton ดูเหมือนว่าจะให้ผลลัพธ์ที่น่าสนใจในพื้นที่นี้


1
เรากำลังทำงานในโครงการที่คล้ายกับ CompCert: CerCo ( cerco.cs.unibo.it ) แตกต่างจาก CompCert เรามุ่งมั่นที่จะสร้างต้นทุนคอนกรีตที่ได้รับการตรวจสอบและรักษาคอมไพเลอร์สำหรับชุดย่อยขนาดใหญ่ของ C (CompCert เพียงแสดงให้เห็นว่าคุณสมบัติ extensional ของโปรแกรมต้นฉบับจะถูกรักษาไว้โดยการรวบรวม) นอกจากนี้เรายังนำไปใช้ในคอมไพเลอร์ด้วยการเพิ่มประสิทธิภาพลูปที่ซับซ้อนในระดับปานกลางเช่นเดียวกับการปรับให้เหมาะสมเช่น CompCert ซึ่งแน่นอนว่าจะต้องมีการตรวจสอบว่าเป็นการประหยัดต้นทุน
Dominic Mulligan

5

การรับรู้ว่า baz [i] + = แรง (foo [i], foo [j]) ใน double FOR loop มีผลลัพธ์ที่เป็นอิสระสำหรับ (i, j) และเรียงลำดับการโทรในช่องว่างเพื่อเติม (i, j) ถึง ลดการคิดถึงแคช

ไม่ใช่ "ช่องมอง" แต่การได้รับพฤติกรรมที่ลบเลือนจากแคชสำหรับ "ฟรี" นั้นเป็นสิ่งที่ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.