مُحسِّن ثنائي

يقوم مُحسِّن الشفرة الثنائية ، المعروف أيضًا باسم مُحسِّن شفرة الكائن ، بأخذ شفرة الكائن أو شفرة الآلة للبرنامج إما من ملف تنفيذي ثنائي مرتبط ، أو من ذاكرة البرنامج أثناء التشغيل، ويُنتج أجزاءً من الشفرة المُحسَّنة، يتم استدعاؤها إما عن طريق إعادة التوجيه أو استبدال الشفرة، وهي مكافئة وظيفيًا ولكنها أكثر كفاءة. يُعد تسريع البرنامج هدفًا شائعًا للتحسين. يهدف بعضها إلى تحديث الملفات الثنائية القديمة للاستفادة بشكل أفضل من الأجهزة المُحدَّثة، [ 1 ] بينما يعتمد البعض الآخر بشكل كبير على التحسين المُوجَّه بالملف الشخصي والتحسين بين الإجراءات لتحقيق مكاسب في الأداء. [ 2 ] يستخدم البعض آليات وقت التشغيل لتحسين الأداء بشكل استباقي باستخدام تقنيات مشابهة لمترجمات JIT. [ 3 ]
أمثلة
- طُوِّر مُحسِّن COBOL بواسطة شركة Capex في منتصف سبعينيات القرن الماضي للغة COBOL . اعتمد هذا النوع من المُحسِّنات، في هذه الحالة، على معرفة "نقاط الضعف" في مُصرِّف IBM COBOL القياسي، وقام فعليًا باستبدال (أو تصحيح ) أجزاء من كود الكائن بكود أكثر كفاءة. على سبيل المثال، قد يستبدل الكود البديل عملية بحث خطية في جدول ببحث ثنائي ، أو أحيانًا يستبدل ببساطة تعليمة بطيئة نسبيًا بتعليمة أسرع معروفة، وتكون مكافئة لها وظيفيًا في سياقها. تُعرف هذه التقنية الآن باسم " تقليل القوة" . على سبيل المثال، في جهاز IBM/360، كانت هذه التعليمة، اعتمادًا على الطراز المحدد، أسرع من تعليمة مقارنة البايت الواحد
CLIبما يتراوح بين ضعفين وخمسة أضعاف . [ 1 ] [ 4 ]CLC
- يعمل مُحسِّن IBM التلقائي للثنائيات لنظام التشغيل 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 عند تشغيل معيار TPC-C . لم يتطلب البرنامج إعادة تجميع من المصدر، وتضمن بيئة Spike Optimization Environment (SOE) وبرنامج Transparent Application Substitution (TAS) لإدارة أدوات تحسين الأداء، وجمع ملفات تعريف الأداء، والاختيار التلقائي بين الإصدارات المُحسَّنة والمُعدَّلة من ملفات النظام الثنائية. [ 6 ] [ 7 ]
- تم تطوير مُحسِّن الشفرة الثنائية لنظام Solaris ، المعروف سابقًا باسم مُحسِّن الشفرة الثنائية لنظام Sun Studio ، في الأصل بواسطة شركة Sun Microsystems ، وتتولى شركة Oracle Corporation حاليًا صيانته وتوزيعه تحت اسم binopt . يُمكن استخدامه لتجهيز وتحسين كلٍّ من الشفرة الثنائية x86-64 و SPARC لنظام التشغيل Oracle Solaris . تشمل تحسيناته الرئيسية تضمين التعليمات البرمجية الموجهة بالملف التعريفي، وتحسين تخطيط الشفرة (الساخنة/الباردة) والفروع، بالإضافة إلى تحسين موضع البيانات ومحاذاتها. يتطلب البرنامج ملفات ثنائية مُنشأة باستخدام علامات مُصرِّف مُخصصة. [ 8 ] [ 9 ]
- تضمن مشروع SOLAR ثلاث أدوات متميزة: ALTO لمعالجات DEC Alpha ، وPLTO لمعالجات x86 ، و ILTO لمعالجات Itanium . كانت هذه الأدوات في الأساس مُحسِّنات وقت الربط (LTO) التي يمكنها أيضًا العمل كمُحسِّنات ثنائية على الملفات التنفيذية الجاهزة. كانت هذه الأدوات تستقبل ملفات ECOFF أو ELF الثنائية كمدخلات، بالإضافة إلى بيانات إعادة التوطين، لإعادة بناء مخططات تدفق التحكم بين الإجراءات. أجرت ALTO تحليلات وتحسينات شاملة للبرنامج، وطبقت تقنيات مثل نشر الثوابت، وإزالة التعليمات البرمجية غير القابلة للوصول، والتضمين، وتخطيط التعليمات البرمجية، وجدولة التعليمات. تم توجيه العديد من هذه التحسينات باستخدام ملفات تعريف الأداء. [ 10 ] كما تم بذل جهود لتحسين استهلاك الطاقة من خلال إعطاء الأولوية لتقليل عمليات الذاكرة على حساب تقديرات عدد الدورات عند توجيه التحسينات، نظرًا لأن عمليات الوصول إلى الذاكرة لها تأثير كبير على استهلاك الطاقة. [ 11 ] ركزت PLTO على التخصيص الموجه بملفات تعريف القيمة من خلال تزويد الملفات التنفيذية بأدوات لجمع ملفات تعريف القيمة على ثوابت وقت التشغيل، ثم استنساخ مسارات التعليمات البرمجية وتحسينها للقيم المتكررة بناءً على تحليل التكلفة والعائد. [ 12 ] عملت ILTO عن طريق تفكيك الحزم من كود آلة Itanium إلى رسوم بيانية لتدفق التحكم مُعَيَّرة، واستعادة معلومات المسند والتخمين، وإعادة كتابة كود الآلة لتطبيق إلغاء التنبؤ/إلغاء التخمين، والتحويل الانتقائي لـ if، والجدولة المتأخرة، والتجميع، وتغييرات التخطيط، لإنتاج ملفات ثنائية أسرع أو أكثر قابلية للتحليل. [ 13 ] كان هناك نظام يُسمى Squeeze ، مبني على ALTO ، وهو أداة لإعادة كتابة الملفات الثنائية لضغط الملفات الثنائية لبنية Alpha دون تقليل الأداء. تم تقليل بصمات التعليمات البرمجية من خلال تحليل التعليمات البرمجية وتجريد الإجراءات مما زاد من إعادة استخدام التعليمات البرمجية لتسلسلات التعليمات الشائعة. تم استخدام تحليل الحيوية لتحديد البيانات الميتة وإزالتها من الملفات التنفيذية. [ 14 ] [ 15 ]
- كان دينامو مشروعًا بحثيًا أجرته مختبرات هيوليت باكارد في أواخر التسعينيات، حيث نفّذ مُحسِّنًا ثنائيًا ديناميكيًا شفافًا لبرامج PA-RISC التي تعمل على نظام التشغيل HP-UX . كان دينامو يعمل كمُفسِّر للملفات الثنائية غير المُعدَّلة، حيث يُصدر أكثر أجزاء كود الآلة استخدامًا إلى ذاكرة تخزين مؤقتة للكود البرمجي. ثم تُحسَّن هذه الأجزاء بتقليل التفرعات، وتحسين موضع الكود، وتطبيق تقنيات نسخ الكود ، ونشر الثوابت ، وتقليل قوة الكود، ونقل الكود غير المتأثر بالحلقات، وفك الحلقات . كان لا بد من إعادة ربط الملفات الثنائية المستهدفة بنسختها الخاصة من وقت تشغيل لغة C القياسي لتحميل مكتبة دينامو المشتركة. ونظرًا لعمله الفعال كآلة افتراضية خفيفة الوزن، فقد تمتع بتوافق واسع مع كود وضع المستخدم. وحقق تسريعًا يصل إلى 22% في بعض معايير SpecInt95. [ 3 ] لاحقًا، انبثق عن دينامو مشروع DynamoRIO بالتعاون مع باحثين في معهد ماساتشوستس للتكنولوجيا .
- DynamoRIO هو إطار عمل مفتوح المصدر لتحليل البيانات الثنائية الديناميكية، وهو امتداد لمشروع Dynamo الأصلي، ويدعم تحسين وقت التشغيل عبر بنى وأنظمة تشغيل متعددة. [ 16 ]
- كان مشروع ADORE مشروعًا بحثيًا يُطبّق مُحسِّنًا ديناميكيًا لملفات Itanium الثنائية غير المُعدَّلة. عند تحميله في عملية مُستهدفة كمكتبة مُشتركة، يُولِّد آثارًا مُحسَّنة للتعليمات البرمجية في ذاكرة تخزين مؤقتة للتعليمات البرمجية، ويُجري تعديلات مباشرة على التعليمات البرمجية الأصلية لتتوافق مع النسخة المُحسَّنة. وقد ألغى هذا النهج عبء المُفسِّر الموجود في Dynamo، وذلك بالسماح بتشغيل التعليمات البرمجية الأصلية في مكانها قبل إعادة توجيه المناطق الأكثر استخدامًا إلى ذاكرة التخزين المؤقتة للتعليمات البرمجية المُحسَّنة. كما استفاد من عدادات أداء الأجهزة لتنفيذ جلب مُسبق للبرامج مُوجَّه بالملفات التعريفية، مما يُحقق تسريعًا يصل إلى 57% في بعض معايير SPEC2000. [ 17 ]
- كان مشروع COBRA مشروعًا بحثيًا قام أيضًا بتنفيذ مُحسِّن ثنائي ديناميكي لملفات Itanium التنفيذية على نظام Linux ببنية مشابهة لـ ADORE ، حيث أضاف بشكل أساسي اكتشاف المرحلة وإعادة التحسين للتكيف مع أحمال العمل المتغيرة، مع تسريع يصل إلى 68٪ في أحد المعايير باستخدام جلب مسبق موجه بالملف الشخصي . [ 18 ]
- Dynimize هو مُحسِّن ثنائي ديناميكي لبرامج Linux x86-64 . يقوم بتحميل ذاكرة تخزين مؤقتة للتعليمات البرمجية في العملية المستهدفة، ويستخدم ترجمة JIT من x86 إلى x86 بالإضافة إلى التحديث الفوري لتطبيق تحسينات المُترجم المُوجَّهة بالملفات التعريفية، ويعمل كعملية منفصلة عن العمليات المستهدفة. يُركِّز على الحد الأدنى من تغييرات النظام دون تعديل الملفات الثنائية على القرص، ولا يتطلب إعادة الترجمة من المصدر، ولا يتطلب إعادة تشغيل العمليات المستهدفة. [ 19 ] يُحسِّن كلاً من التعليمات البرمجية القابلة للتنفيذ ومكتبات البرامج المشتركة في الذاكرة، كما يُحسِّن الإصدار الثاني (بيتا) نواة 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 هو مُحسِّن لإعادة ربط التعليمات البرمجية، مُوجَّه بالملفات التعريفية، طوّرته جوجل لتطبيقات المستودعات الضخمة. يأخذ البرنامج ملفًا ثنائيًا مُرتبطًا بالكامل، بالإضافة إلى بيانات تعريف الرابط وملفات تعريف وقت التشغيل، ويربط عدادات البرنامج المُختارة بالرموز/الكتل الأساسية، ثم يُجري تحسينات شاملة لتخطيط البرنامج، مُوجَّهة بالملفات التعريفية، دون الحاجة إلى إعادة بناء الكود المصدري. وقد تم نشره في بيئات الإنتاج عبر مراكز بيانات جوجل، وتم دمجه في مشروع LLVM . وباستخدام ملفات تعريفية مُستقاة من عينات ذات تكلفة منخفضة، يتم جمعها من الملفات الثنائية التي يُحسِّنها، يُمكنه تطبيق تحسينات تخطيط التعليمات البرمجية المُوجَّهة بالملفات التعريفية بدقة أكبر من التحسين التقليدي المُوجَّه بالملفات التعريفية من الكود المصدري. [ 23 ]
المزايا
تتيح بعض مُحسِّنات الملفات الثنائية تطبيق تحسينات أفضل للمُصرِّف على الملفات التنفيذية التي لا يتوفر لها كود المصدر، وفي بعض الحالات بشكل فوري وبأقل جهد. [ 5 ] وقد تُتيح هذه المُحسِّنات تحديدًا أدقّ لخصائص الأداء عند تطبيق التحسينات المُوجَّهة. [ 22 ] ويمكن تطبيق تحسينات البرنامج الكامل على الملفات التنفيذية النهائية، خارج نطاق وحدات تجميع كود المصدر التقليدية. [ 10 ] ويُتيح التحسين الثنائي الديناميكي معلومات أكثر دقة ومرونة في تحديد خصائص الأداء، مع تخصيص كود المكتبة المشتركة لكل عملية، وقد لا يتطلب إجراء تغييرات على الملفات الثنائية الموجودة على القرص. [ 3 ]
انظر أيضاً
مراجع
- 1 2 "معلومات توقيت تعليمات النظام/360" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 11 يوليو 2010. تم الاطلاع عليه بتاريخ 7 يناير 2010 .
- 1 2 بانشينكو، ماكسيم؛ أولر، رافائيل؛ نيل، بيل؛ أوتوني، غيلهيرمي (16 فبراير 2019). "BOLT: مُحسِّن ثنائي عملي لمراكز البيانات وما بعدها". ندوة IEEE/ACM الدولية لعام 2019 حول توليد الشفرات وتحسينها (CGO) . الصفحات 2-14 . arXiv : 1807.06735 . doi : 10.1109/CGO.2019.8661201 . ISBN 978-1-7281-1436-1. S2CID 49869552 .
- 1 2 3 "التحسين الديناميكي الشفاف: تصميم وتنفيذ دينامو" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 2003-05-03.
- ↑ إيفانز، مايكل (1982-12-01). "هندسة البرمجيات لبيئة كوبول" . اتصالات رابطة مكائن الحوسبة . 25 (12): 874-882 . doi : 10.1145/358728.358732 . S2CID 17268690 .
- 1 2 "مُحسِّن الملفات الثنائية التلقائي من IBM لنظام التشغيل z/OS" . IBM . مؤرشف من الأصل بتاريخ 16-12-2025.
- ↑ كوهن، روبرت س.؛ غودوين، ديفيد و.؛ لوني، ب. جيفري (1997). "تحسين أداء ملفات ألفا التنفيذية على نظام ويندوز إن تي باستخدام سبايك" (ملف PDF) . المجلة التقنية الرقمية . 9 (4): 3-20 . مؤرشف من الأصل بتاريخ 16-12-2025.
- ↑ فلاور، ريتشارد؛ لوك، تشي-كيونغ؛ موث، روبرت؛ باتيل، هاريش؛ شاكشوبر، جون؛ كوهن، روبرت؛ لوني، بي. جيفري (2001). "تحسينات النواة والجلب المسبق باستخدام مُحسِّن Spike Executable مع Spike" .
- ↑ "مُحسِّن الشفرة الثنائية" . مؤرشف من الأصل بتاريخ 22-07-2010 . تم الاطلاع عليه بتاريخ 07-01-2010 .
- ↑ "مُحسِّن الملفات الثنائية لنظام أوراكل سولاريس" . مؤرشف من الأصل بتاريخ 14-09-2024.
- 1 2 موث، ر.؛ ديبري، س.ك.؛ واترسون، س.؛ دي بوسشير، كوين (2001). "ألتو: مُحسِّن وقت الربط لجهاز كومباك ألفا" (ملف PDF) . البرمجيات - الممارسة والخبرة . 31 (1): 67-101 . doi : 10.1002/1097-024X(200101)31:1 < 67::AID-SPE357 > 3.0.CO ; 2-A . مؤرشف من الأصل (ملف PDF) بتاريخ 21-02-2008 . تم الاسترجاع بتاريخ 17-12-2025 .
- ↑ ديبري، سوميا؛ موث، روبرت؛ واترسون، سكوت (2001). تحسين استهلاك الطاقة للبرمجيات عبر إعادة كتابة البيانات الثنائية بعد وقت الربط (ملف PDF) (تقرير فني). قسم علوم الحاسوب، جامعة أريزونا . تاريخ الاسترجاع: 29 ديسمبر 2025 .
- ↑ شوارتز، بنيامين ويليام (2002). تحسين وقت الربط اللاحق على معمارية إنتل IA-32 (ملف PDF) (رسالة شرف). جامعة أريزونا. مؤرشف من الأصل (ملف PDF) بتاريخ 1 مارس 2006. تم الاطلاع عليه بتاريخ 17 ديسمبر 2025 .
- ↑ سنافلي، نوح. تحسين وهندسة عكسية لملفات إيتانيوم الثنائية (ملف PDF) (أطروحة). مؤرشف من الأصل (ملف PDF) بتاريخ 1 مارس 2006. تم الاطلاع عليه بتاريخ 17 ديسمبر 2025 .
- ↑ دي سوتر، بيورن؛ دي بوس، برونو؛ دي بوسشير، كوين؛ ديبري، سوميا. دمج الترميز العالمي وضغط البيانات (ملف PDF) . قسم الإلكترونيات ونظم المعلومات، جامعة غنت / قسم علوم الحاسوب، جامعة أريزونا . تاريخ الاسترجاع: 29 ديسمبر 2025 .
- ↑ ""تحسين برمجيات SOLAR في وقت الربط ووقت التشغيل" . مؤرشف من الأصل بتاريخ 14-02-2016.
- ↑ برونينغ، ديريك؛ غارنيت، تيموثي؛ أماراسينغ، سامان (2003). بنية تحتية للتحسين الديناميكي التكيفي . الندوة الدولية حول توليد الشفرات والتحسين (CGO) . تم الاسترجاع في 13 يناير 2026 .
- ↑ لو، جيوي؛ تشين، هوارد؛ فو، راو؛ هسو، وي-تشونغ؛ أوثمر، بوبي؛ يو، بن-تشونغ (2003). أداء جلب البيانات المسبق في ذاكرة التخزين المؤقت أثناء التشغيل في نظام التحسين الديناميكي (ملف PDF) . MICRO 36 (الندوة الدولية السنوية السادسة والثلاثون لمعهد مهندسي الكهرباء والإلكترونيات/رابطة مكائن الحوسبة حول هندسة المعالجات الدقيقة). مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 5 يوليو 2024. تم الاطلاع عليه بتاريخ 18 ديسمبر 2025 .
- ↑ كيم، جينبيو؛ هسو، وي-تشونغ؛ يو، بين-تشونغ (2007). "كوبرا: إطار عمل تكيفي لتحسين الأداء الثنائي في وقت التشغيل للتطبيقات متعددة الخيوط". المؤتمر الدولي للمعالجة المتوازية 2007 (ICPP 2007) . ص 25. doi : 10.1109/ICPP.2007.23 . ISBN 978-0-7695-2933-2. S2CID 15079211 .
- ١ ٢ "نظرة عامة على منتجات Dynimize" . dynimize.com . شركة Dynimize. مؤرشف من الأصل بتاريخ ١١ أغسطس ٢٠٢٥. تم الاطلاع عليه بتاريخ ١٨ ديسمبر ٢٠٢٥ .
- ↑ "دليل مستخدم Dynimize الإصدار 2" . dynimize.com . شركة Dynimize. مؤرشف من الأصل بتاريخ 18-12-2025 . تم الاطلاع عليه بتاريخ 18-12-2025 .
- ↑ "تحسينات في أداء وحدة المعالجة المركزية لـ MySQL و MariaDB باستخدام Dynimize" . dynimize.com . شركة Dynimize. مؤرشف من الأصل بتاريخ 23 يونيو 2024. تم الاطلاع عليه بتاريخ 18 ديسمبر 2025 .
- 1 2 "OptimizingLinux.md" . GitHub . llvm/llvm-project. مؤرشف من الأصل بتاريخ 2025-08-02 . تم الاطلاع عليه بتاريخ 2025-12-18 .
- ↑ شين، هان؛ بسزنيتشني، كريستوف؛ لافاي، رحمن؛ كومار، سنيهاسيس؛ تالام، سريرامان؛ لي، شينليانغ ديفيد (2023). بروبيلر: مُحسِّن إعادة ربط مُوجَّه بالملف الشخصي لتطبيقات المستودعات واسعة النطاق . وقائع المؤتمر الدولي الثامن والعشرين لجمعية الحوسبة الآلية (ACM) حول الدعم المعماري للغات البرمجة وأنظمة التشغيل. ASPLOS '23. ACM. الصفحات 617-631 . مؤرشف من الأصل في 2025-07-02 . تم الاسترجاع في 2025-12-18 .
- المترجمون
- برامج تحسين نظام الحاسوب
- تحسين البرمجيات
