0% found this document useful (0 votes)
5 views8 pages

CS477 - Module12

تتناول الوثيقة تحسينات الكود على مستوى منخفض، مثل تحسينات Peephole واختيار التعليمات، التي تهدف إلى تحسين أداء البرامج من خلال تقنيات مثل إزالة التعليمات المكررة وإدارة السجلات. كما تتطرق إلى أهمية تخصيص السجلات وتقنيات تحسين الأداء المتعلقة بالعمليات الحسابية. الوثيقة توضح كيفية تحسين الكود ليعمل بكفاءة أكبر على الأجهزة من خلال تقنيات مختلفة.

Uploaded by

marj00j2021
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views8 pages

CS477 - Module12

تتناول الوثيقة تحسينات الكود على مستوى منخفض، مثل تحسينات Peephole واختيار التعليمات، التي تهدف إلى تحسين أداء البرامج من خلال تقنيات مثل إزالة التعليمات المكررة وإدارة السجلات. كما تتطرق إلى أهمية تخصيص السجلات وتقنيات تحسين الأداء المتعلقة بالعمليات الحسابية. الوثيقة توضح كيفية تحسين الكود ليعمل بكفاءة أكبر على الأجهزة من خلال تقنيات مختلفة.

Uploaded by

marj00j2021
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬

‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Compiler Design‬‬
‫‪Module 12 summary‬‬
‫‪Low-Level Optimizations‬‬
‫الل‬ ‫ر‬
‫الـ ‪Low-Level Optimizations‬بتتعامل مع التجمة بتاعة الكود بطريقة تستغل الجهاز أو الماكينة ي‬
‫ن‬ ‫ن‬
‫الل قريبة من الهاردوير‪.‬‬
‫يعن بتشتغل عل تحسي األكواد ي‬ ‫التنامج بشكل أحسن‪ .‬ي‬ ‫هيشتغل عليها ر‬
‫تحسي بسيط بتّكز عل جزء صغت قوي من الكود (زي تعليمة أو ن‬
‫اثني)‬ ‫ن‬ ‫‪Peephole Optimization .1‬ده‬
‫ن‬
‫لتحسي األداء‪.‬‬ ‫وبيحاول يغته بشكل آمن‬
‫الل الكود هيشتغل عليها‪.‬‬
‫الل بتناسب الماكينة ي‬
‫الل هو اختيار التعليمات ي‬
‫‪ Instruction Selection .2‬ي‬
‫‪Peephole Optimizations‬‬
‫ّ‬ ‫ن‬
‫تحسي بسيط قوي بتكز عل جزء صغت من الكود زي خط أو‬ ‫الـ ‪Peephole Optimization‬عبارة عن‬
‫المتة إنه سهل يتعمل ن يف آخر مرحلة من الـ ‪( Compilation‬تجميع الكود)‪ ،‬لكن تأثته العام محدود‪.‬‬
‫خطي‪ .‬ن‬
‫ن‬
‫الخصائص بتاعته‪:‬‬
‫ن‬
‫يعن بيأثر بس عل جزء صغت‪.‬‬
‫محل ‪ (Local in nature):‬ي‬
‫ي‬ ‫•‬

‫ن‬
‫معي‪(Pattern-driven).‬‬ ‫بيشتغل بنمط‬ ‫•‬

‫الل بيبص عليها ن يف الكود صغتة‬


‫محدود بحجم الـ ‪ Window‬المساحة ي‬ ‫•‬

‫‪Basic Block Level‬‬


‫الل مفيهوش ‪ Jump‬أو‬ ‫ن‬
‫يف تحسينات بتشتغل عل مستوى الـ ‪ ،Basic Block‬وده جزء صغت من الكود ي‬
‫تفرعات‪ .‬من أمثلتها‪:‬‬
‫الل مكررة‪.‬‬
‫‪Common Subexpression Elimination .1‬إزالة التعبتات ي‬
‫الل قيمتها ثابتة بالقيمة نفسها‪.‬‬
‫‪Constant Propagation .2‬استبدال المتغتات ي‬
‫الل مش بتتنفذ أو ملهاش الزمة‪.‬‬
‫‪Dead Code Elimination .3‬إزالة األكواد ي‬
‫‪ .4‬حاجات تانية زي ‪:‬‬
‫‪Copy Propagation‬‬ ‫‪o‬‬

