อ่าน 1 นาที
การเจาะรูแบบห่วง
การเจาะลูป เป็น เทคนิค การคำนวณโดยประมาณ ที่ช่วยให้สามารถข้ามการวนซ้ำบางส่วนของลูปได้เป็นประจำ [ 1 ] [ 2 ] [ 3 ]
การเจาะรูแบบห่วง
การเจาะลูปเป็น เทคนิค การคำนวณโดยประมาณที่ช่วยให้สามารถข้ามการวนซ้ำบางส่วนของลูปได้เป็นประจำ[ 1 ] [ 2 ] [ 3 ]
วิธีการนี้อาศัยพารามิเตอร์ เพียงตัวเดียว คืออัตราการข้ามขั้นตอน (perforation rate ) ซึ่งสามารถตีความได้ว่าเป็นจำนวนรอบการทำซ้ำที่จะข้ามไปในแต่ละครั้ง หรือจำนวนรอบการทำซ้ำที่จะต้องดำเนินการก่อนที่จะข้ามไปหนึ่งรอบ
รูปแบบต่างๆ ของการเจาะลูป ได้แก่ การข้ามการวนซ้ำอย่างแน่นอนในช่วงเวลาปกติ การข้ามการวนซ้ำที่จุดเริ่มต้นหรือจุดสิ้นสุดของลูป และการข้ามการวนซ้ำแบบสุ่มตัวอย่าง คอมไพเลอร์อาจเลือกรูปแบบการเจาะลูปในระหว่างการคอมไพล์ หรืออาจมีเครื่องมือที่ช่วยให้ระบบรันไทม์สามารถปรับกลยุทธ์การเจาะลูปและอัตราการเจาะลูปได้อย่างเหมาะสมเพื่อให้บรรลุเป้าหมายความถูกต้องตั้งแต่ต้นจนจบ
เทคนิคการเจาะด้วยห่วงถูกพัฒนาขึ้นครั้งแรกโดยศาสตราจารย์ Martin C. Rinard จาก MIT และนักวิจัยในกลุ่มของเขา ได้แก่ Henry Hoffmann, Sasa Misailovic และ Stelios Sidiroglou
ตัวอย่างโค้ด
ตัวอย่างต่อไปนี้แสดงผลลัพธ์ของการเจาะลูปที่นำไปใช้กับซอร์สโค้ดที่มีลักษณะคล้ายภาษา ซี นี้
for ( int i = 0 ; i < N ; i ++ ) { // ทำสิ่งต่างๆ}ข้ามการวนซ้ำnครั้งในแต่ละครั้ง
for ( int i = 0 ; i < N ; i ++ ) { // ทำสิ่งต่างๆi = i + skip_factor ; }ข้ามการวนซ้ำหนึ่งครั้งหลังจากn
จำนวนอินทิก รัล = 0 ;สำหรับ( int i = 0 ; i < N ; i ++ ) { ถ้าcount == skip_factor { count = 0 ; } มิเช่นนั้น{ // ทำสิ่งต่างๆcount ++ ; } }ดูเพิ่มเติม
- ^ Henry Hoffmann, Sasa Misailovic, Stelios Sidiroglou, Anant Agarwal, Martin Rinard "การใช้การเจาะรหัสเพื่อปรับปรุงประสิทธิภาพ ลดการใช้พลังงาน และตอบสนองต่อความล้มเหลว" รายงานทางเทคนิค MIT CSAIL 2009-042 กันยายน 2009
- ^ Sasa Misailovic, Stelios Sidiroglou, Henry Hoffmann, Martin C. Rinard "การกำหนดโปรไฟล์คุณภาพการบริการ" การประชุมวิศวกรรมซอฟต์แวร์นานาชาติครั้งที่ 32 (ICSE 2010) พฤษภาคม 2010
- ^ Steilos Sidiroglou, Sasa Misailovic, Henry Hoffmann และ Martin Rinard. "การจัดการความสมดุลระหว่างประสิทธิภาพและความแม่นยำด้วยการเจาะรูแบบวนซ้ำ" ESEC/FSE. กันยายน 2011
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การเจาะรูแบบห่วง
การเจาะลูป เป็น เทคนิค การคำนวณโดยประมาณ ที่ช่วยให้สามารถข้ามการวนซ้ำบางส่วนของลูปได้เป็นประจำ [ 1 ] [ 2 ] [ 3 ]
ตัวอย่างโค้ด
ตัวอย่างต่อไปนี้แสดงผลลัพธ์ของการเจาะลูปที่นำไปใช้กับซอร์สโค้ดที่มีลักษณะคล้ายภาษา ซี นี้
ข้ามการวนซ้ำ n ครั้งในแต่ละครั้ง
for ( int i = 0 ; i < N ; i ++ ) { // ทำสิ่งต่างๆ i = i + skip_factor ; }
ข้ามการวนซ้ำหนึ่งครั้งหลังจาก n
จำนวน อินทิก รัล = 0 ; สำหรับ ( int i = 0 ; i < N ; i ++ ) { ถ้า count == skip_factor { count = 0 ; } มิเช่นนั้น { // ทำสิ่ง ต่างๆ count ++ ; } }