มีการปรับแต่งคอมไพเลอร์อย่างเต็มที่เพื่อยุติโปรแกรมหรือไม่?


20

ในหนังสือของแอนดรูวแตะของโมเดิร์นคอมไพเลอร์ดำเนินการใน MLเขากล่าวว่าภายใต้บทที่ 17 ว่าComputability ทฤษฎีแสดงให้เห็นว่ามันจะเป็นไปได้ที่จะคิดค้นแปลงเพิ่มประสิทธิภาพใหม่และวิธีการที่จะพิสูจน์ว่าคอมไพเลอร์เพิ่มประสิทธิภาพอย่างเต็มที่จะแก้ปัญหาที่เกิดขึ้นเป็นง่อย: โปรแกรมQที่ไม่สร้างเอาต์พุตและไม่สามารถหยุดได้โดยง่ายด้วยการแทนค่าที่เหมาะสมที่สุดOpt (Q)คือ "L: goto L" คอมไพเลอร์ที่ปรับให้เหมาะสมที่สุดสามารถแก้ปัญหาการหยุดชะงักได้

ดังนั้นคำถามของฉันคือ: คอมไพเลอร์ปรับแต่งอย่างเต็มที่มีอยู่สำหรับการยกเลิกโปรแกรมหรือไม่? ความคิดเดียวของฉันมีดังต่อไปนี้: แม้ว่าโปรแกรมจะรับประกันว่าจะยุติมันก็ยังคงมีความซับซ้อนโดยพลการและสำหรับคอมไพเลอร์การเพิ่มประสิทธิภาพที่เป็นรูปธรรม, C, หนึ่งอาจสร้างโปรแกรมที่ใช้ C เป็นอินพุท เคสชนิดมุม

นอกจากนี้อะไรคือความหมายของการ จำกัด ตัวเองให้ยกเลิกโปรแกรม?


2
มันเป็นเรื่องยากที่จะหาลำดับการสอนที่เหมาะสมที่สุดสำหรับบล็อกรหัสเดียวโดยไม่มีการควบคุมใด ๆ เลย superoptimizationบทความเกี่ยวกับวิกิพีเดียให้บทนำดี (ที่มีการอ้างอิง.)
พเนจรลอจิก

บทความ Wikipedia กล่าวว่า superoptimization ดูลำดับลูปของคำแนะนำ ฉันคิดว่าไม่มีลูปเป็นอีกวิธีหนึ่งในการบอกว่ามันยุติแล้ว ดูเหมือนว่าเป็นไปได้ แต่มีราคาแพงมาก
Simon 'Reinstate Monica' Shine

2
ความหมายของ "การเพิ่มประสิทธิภาพ" ที่นี่คืออะไร? รันไทม์ที่เล็กลง? ถ้าเป็นเช่นนั้นซึ่ง: - กรณีที่เลวร้ายที่สุด, ค่าเฉลี่ย, ทุกกรณี, บางกรณี, ... ?
Raphael

คำตอบ:


16

ฉันคิดว่าคุณมีความสนใจในการเพิ่มประสิทธิภาพของ runtime ดังที่ฉันได้เขียนไว้ในความคิดเห็นของฉันว่าไม่เพียงพอที่จะระบุเป้าหมาย: การเพิ่มประสิทธิภาพจะลดการใช้งานจริงสำหรับอินพุตใด ๆทุกอินพุตทุกอินพุตที่แย่ที่สุดหรือแม้แต่โดยเฉลี่ยหรือไม่?

ฉันจะแสดงให้เห็นว่าพวกเขาทั้งหมดเป็นไปไม่ได้ หลักฐานขยายไปถึงการปรับความยาวของโปรแกรมให้เหมาะสม

จำได้ว่าปัญหาต่อไปนี้ไม่สามารถคำนวณได้:

กำหนดไวยากรณ์บริบทฟรีตัวอักษรขั้วตัดสินใจว่า *Σ L ( G ) = Σ GΣL(G)=Σ

โปรดทราบว่านอกจากนี้เมื่อได้รับไวยากรณ์บริบทเราสามารถ hardcode พูดอัลกอริธึม CYK สำหรับไวยากรณ์นั้น แสดงขั้นตอนวิธีการนี้โดย\เราสังเกตว่ายุติสำหรับอินพุตทั้งหมด (จาก )C Y K G C Y K G Σ GCYKGCYKGΣ

ตอนนี้สมมติว่ามีตัวเพิ่มประสิทธิภาพซึ่งให้อัลกอริธึมที่ยุติเสมอออกผลลัพธ์อัลกอริธึมที่เทียบเท่าผลลัพธ์ซึ่งดีที่สุดเมื่อเทียบกับรันไทม์ เห็นได้ชัดว่าใช้OptA

Opt(CYKG)='return true;'L(G)=Σ* * * *

และเราได้สร้าง decider สำหรับปัญหาที่ไม่สามารถโต้แย้งได้ซึ่งขัดแย้งกับสมมติฐาน


ขอบคุณสำหรับข้อโต้แย้งนี้ คำถามที่ชี้แจงน้อย:คืออะไร ผมถือว่าเป็นภาษาที่สร้างโดยไวยากรณ์GL ( G ) GΣL(G)G
Simon 'Reinstate Monica' Shine

3
@Simon:เป็นชุดของคำทั้งหมด Raphael: หลักฐานดี ในความเป็นจริงคุณไม่จำเป็นต้องใช้ไวยากรณ์แบบไม่มีบริบท แต่ให้เครื่องทัวริงแทนคุณสามารถสร้างโปรแกรมที่จำลองขั้นตอนสำหรับและคืนค่าจริงหากเครื่องเข้าสู่สถานะการยอมรับ จากนั้นจะเป็น iffไม่หยุด Σ* * * *MPM(ผม)MผมOPT(PM)'Rอีเสื้อยูRn aล.sอี;'M
sdcvvc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.