กลับไปหน้าบทความ

อ่าน 5 นาที

ตัวเพิ่มประสิทธิภาพไบนารี

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

ตัวเพิ่มประสิทธิภาพไบนารี

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

ตัวเพิ่มประสิทธิภาพไบนารีหรือที่รู้จักกันในชื่อตัวเพิ่มประสิทธิภาพโค้ดวัตถุ จะนำ โค้ดวัตถุหรือโค้ดเครื่องของโปรแกรมจากไฟล์ไบนารี ที่เชื่อมโยง หรือจากหน่วยความจำโปรแกรมแบบสด และสร้างส่วนของโค้ดที่ได้รับการเพิ่มประสิทธิภาพ ซึ่งเรียกใช้ผ่านการเปลี่ยนเส้นทางหรือการแทนที่โค้ด ซึ่งมีฟังก์ชันการทำงานเทียบเท่ากันแต่มีประสิทธิภาพมากกว่าการเพิ่มความเร็ว ของโปรแกรม เป็นเป้าหมายทั่วไปของการเพิ่มประสิทธิภาพ บางส่วนมีจุดประสงค์เพื่อปรับปรุงไบนารีเก่าให้ทันสมัยเพื่อใช้ประโยชน์จากฮาร์ดแวร์ที่อัปเดตแล้วได้ดียิ่งขึ้น[ 1 ]ในขณะที่บางส่วนพึ่งพาการเพิ่มประสิทธิภาพที่ชี้นำโดยโปรไฟล์และการเพิ่มประสิทธิภาพระหว่างกระบวนการ อย่างมาก เพื่อมอบประสิทธิภาพที่เพิ่ม ขึ้น [ 2 ] บางส่วนใช้กลไกรันไทม์เพื่อปรับปรุงประสิทธิภาพโดยพิจารณาจากภายในโดยใช้เทคนิคที่คล้ายกับคอมไพเลอร์ JIT [ 3 ]

