CS477 - Module11
CS477 - Module11
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
Compiler Design
Module 11 summary
Introduction to Code Optimization
البن آدمي
الل بيكتبه ي
الل بيعمله الـ compilerكان أضعف من الكود ي زمان ،الكود ي •
بيعتب ن ى
الل بيطلع من compilersر
زمان ،قبل ما يبق فيه strategiesمتقدمة لتحسي الكود ،كان الكود ي
أقل جودة من الكود المكتوب يدوي.
دلوقن بيعمل تحسينات قوية بسبب معرفته بالـ architectureبتاع الجهاز
ي الـ compiler •
مع الوقت ،الـ compilersالحديثة بقت بتعمل optimizationsممتازة بتعتمد عل فهم عميق لهاردوير
الجهاز.
قواعد تحسي الكود: •
البنامج.
معن ر ّ
المحسن ما يغبش ن oالكود
البنامج ويقلل الموارد المستخدمة.
يرسع تشغيل ر ّ
المحسن ّ oالكود
ئ
تبط الـcompilation ن
التحسي نفسها تكون رسيعة وما عملية o
ّ
المطور يقدر يغب ترتيب الكود أو يستخدم خوارزميات أحسن. oمن األول،
ّ
ويحسن الحلقاتloops. oبعد ما يطلع الكود الوسيط ،الـ compilerيعدل الـ addresses
ن
تحسي استخدام الذاكرة أو المعالجات. oن يف المرحلة النهائية،
أمثلة: •
لو معانا assembly codeجاهز ،ممكن نشيل تعليمات ملهاش الزمة. o
ذك. ّ
لو بنشتغل بـ ،linear IRنقدر نرسع الكود بتخصيص السجالت بشكل ي o
مع DAGأو ، ASTنقدر نشيل أجزاء كببة من الكود الغب مستخدم. o
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
نصايح:
افحص تعقيد الخوارزمية: •
زي إنك تشوف لو الـ binary searchأفضل من الـ linear searchعل حسب الـinput size. o
وحسن األداء فيه. استخدم toolsعشان تعرف إيه الجزء الل بياخد وقت ى
أكب ّ o
ي
Optimization:
معظم التحسينات بتستهدف patternsمعينة ن يف الكود: •
ن
التحسي ممكن يقلل التكلفة. لو بتكرر حاجة كتب زي الـ، loops o
عشان تقيس تكلفة عملية معينة (زي نضب أرقام) ،كرر العملية مليون مرة ن يف وقت محدد وشوف •
الل أخدته.
الزمن ي
التحسينات:
.1استهدف مشاكل معينة ن يف الكود.
.2قيس الزمن المستغرق واعمل تحسينات ً
بناء عل النتائج.
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
minutes_per_hour=60 o
hours_per_day=24 o
ن
وهيبي هيبق أوضح وأسهل ن يف الفهم،
.2وضوح الكود :النتيجة النهائية ه نفسها ،86400لكن الكود ى
ي
ن
والمعن من الرقم. الغرض
المبجم ممكن يضيف عمليات إضافية زي جمع مبارس ،ى
البنامج :لما يتم ترجمة الكود بشكل ر .3ترجمة ر
ن
محتاجي .ده ممكن يزود الذاكرة المستهلكة واألداء. وضب مشن
.4العمليات داخل الحلقات :لو الحساب ده حصل جوة حلقة ) (loopمعقدة ،ده هيأثر عل األداء
وهيستهلك موارد زيادة بشكل غب نضوري.
تخل الكود غب فعال ،فاألفضل إن المبمج ممكن يكون متفصل أوي لدرجة ً
ي .5التفصيل مش دايما كويس :ر
ى
المبجم يقدر يدمج الثوابت زي ما بيحصل مع constant folding.
Constant Folding
ن
يعن بدل
.1الفكرة :التقنية دي بتحول أي تعبب فيه ثوابت إىل نتيجة واحدة قبل وقت التنفيذ (runtime).ي
البجمة وتتحول إىل 5.ما يحسب 2+3أثناء التشغيل ،يحسبها أثناء ى
البنامج وقت أثناء التشغيل ألنها بتنقل بعض العمليات الحسابية من وقت
توفب الوقت :بتوفر عل ر .2
التنفيذ لوقت ى
البجمة.
الل ى
التنفيذ :المبجم بيعمل post-order traversalلشجرة التعببات ) (ASTوبيحسب القيم الثابتة ي .3
ممكن تدمجها.
معالجة األخطاء :الزم نكون حذرين ن يف التعامل مع الحاالت الخاصة زي القسمة عل صفر أو overflow .4
الل ممكن يسببوا مشاكل.
ي
البيانات الوهمية (Pseudo-code):تم ررسح الطريقة باستخدام كود بسيط يوضح إزاي يتم الدمج ن
بي .5
الثوابت داخل الشجرة التعببية.
األثر النهائ :بيوفر أداء وكود ر
أكب كفاءة عن طريق تقليل العمليات المتكررة أثناء التشغيل. ي
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
وبالتاىل
ي البنامج عن طريق تقليل العمليات المكلفة وتبسيط الكود،
Strength Reductionبيحسن أداء ر
استخدام أقل للموارد مع الحفاظ عل نفس النتائج.
Loop Unrolling:
تحسي ن يف الكود بحيث يتم تحويل الحلقة ) (loopإىل نسخة فيها عدد
ن تعريف : Loop unrollingهو •
ن ى
أقل من التكرارات ) (iterationsلكنها بتنجز شغل أكب يف كل مرة.
الل هيتم دمجها أو تقليلها ن يف كل مرة.
الـ Unrolling Factor:ده عدد التكرارات ي •
بدل ما تتنفذ 400مرة ،ممكن تضيف العمليات دي عل دفعات ) (batchكل 4عناض مع بعض. o
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
األسباب: •
كل مرة ن يف الحلقة بتستهلك وقت ألنها بتشيك عل ررسط i<400 o
Strength Reduction:
الل ملهاش
تحويل حلقة الـ for:بدل ما تعمل كل العمليات بشكل متكرر ،بتقلل العمليات الحسابية ي •
الزمة.
الشكل الجديد: o
الفايدة: •
العيوب: •
مع زيادة حجم الكود (بسبب تكرار العمليات دفعة واحدة) ،ممكن المعالج يستهلك ى
أكب لو تخط الكود o
مساحة الـInstruction Cache.
النتيجة: •
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
Code Hoisting:
فكرة عامة : •
أوقات الكود جواه أجزاء بتتكرر كل مرة جوه الحلقة) ، (loopبس القيم نفسها بتفضل ثابتة. o
ن يف الحالة دي مش الزم نحسب الحاجة دي كل مرة ،وبدل كده ننقل الحسابات الثابتة دي برا الحلقة. o
التقنية دي اسمها"Code Hoisting".
مثال :
{ )for(i=0; i<400; i++
;a[x * y] += i
}
هنا x * yبيتحسب كل مرة ن يف الحلقة ،بس هو ثابت وممكن يتنقل برا الحلقة: o
;t = x * y
{ )for(i=0; i<400; i++
;a[t] += i
}
النتيجة :الكود ىبق أرسع ألن الحسابات الثابتة اتحسبت مرة واحدة بس قبل الحلقة. o
لما تنقل الحسابات برا الحلقة ،النتيجة الزم تتخزن ن يف مكان مؤقت: o
ى
الريجسبات. ▪ يا إما ن يف متغب مؤقت) ، (temporary variableوده ممكن يزود الضغط عل
▪ يا إما ن يف الذاكرة المحلية(local storage).
المبة إنها بتقلل الحسابات الغب نضورية بشكل كبب. ومع ذلك ،ن o
ن
تحسي األداء بدون ما يزيد حجم الكود كتب. بيساعد عل o
Function Inlining
الفعل للفنكشن نفسه .الفكرة هنا إن بدل ما ر
البنامج يروح ي هو عملية استبدال استدعاء الفنكشن بالكود
ر ن
ويعمل " "callعل الفنكشن ويرجع ،ينحط كود الفنكشن يف مكانه مبارسة.
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
ً
األمثلة يف البداية :لو عندنا فانكشن بيتعمله استدعاء كتب جدا جوا لوب ،ده ممكن يكون مكلف عشان •
ً
مبارسة .لما نعمل ، inliningده ن
ببود بدال من تنفيذ الكود ر البنامج بيضيع وقت ن يف استدعاء الفانكشنر
األداء.
أوتوماتيك ،ألن الل المفروض نعملها inlineبشكل نن
ي التلقائ :من الصعب تحديد الفانكشب ي ي تحدي التنفيذ •
المزايا واضحة لكن التكلفة مش سهلة القياس .مثال:
هيكب.
ر للبنامج زيادة حجم الكود :لما نحط الكود ر
مبارسة بدل االستدعاء ،الكود العام ر o
يبق فيه حسابات مكررة. تكرار الحسابات :لو نفس الكود تم نسخه كتب ،ممكن ى o
https://kbseducation.com/
0550602949 / 0557715267