‫‪Value Numbering‬‬ ‫‪o‬‬

‫‪Partial Redundancy Elimination‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Redundant Load Elimination‬‬


‫الل مالش الزمة‪.‬‬
‫الل بتشيل أو تقلل التعليمات المكررة ي‬
‫دي واحدة من تقنيات ‪ Peephole Optimization‬ي‬
‫أول حالة‪:‬‬
‫الل لسه محفوظه‪:‬‬ ‫ن‬
‫لو فيه تعليمات بتحفظ قيمة يف مكان (زي الميموري) وبعدين ترجع تحمل نفس القيمة ي‬
‫قبل ‪:‬‬ ‫•‬

‫‪MOVQ %R8, x‬‬


‫‪MOVQ x, %R8‬‬
‫بعد ‪:‬‬ ‫•‬

‫‪MOVQ %R8, x‬‬


‫ً‬
‫هنا شلنا التعليمات المكررة‪ ،‬ألن القيمة أصال محفوظة‪.‬‬
‫حالة تانية‪:‬‬
‫ر ن‬
‫تان بطريقة غت ر‬
‫مباشة ن‬
‫(يعن يعدي عل الميموري األول)‪:‬‬ ‫ر‬
‫ي‬ ‫لو فيه عملية نقل قيمة من ريجيست لريجيست ي‬
‫قبل ‪:‬‬ ‫•‬

‫‪MOVQ %R8, x‬‬


‫‪MOVQ x, %R9‬‬
‫بعد ‪:‬‬ ‫•‬

‫‪MOVQ %R8, x‬‬