ตัวอย่าง

  • COBOL Optimizerได้รับการพัฒนาโดยCapex Corporationในช่วงกลางทศวรรษ 1970 สำหรับCOBOLตัวเพิ่มประสิทธิภาพประเภทนี้ขึ้นอยู่กับความรู้เกี่ยวกับ "จุดอ่อน" ในคอมไพเลอร์ COBOL มาตรฐานของ IBM และทำการแทนที่ (หรือแก้ไข ) ส่วนของโค้ดออบเจ็กต์ด้วยโค้ดที่มีประสิทธิภาพมากขึ้น โค้ดที่ถูกแทนที่อาจแทนที่การค้นหาตาราง เชิงเส้น ด้วยการค้นหาแบบไบนารีเป็นต้น หรือบางครั้งอาจแทนที่คำสั่งที่ค่อนข้างช้าด้วยคำสั่งที่เร็วกว่าซึ่งทราบกันดีอยู่แล้วว่ามีฟังก์ชันการทำงานเทียบเท่ากันในบริบทนั้น เทคนิคนี้ปัจจุบันเรียกว่าการลดความแข็งแกร่งตัวอย่างเช่น บน ฮาร์ดแวร์ IBM/360 คำสั่ง นี้CLIขึ้นอยู่กับรุ่นเฉพาะ โดยจะเร็วกว่าCLCคำสั่งสำหรับการเปรียบเทียบไบต์เดียว ระหว่างสองเท่าถึงห้าเท่า [ 1 ] [ 4 ]

  • IBM Automatic Binary Optimizer for z/OS (ABO)ปรับแต่งไบนารี COBOL เก่าเพื่อปรับปรุงประสิทธิภาพโดยใช้คำสั่งฮาร์ดแวร์ใหม่ที่มีอยู่ในเซิร์ฟเวอร์ IBM Z รุ่นใหม่ ABO ไม่จำเป็นต้องคอมไพล์ใหม่จากซอร์สโค้ดของแอปพลิเคชัน ซึ่งช่วยให้แอปพลิเคชัน COBOL เก่ามีประสิทธิภาพเทียบเท่ากับสิ่งที่ทำได้หากคอมไพล์ใหม่จากซอร์สโค้ดด้วยคอมไพเลอร์รุ่นล่าสุด โดยไม่มีความเสี่ยงที่จะเกิดการเปลี่ยนแปลงพฤติกรรมเล็กน้อยที่อาจเกิดขึ้นเมื่อคอมไพล์ใหม่จากซอร์สโค้ดด้วยชุดเครื่องมือที่ใหม่กว่า ในบางกรณี โปรแกรม COBOL เก่าอาจไม่มีซอร์สโค้ดต้นฉบับให้ใช้งานด้วยซ้ำ[ 5 ]

  • Spike Executable Optimizerซึ่งพัฒนาโดยDigital Equipment Corporationและต่อมาขยายโดยCompaqเป็นตัวเพิ่มประสิทธิภาพไฟล์ปฏิบัติการแบบมีโปรไฟล์นำทางสำหรับ ไบนารี DEC AlphaบนWindows NTและTru64 Unixโดยจะเพิ่มประสิทธิภาพสำหรับโครงสร้างโค้ดและการลดสาขา พร้อมกับการดึงข้อมูลแคช ล่วงหน้าแบบมีโปรไฟล์นำทาง กำหนดเป้าหมายทั้งโค้ดปฏิบัติการในโหมดผู้ใช้และโหมดเคอร์เนล และให้ความเร็วเพิ่มขึ้นในโปรแกรมต่างๆ รวมถึงความเร็วเพิ่มขึ้นสูงสุด 40% สำหรับOracle Databaseที่รัน เกณฑ์มาตรฐาน TPC-Cไม่จำเป็นต้องคอมไพล์ใหม่จากซอร์สโค้ด และมี Spike Optimization Environment (SOE) และ Transparent Application Substitution (TAS) เพื่อจัดการการตรวจสอบไฟล์ปฏิบัติการ การรวบรวมโปรไฟล์ และการเลือกอัตโนมัติระหว่างเวอร์ชันที่มีการตรวจสอบและเวอร์ชันที่เพิ่มประสิทธิภาพของไบนารีระบบ[ 6 ] [ 7 ]

  • Solaris Binary Optimizerซึ่งเดิมรู้จักกันในชื่อSun Studio Binary Code Optimizerได้รับการพัฒนาโดยSun Microsystemsและปัจจุบันได้รับการดูแลและเผยแพร่โดยOracle Corporationในชื่อเครื่องมือbinoptสามารถใช้ในการตรวจสอบและเพิ่มประสิทธิภาพ ไบนารี x86-64และSPARCสำหรับ ระบบปฏิบัติการ Oracle Solarisการเพิ่มประสิทธิภาพหลักๆ ได้แก่ การอินไลน์โดยใช้โปรไฟล์นำทาง การจัดวางโค้ดแบบร้อน/เย็น และการเพิ่มประสิทธิภาพสาขา รวมถึงการจัดวางและการจัดเรียงข้อมูลที่ดีขึ้น ต้องใช้ไบนารีที่สร้างขึ้นโดยใช้แฟล็กคอมไพเลอร์เฉพาะ[ 8 ] [ 9 ]

  • โครงการ SOLARประกอบด้วยเครื่องมือที่แตกต่างกันสามอย่าง ได้แก่ALTOสำหรับDEC Alpha , PLTOสำหรับx86และILTOสำหรับItaniumเครื่องมือเหล่านี้ส่วนใหญ่เป็นตัวเพิ่มประสิทธิภาพแบบ link-time (LTO) ซึ่งสามารถทำงานเป็นตัวเพิ่มประสิทธิภาพแบบไบนารีบนไฟล์ปฏิบัติการที่เสร็จสมบูรณ์ได้ด้วย โดยจะรับไฟล์ไบนารี ECOFF หรือ ELF เป็นอินพุตพร้อมกับข้อมูลการย้ายตำแหน่งเพื่อสร้างกราฟการไหลของควบคุมระหว่างขั้นตอนALTOทำการวิเคราะห์และเพิ่มประสิทธิภาพทั้งโปรแกรม และใช้เทคนิคต่างๆ เช่น การแพร่กระจายค่าคงที่ การกำจัดโค้ดที่ไม่สามารถเข้าถึงได้ การอินไลน์ การจัดวางโค้ด และการจัดตารางคำสั่ง การเพิ่มประสิทธิภาพเหล่านี้จำนวนมากได้รับการชี้นำโดยโปรไฟล์[ 10 ]นอกจากนี้ยังมีการทำงานเพื่อมุ่งเป้าไปที่การประหยัดพลังงานโดยให้ความสำคัญกับการลดการทำงานของหน่วยความจำมากกว่าการประมาณจำนวนรอบเมื่อกำหนดทิศทางการเพิ่มประสิทธิภาพ เนื่องจากการเข้าถึงหน่วยความจำมีผลกระทบต่อพลังงานอย่างมาก[ 11 ] PLTOมุ่งเน้นไปที่การปรับแต่งเฉพาะด้านโดยใช้โปรไฟล์ค่าเป็นแนวทาง โดยการติดตั้งเครื่องมือในไฟล์ปฏิบัติการเพื่อรวบรวมโปรไฟล์ค่าของค่าคงที่ขณะรันไทม์ จากนั้นจึงทำการโคลนและเพิ่มประสิทธิภาพเส้นทางโค้ดสำหรับค่าที่เกิดขึ้นบ่อยโดยอาศัยการวิเคราะห์ต้นทุนและผลประโยชน์[ 12 ] ILTOทำงานโดยการแยกชุดคำสั่งจากโค้ดเครื่อง Itanium ออกเป็นกราฟควบคุมการไหลแบบปกติ กู้คืนข้อมูลเงื่อนไขและการคาดการณ์ และเขียนโค้ดเครื่องใหม่เพื่อใช้การยกเลิกเงื่อนไข/การคาดการณ์ การแปลง if แบบเลือก การจัดตารางเวลาล่าช้า การรวมกลุ่ม และการเปลี่ยนแปลงเค้าโครง เพื่อสร้างไบนารีที่เร็วขึ้นหรือวิเคราะห์ได้ง่ายขึ้น[ 13 ]มีระบบที่เรียกว่าSqueeze ซึ่ง ใช้ALTOเป็นเครื่องมือเขียนไบนารีใหม่สำหรับการบีบอัดไบนารีสำหรับสถาปัตยกรรม Alpha โดยไม่ลดประสิทธิภาพ รอยเท้าโค้ดลดลงผ่านการแยกตัวประกอบโค้ดและการสร้างนามธรรมเชิงกระบวนการ ซึ่งเพิ่มการใช้โค้ดซ้ำสำหรับลำดับคำสั่งทั่วไป การวิเคราะห์ความมีชีวิตถูกใช้เพื่อระบุและกำจัดข้อมูลที่ตายแล้วออกจากไฟล์ปฏิบัติการ[ 14 ] [ 15 ]

  • Dynamoเป็นโครงการวิจัยของHewlett Packard Labsในช่วงปลายทศวรรษ 1990 ซึ่งได้นำตัวเพิ่มประสิทธิภาพไบนารีแบบไดนามิกที่โปร่งใสมาใช้กับ โปรแกรม PA-RISCที่ทำงานบน ระบบปฏิบัติการ HP-UX Dynamo ทำงานเป็นตัวแปลภาษาสำหรับไบนารีที่ไม่ได้รับการแก้ไข ซึ่งจะปล่อยร่องรอยของรหัสเครื่องที่ร้อนที่สุดลงในแคชรหัสซอฟต์แวร์ จากนั้นร่องรอยเหล่านั้นจะได้รับการเพิ่มประสิทธิภาพโดยการลดการแตกแขนง ปรับปรุงความใกล้เคียงของรหัส และใช้การแพร่กระจายสำเนาการแพร่กระจายค่าคงที่การลดความแข็งแกร่ง การเคลื่อนย้ายรหัสที่ไม่เปลี่ยนแปลง ของลูป และการคลี่ลูป ไบนารีเป้าหมายจะต้องเชื่อมโยงใหม่กับเวอร์ชันที่กำหนดเองของรันไทม์ C มาตรฐานเพื่อโหลดไลบรารีที่ใช้ร่วมกันของ Dynamo เนื่องจากมันทำงานได้อย่างมีประสิทธิภาพเหมือนเครื่องเสมือนน้ำหนักเบา จึงมีความเข้ากันได้อย่างกว้างขวางในรหัสโหมดผู้ใช้ มันบรรลุความเร็วที่เพิ่มขึ้นถึง 22% ในเกณฑ์มาตรฐาน SpecInt95 บางรายการ[ 3 ]ต่อมา Dynamo ได้ก่อให้เกิดDynamoRIO โดย ความร่วมมือกับนักวิจัยที่MIT

  • DynamoRIOเป็นเฟรมเวิร์กการตรวจสอบไบนารีแบบไดนามิกโอเพนซอร์สที่ขยายโครงการ Dynamo ดั้งเดิม โดยสนับสนุนการเพิ่มประสิทธิภาพรันไทม์บนสถาปัตยกรรมและระบบปฏิบัติการหลายระบบ [ 16 ]

  • ADOREเป็นโครงการวิจัยที่ใช้ตัวเพิ่มประสิทธิภาพแบบไดนามิกสำหรับ ไบนารี Itanium ที่ไม่ได้แก้ไข เมื่อโหลดเข้าสู่กระบวนการเป้าหมายเป็นไลบรารีที่ใช้ร่วมกัน มันจะสร้างร่องรอยโค้ดที่ได้รับการปรับให้เหมาะสมในแคชโค้ดและแก้ไขโค้ดต้นฉบับแบบเรียลไทม์ให้เป็นเวอร์ชันที่ได้รับการปรับให้เหมาะสม วิธีการนี้ช่วยขจัดภาระของตัวแปลภาษาที่พบใน Dynamo โดยอนุญาตให้โค้ดต้นฉบับทำงานในตำแหน่งเดิมก่อนที่จะเปลี่ยนเส้นทางส่วนที่ใช้งานบ่อยไปยังแคชโค้ดที่ได้รับการปรับให้เหมาะสม มันใช้ตัวนับประสิทธิภาพฮาร์ดแวร์เพื่อทำการดึงข้อมูลล่วงหน้าของซอฟต์แวร์ตามโปรไฟล์ ซึ่งให้ความเร็วเพิ่มขึ้นถึง 57% ในเกณฑ์มาตรฐาน SPEC2000 บางรายการ[ 17 ]

  • COBRAเป็นโครงการวิจัยที่ใช้ตัวเพิ่มประสิทธิภาพไบนารีแบบไดนามิกสำหรับ ไฟล์ปฏิบัติการ ItaniumบนLinuxด้วยสถาปัตยกรรมที่คล้ายกับADOREโดยหลักๆ แล้วคือการเพิ่มการตรวจจับเฟสและการเพิ่มประสิทธิภาพใหม่เพื่อให้เข้ากับภาระงานที่เปลี่ยนแปลงไป โดยสามารถเร่งความเร็วได้ถึง 68% ในการทดสอบประสิทธิภาพหนึ่งรายการโดยใช้การดึงข้อมูล ล่วงหน้า ตาม โปรไฟล์ [ 18 ]

  • Dynimizeเป็นตัวเพิ่มประสิทธิภาพไบนารีแบบไดนามิกสำหรับโปรแกรม Linux x86-64โดยจะโหลดแคชโค้ดลงในกระบวนการเป้าหมายและใช้การคอมไพล์ JIT x86 เป็น x86 พร้อมกับการแก้ไขแบบทันทีเพื่อใช้การเพิ่มประสิทธิภาพคอมไพเลอร์ตามโปรไฟล์ โดยทำงานเป็นกระบวนการแยกต่างหากจากเป้าหมาย เน้นการเปลี่ยนแปลงระบบให้น้อยที่สุดโดยไม่ต้องแก้ไขไบนารีบนดิสก์ ไม่จำเป็นต้องคอมไพล์ใหม่จากซอร์สโค้ด และไม่จำเป็นต้องรีสตาร์ทกระบวนการเป้าหมาย[ 19 ]เพิ่มประสิทธิภาพทั้งโค้ดที่เรียกใช้งานได้และไลบรารีที่ใช้ร่วมกันในหน่วยความจำ และ v2 (เบต้า) ยังเพิ่มประสิทธิภาพเคอร์เนล Linux และไดรเวอร์อุปกรณ์ที่ไม่ได้รับการแก้ไขในหน่วยความจำด้วย[ 20 ]เป็นตัวเพิ่มประสิทธิภาพไบนารีแบบไดนามิกอเนกประสงค์สำหรับโปรแกรมใดๆ ที่ตรงตามข้อกำหนดความเข้ากันได้ อย่างไรก็ตาม การสนับสนุนเชิงพาณิชย์จำกัดเฉพาะการใช้งานกับฐานข้อมูล MySQL/MariaDB [ 19 ]ซึ่งแสดงให้เห็นถึงความเร็วที่เพิ่มขึ้นถึง 55% [ 21 ]

  • BOLTเป็นตัวเพิ่มประสิทธิภาพหลังการเชื่อมโยงที่สร้างขึ้นบน เฟรมเวิร์ก LLVMโดยใช้การสร้างโปรไฟล์ตามตัวอย่าง BOLT ช่วยปรับปรุงประสิทธิภาพของแอปพลิเคชันในโลกแห่งความเป็นจริง แม้แต่ไบนารีที่ได้รับการปรับแต่งอย่างสูงซึ่งสร้างขึ้นด้วยทั้งการเพิ่มประสิทธิภาพที่กำกับโดยการป้อนกลับและการเพิ่มประสิทธิภาพในเวลาเชื่อมโยงสำหรับ คอมไพเลอร์ GCCและClang BOLT ช่วยเพิ่มความเร็วของไบนารีได้สูงสุดถึง 20.4% เมื่อใช้ร่วมกับ FDO และ LTO และสูงสุดถึง 52.1% หากไบนารีถูกสร้างขึ้นโดยไม่ใช้ FDO และ LTO การใช้การสร้างโปรไฟล์ตามตัวอย่างโดยมีค่าใช้จ่ายน้อยที่สุดทำให้การใช้งานการเพิ่มประสิทธิภาพไบนารีในศูนย์ข้อมูลของ Meta เป็นไปได้[ 2 ]นอกจากนี้ยังสามารถเพิ่มประสิทธิภาพเคอร์เนล Linux และได้รับการบูรณาการเข้ากับโครงการLLVM [ 22 ]

  • Propellerเป็นตัวเพิ่มประสิทธิภาพการเชื่อมโยงใหม่โดยใช้โปรไฟล์เป็นแนวทาง ซึ่งพัฒนาโดยGoogleสำหรับแอปพลิเคชันขนาดใหญ่ระดับคลังข้อมูล โดยจะรับไบนารีที่เชื่อมโยงอย่างสมบูรณ์ พร้อมด้วยเมตาเดตาของลิงเกอร์และโปรไฟล์รันไทม์ แมป PC ที่สุ่มตัวอย่างกลับไปยังสัญลักษณ์/บล็อกพื้นฐาน จากนั้นจึงทำการเพิ่มประสิทธิภาพเค้าโครงโปรแกรมทั้งหมดโดยใช้โปรไฟล์เป็นแนวทาง โดยไม่จำเป็นต้องสร้างซอร์สโค้ดใหม่ Propeller ได้ถูกนำไปใช้งานจริงในศูนย์ข้อมูลของ Google และได้ถูกรวมเข้ากับ โครงการ LLVMแล้ว ด้วยการใช้โปรไฟล์แบบอิงตัวอย่างที่มีค่าใช้จ่ายต่ำซึ่งรวบรวมจากไบนารีที่กำลังเพิ่มประสิทธิภาพ Propeller จึงสามารถใช้การเพิ่มประสิทธิภาพเค้าโครงโค้ดโดยใช้โปรไฟล์เป็นแนวทางได้อย่างแม่นยำกว่าการเพิ่มประสิทธิภาพโดยใช้โปรไฟล์เป็นแนวทางแบบดั้งเดิมจากซอร์สโค้ด[ 23 ]

ข้อดี

ตัวเพิ่มประสิทธิภาพไบนารีบางตัวอนุญาตให้ใช้การเพิ่มประสิทธิภาพคอมไพเลอร์ที่ดีกว่ากับไฟล์ปฏิบัติการในกรณีที่ไม่มีซอร์สโค้ด ในบางกรณีสามารถทำได้ทันทีด้วยความพยายามเพียงเล็กน้อย[ 5 ]อาจอนุญาตให้ระบุโปรไฟล์ได้อย่างแม่นยำยิ่งขึ้นเมื่อใช้การเพิ่มประสิทธิภาพตามโปรไฟล์[ 22 ]สามารถใช้การเพิ่มประสิทธิภาพโปรแกรมทั้งหมดกับไฟล์ปฏิบัติการที่เสร็จสมบูรณ์ได้ ซึ่งเกินขอบเขตของหน่วยการคอมไพล์ซอร์สโค้ดแบบดั้งเดิม[ 10 ]การเพิ่มประสิทธิภาพไบนารีแบบไดนามิกช่วยให้ได้ข้อมูลโปรไฟล์ที่แม่นยำและยืดหยุ่นมากขึ้น โดยปรับแต่งโค้ดไลบรารีที่ใช้ร่วมกันตามกระบวนการ และอาจไม่จำเป็นต้องเปลี่ยนแปลงไบนารีบนดิสก์[ 3 ]

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Binary_optimizer&oldid=1340772990 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ตัวเพิ่มประสิทธิภาพไบนารี

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

ตัวอย่าง

COBOL Optimizer ได้รับการพัฒนาโดย Capex Corporation ในช่วงกลางทศวรรษ 1970 สำหรับ COBOL ตัวเพิ่มประสิทธิภาพประเภทนี้ขึ้นอยู่กับความรู้เกี่ยวกับ "จุดอ่อน" ในคอมไพเลอร์ COBOL มาตรฐานของ IBM และทำการแทนที่ (หรือ แก้ไข )...

ข้อดี

ตัวเพิ่มประสิทธิภาพไบนารีบางตัวอนุญาตให้ใช้การเพิ่มประสิทธิภาพคอมไพเลอร์ที่ดีกว่ากับไฟล์ปฏิบัติการในกรณีที่ไม่มีซอร์สโค้ด ในบางกรณีสามารถทำได้ทันทีด้วยความพยายามเพียงเล็กน้อย [ 5 ]...

ดูเพิ่มเติม

การคอมไพล์ไบนารีใหม่ ตัวคอมไพเลอร์แบบไดนามิก การแปลงไบนารี การเพิ่มประสิทธิภาพตามโปรไฟล์ การเพิ่มประสิทธิภาพระหว่างขั้นตอน ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Binary_optimizer&oldid=1340772990 "