‫‪MOVQ %R8, %R9‬‬
‫ر‬
‫الريجيستات‪.‬‬ ‫هنا بدل ما القيمة تتحفظ نف الميموري وبعدين تتحمل‪ ،‬خلينا العملية ر‬
‫مباشة ن‬
‫بي‬ ‫ي‬
‫الل بتستهلك وقت الـ ‪ ،CPU‬وده يحسن األداء ويقلل الـ ‪Pipeline Stall‬‬ ‫ن‬
‫هنا إننا بنقلل عدد التعليمات ي‬ ‫المتة‬
‫التأخت ن يف تنفيذ التعليمات‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Instruction Selection‬‬
‫الل بنعمله ‪ Compile‬بحيث‬
‫الـ ‪ Instruction Selection‬دي عملية اختيار التعليمات المناسبة للكود ي‬
‫تناسب المعمارية بتاعت المعالج‪.‬‬
‫الفكرة‪:‬‬
‫أكت من تعليمة ن يف بعض‬
‫نف البداية‪ ،‬كل ‪ Node‬نف الشجرة ‪ AST‬أو ‪ DAG‬بيتحول لتعليمات‪ ،‬وده ممكن يكون ر‬
‫ي‬ ‫ي‬
‫الحاالت‪.‬‬
‫ر‬
‫الل من النوع ‪ CISC‬زي معمارية ‪ ،X86‬ممكن تعليمة واحدة تعمل أكت من حاجة زي‪:‬‬ ‫ن‬
‫لكن يف المعالجات ي‬
‫ر‬
‫المؤش)‪(Dereferencing a pointer‬‬ ‫فك‬ ‫•‬

‫الوصول للذاكرة‪.‬‬ ‫•‬

‫تنفيذ عملية حسابية‪.‬‬ ‫•‬

‫)‪(Tree Coverage‬‬
‫بنمثل كل التعليمات كـ ‪(Tree Templates‬شجرة تعليمات)‪ ،‬والـ ‪ Nodes‬بتاعتها ممكن تكون‬ ‫•‬
‫ريجيستات‪ ،‬ثوابت‪ ،‬أو أماكن ن يف الميموري‪.‬‬
‫ر‬
‫ر‬
‫نالف التطابق‪ ،‬ونحولها‬
‫أثناء الـ‪ ، Compilation‬الشجرة دي بتتم مقارنتها مع شجرة الكود )‪ (DAG‬بحيث ي‬ ‫•‬
‫لتعليمات ر‬
‫مباشة‪.‬‬
‫مثال‪:‬‬
‫تعليمة زي‪:‬‬
‫‪ADDQ Cj, R1‬‬
‫ر‬
‫وريجيست‪.‬‬ ‫دي ممكن تعمل جمع ر‬
‫مباشة ن‬
‫بي رقم ثابت‬
‫أمثلة من ‪X86‬‬
‫التعليمات البسيطة ‪:‬‬ ‫•‬

‫ر‬
‫لريجيست‪.‬‬ ‫‪ MOV SCj, Ri‬بتحول ثابت‬ ‫‪o‬‬

‫ر‬
‫لريجيست‪.‬‬ ‫‪ MOV Mx, Ri‬بتحمل قيمة من الميموري‬ ‫‪o‬‬

‫التعليمات المعقدة ‪:‬‬ ‫•‬

‫مؤشات‪.‬‬ ‫زي ‪ MOV Cj(Ri, 8), Ri‬الل ممكن تجمع ن‬


‫وتضب وتتعامل مع ر‬ ‫‪o‬‬
‫ي‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫دور الـ ‪Code Generator‬‬


‫الـ ‪Code Generator‬بيقارن الشجرة الكاملة مع المكتبة بتاعة الـ ‪ Templates‬ويحولها للتعليمات المناسبة‪.‬‬
‫مثال‬
‫;‪a[i] = b + 1‬‬
‫بيتم تحويله لتعليمات ‪ X86‬بعد ما الشجرة تتغىط بالتعليمات الصحيحة‪.‬‬
‫‪Register Allocation‬‬
‫الفكرة األساسية‪:‬‬
‫الل بتتعامل مع ‪registers‬أشع بكتت من‬ ‫ن‬
‫يف المعالجات )‪ (CPUs‬الحديثة‪ ،‬شعة العمليات الحسابية ي‬
‫الل بتعتمد عل ‪memory‬‬
‫العمليات ي‬
‫ن‬ ‫ً‬
‫الل ياخده‬
‫• مثال‪ ،‬المعالج ممكن ينفذ ‪ thousands of arithmetic operations‬يف نفس الوقت ي‬
‫عشان يعمل عملية ‪load‬أو ‪store‬واحدة من الميموري‪.‬‬
‫أهمية‪Register Allocation‬‬
‫الل بتقلل عمليات التحميل والتخزين من وإىل الميموري بيكون لها تأثت كبت عل‬
‫‪ Optimization‬ي‬ ‫•‬
‫التنامج‪.‬‬ ‫ن‬
‫تحسي أداء ر‬
‫أول خطوة‪ :‬التخلص من األكواد والمتغتات الل ملهاش الزمة ً‬
‫تماما‪.‬‬ ‫•‬
‫ي‬
‫الخطوة التانية‪ :‬نخصص المتغتات المحلية )‪ (local variables‬ن يف ‪registers‬بحيث متحتاجش‬ ‫•‬
‫تتحمل أو تتخزن ن يف الميموري‪.‬‬
‫إزاي ‪ Register Allocation‬بيشتغل؟‬
‫نخل المتغتات تستخدم ‪registers‬بدل ما تكون ن يف ‪memory‬‬ ‫ي‬ ‫‪ .1‬الفكرة إننا نحاول‬
‫الل‬ ‫ر‬ ‫ر‬
‫‪ .2‬لما يبق فيه قيمة المفروض تتحمل أو تتخزن‪ ،‬المتجم )‪ (compiler‬بيستبدل مكانها بالـ ‪ register‬ي‬
‫اتخصص ليها‪.‬‬
‫مباشة ن يف العمليات بدل االعتماد عل الميموري‪.‬‬
‫‪ .3‬كده القيم بتستخدم ر‬

‫األسئلة المهمة ف‪Register Allocation:‬‬


‫يعن هل المتغت ممكن يتحط ن يف ‪register‬من غت مشاكل؟‬ ‫ن‬
‫هل آمن؟ ي‬ ‫•‬

‫الل لو اتحطت ن يف ‪registers‬هتعمل فرق كبت ن يف األداء؟‬ ‫ن‬


‫يعن المتغتات ي‬
‫المتغيات؟ ي‬
‫ر‬ ‫إيه أهم‬ ‫•‬

‫أكت من متغت يستخدموا نفس ‪register‬من غت تعارض؟‬ ‫يعن إزاي نخل ر‬‫ن‬
‫ي‬ ‫إدارة الموارد؟ ي‬ ‫•‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Safety of Register Allocation‬‬


‫المتغيات ينفع تتحط ف‪ Register‬؟‬
‫ر‬ ‫هل كل‬
‫ً‬
‫• مش كل المتغتات ينفع تتحط ن يف ‪registers‬ألن أحيانا ن يف عمليات عل الميموري الزم تحصل عشان‬
‫الل شغال‪.‬‬
‫تؤثر عل الكود أو تظهر حاجة خارج الكود ي‬
‫لمتغيات ما ينفعش تتحط ف‪Registers:‬‬
‫ر‬ ‫أمثلة‬
‫أكت من وظيفة أو ‪module.‬‬ ‫‪Global Variables .1‬المتغتات العالمية الل بتستخدم نف ر‬
‫ي‬ ‫ي‬
‫بي الـ ‪ threads‬ن يف األكواد المتوازية‬
‫‪Communication Variables .2‬المتغتات الل بتستخدم للتواصل ن‬
‫ي‬
‫متامن‪.‬‬‫‪Interrupt Handlers .3‬المتغتات الل بيتم الوصول ليها بشكل غت ر ن‬
‫ي‬
‫الل بتستخدم للتعامل مع عمليات اإلدخال واإلخراج المربوطة‬
‫‪Memory-Mapped I/O .4‬المتغتات ي‬
‫بالميموري‪.‬‬
‫‪Priority of Register Allocation‬‬
‫المتغيات الل تتحط ف‪ Register‬؟‬
‫ر‬ ‫ازاي نحدد أولويات‬
‫أول طريقة‪:‬‬
‫التنامج ‪.‬‬
‫أكت عدد من عمليات ‪load‬و ‪store‬أثناء تشغيل ر‬
‫الل بيتعمل لها ر‬
‫نشوف المتغتات ي‬ ‫•‬

‫نعمل ‪profiling‬ونحسب عدد مرات الوصول لكل متغت‪.‬‬ ‫‪o‬‬

‫نختار المتغتات الل بيتم الوصول ليها ر‬


‫أكت‪.‬‬ ‫‪o‬‬
‫ي‬
‫ن‬ ‫ً‬
‫التامج الكبتة‪.‬‬
‫المشكلة هنا إن الطريقة دي بطيئة جدا وغت عملية يف ر‬ ‫‪o‬‬
‫تان طريقة ر‬
‫(أكي واقعية)‪:‬‬
‫نستخدم تحليل ثابت للكود )‪ (static analysis‬ونعمل ‪scoring‬للمتغتات ‪:‬‬ ‫•‬

‫الل ليها أعل عدد من عمليات الوصول تاخد أولوية‪.‬‬


‫المتغتات ي‬ ‫‪o‬‬

‫وبالتاىل له أولوية أعل‪.‬‬ ‫لو المتغت بيتكرر جواه ‪(loop‬حلقة تكرارية)‪ ،‬ده معناه إنه بيحتاج عمليات ر‬
‫أكت‬ ‫‪o‬‬
‫ي‬
‫المتغتات نف ‪(nested loops‬حلقات متداخلة) كمان تاخد أولوية أعل ألن استخدامها ن‬
‫بتيد‪.‬‬ ‫‪o‬‬
‫ي‬
‫‪Conflicts Between Variables‬‬
‫المتغيات ممكن تتعارض؟‬
‫ر‬ ‫ليه‬
‫مش كل متغت محتاج ‪register‬خاص بيه‪.‬‬ ‫•‬

‫متغتين ممكن يشاركوا نفس الـ ‪register‬لو مفيش بينهم تعارض ن يف وقت االستخدام‪.‬‬ ‫•‬

‫إزاي نعرف لو ف تعارض؟‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪ .1‬بنحسب ‪live ranges‬لكل متغت ‪:‬‬


‫يعن المدة الل ر‬
‫بيبق المتغت فيها مستخدم أو "عايش"‬ ‫ن‬ ‫‪o‬‬
‫ي‬ ‫ي‬
‫‪ .2‬لو ‪live ranges‬بتاعت متغتين بتتداخل‪ ،‬ر‬
‫يبق مينفعش يشاركوا نفس الـ ‪register‬‬
‫بنبن ‪conflict graph‬‬ ‫ن‬ ‫‪.3‬‬
‫ي‬
‫‪ o‬كل ‪ node‬ن يف الجراف بتمثل متغت‪.‬‬
‫الل الـ ‪live ranges‬بتاعتهم بتتداخل‪.‬‬ ‫ن‬
‫‪ o‬بنضيف خط )‪ (edge‬بي المتغتات ي‬

‫‪Register Conflict Graph‬‬


‫مثال ‪:‬‬
‫الل ن يف الصورة‪:‬‬
‫يف الكود ي‬
‫ن‬

‫المتغتات زي ‪x, y, a,‬و ‪z‬ليهم ‪live ranges‬مختلفة‪.‬‬ ‫•‬

‫وبالتاىل ميقدروش يشاركوا نفس الـ ‪register‬‬ ‫ن‬


‫متداخلي مع بعض‬ ‫الل‬
‫ي‬ ‫الجراف بيوضح إيه المتغتات ي‬ ‫•‬

‫إزاي نحل التعارض؟‬


‫‪ .1‬بنحول المشكلة لمشكلة ‪graph coloring:‬‬
‫ن‬
‫يعن ‪register‬‬
‫الهدف إننا نلون كل ‪node‬بلون مختلف اللون هنا ي‬ ‫‪o‬‬

‫(يعن ن يف تعارض)‪.‬‬
‫ي‬
‫متقدرش تستخدم نفس اللون لو الـ ‪nodes‬متصلة ببعض ن‬ ‫‪o‬‬

‫‪ .2‬الرسومات التخطيطية البسيطة ممكن نلونها بـ ‪ 4‬ألوان (أو أقل)‪ ،‬لكن لو الجراف معقد‪ ،‬ممكن نحتاج ر‬
‫أكت‪.‬‬
‫‪ .3‬إيجاد أقل عدد ألوان ن يف الجراف ممكن يكون صعب)‪ ، (NP-complete problem‬فبنستخدم طرق‬
‫تقريبية)‪(heuristics‬‬
‫خطوات شائعة لحل المشكلة‪:‬‬
‫‪ .1‬نبتتب الـ ‪nodes‬حسب عدد التعارضات ر‬
‫أكت واحد ليه ‪edges‬األول‬
‫‪ .2‬بعد كده‪ ،‬بنبدأ نخصص لكل ‪node register‬مش مستخدم من الجتان بتوعه‪.‬‬
‫‪ .3‬لو عدد الـ ‪registers‬المتاح خلص ‪:‬‬
‫بنعلم الـ ‪node‬دي كمتغت مش ن يف ‪register.‬‬ ‫‪o‬‬
‫ر‬
‫لباف الجراف‪.‬‬
‫ونكمل ي‬ ‫‪o‬‬

‫الهدف من ‪conflict graph‬هو إدارة المتغتات بطريقة تقلل التعارضات عل ‪registers.‬‬ ‫•‬

‫عمل وشي ــع!‪.‬‬


‫ي‬ ‫بنستخدم تقنيات زي ‪graph coloring‬وطرق تقريبية لحل المشكلة بشكل‬ ‫•‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Global Register Allocation‬‬


‫الفكرة العامة‪:‬‬
‫عت جسم الـ‬
‫عالم ر‬
‫ي‬ ‫الهدف من ‪Global Register Allocation‬هو تخصيص ‪registers‬بشكل‬ ‫•‬
‫‪function‬كله‪ ،‬مع ضمان إن التخصيص ر‬
‫يبق متسق بغض النظر عن المسارات المختلفة لتدفق الكود‬
‫)‪(control flow‬‬
‫خطوات التنفيذ‪:‬‬
‫ن‬
‫بنبن )‪Control Flow Graph (CFG‬للـ ‪function:‬‬ ‫‪.1‬‬
‫ي‬
‫الجراف ده بيمثل كل المسارات الممكنة الل الكود ممكن ر‬
‫يمش فيها‪.‬‬ ‫‪o‬‬
‫ي‬ ‫ي‬
‫الل المتغت بيتم تعريفه واستخدامه‪.‬‬
‫بنحدد فيه األماكن ي‬ ‫‪o‬‬

‫‪ .2‬بنحدد كل الـ ‪live blocks:‬‬


‫الل المتغت "عايش" فيها (بيتم استخدامه)‪.‬‬ ‫ن‬
‫يعن األماكن ي‬
‫ي‬ ‫‪o‬‬

‫ن‬
‫بنبن ‪Conflict Graph:‬‬ ‫‪.3‬‬
‫ي‬
‫‪ o‬كل ‪ node‬ن يف الجراف بتمثل متغت‪.‬‬
‫الل "عايشة" ن يف نفس الـ ‪basic block‬وبيمنعهم من مشاركة‬ ‫ن‬
‫‪ o‬الـ ‪edge‬بيوصل بي المتغتات ي‬
‫نفس الـ ‪register‬‬
‫مثال عمل‪:‬‬
‫• ن يف الصورة ‪ ،‬الكود عل الشمال بيتقسم لـ ‪basic‬‬
‫‪ ،blocks‬وكل متغت بيتخصص ً‬
‫بناء عل التداخالت‬
‫)‪ (conflicts‬ن يف الـ‪graph‬‬
‫‪Optimization Pitfalls‬مشاكل التحسينات‬
‫الحاجات الل الزم نخل بالنا منها‪:‬‬
‫‪ .1‬النتيجة النهائية للكود ‪:‬‬
‫ن‬
‫التحسي يدي نفس النتيجة األصلية لكل المدخالت‪.‬‬ ‫الزم الكود بعد‬ ‫‪o‬‬

‫تغيي الـ ‪Side Effects:‬‬


‫‪ .2‬عدم ر‬
‫بعض التامج بتعتمد عل التأثتات الجانبية ر‬
‫أكت من النتائج‪.‬‬ ‫ر‬ ‫‪o‬‬

‫التأثي عل ‪Debugging:‬‬
‫ر‬ ‫‪.3‬‬
‫التحسينات القوية ممكن تغت طريقة عرض الكود ن يف الـ ‪debugger‬وتسبب سلوك غت متوقع‪.‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Optimization Interactions‬تداخل التحسينات‬


‫التداخالت اإليجابية‪:‬‬
‫ً‬
‫• أحيانا التحسينات بتشتغل مع بعض وتدي نتيجة أفضل ‪:‬‬
‫مثال ‪: Constant Folding‬بيدعم ‪ ،Reachability Analysis‬وده ممكن يشيل األكواد‬ ‫‪o‬‬
‫الميتة‪.‬‬
‫التداخالت السلبية‪:‬‬
‫• ن يف بعض الحاالت‪ ،‬التحسينات بتتعارض مع بعض ‪:‬‬
‫ر‬
‫الريجيستات‪.‬‬ ‫ن‬
‫تحسي تخصيص‬ ‫يخل الكود أعقد ويفشل‬ ‫مثال ‪: Function Inlining‬ممكن‬ ‫‪o‬‬
‫ي‬
‫التعقيد ف اختيار التحسينات‪:‬‬
‫ن‬
‫تحسي‪ ،‬ولو كل تقنية ممكن تتشغل أو تتقفل‪ ،‬عدد‬ ‫حواىل ‪ 50‬تقنية‬ ‫ر‬
‫المتجمات الحديثة فيها‬ ‫•‬
‫ي‬
‫ر‬
‫التوليفات الممكنة يبق ‪250‬‬
‫ً‬ ‫ولو ممكن نطبقهم بأي ترتيب‪ ،‬عدد ر‬
‫التتيبات ر‬
‫يبق !‪50‬عدد ضخم جدا‬ ‫•‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬

You might also like